Skip to content

Commit 9ca3553

Browse files
gtkui: use scriptable UI for dsp presets in preferences window
1 parent 6c52d0e commit 9ca3553

31 files changed

+1055
-1147
lines changed

include/deadbeef/deadbeef.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1807,8 +1807,12 @@ typedef struct {
18071807
#endif
18081808

18091809
#if (DDB_API_LEVEL >= 18)
1810-
// sort using title formatting v2, with more direct control over tf evaluation
1810+
/// sort using title formatting v2, with more direct control over tf evaluation
18111811
void (*plt_sort_v3) (ddb_tf_context_t *tf_ctx, const char *tf_bytecode, int iter, int id, int order);
1812+
1813+
/// Get the root of scriptable tree, which contains dsp and encoder presets.
1814+
/// This is used by GUI plugins for preset editing.
1815+
ddb_scriptable_item_t * (*get_shared_scriptable_root)(void);
18121816
#endif
18131817
} DB_functions_t;
18141818

osx/deadbeef.xcodeproj/project.pbxproj

Lines changed: 93 additions & 21 deletions
Large diffs are not rendered by default.

plugins/cocoaui/ConverterWindowController.m

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ - (void)windowDidLoad {
115115
[self initializeWidgets];
116116
self.window.delegate = self;
117117

118-
self.dspPresetsDataSource = [ScriptableTableDataSource dataSourceWithScriptable:scriptableDspRoot(scriptableRootShared())];
118+
self.dspPresetsDataSource = [ScriptableTableDataSource dataSourceWithScriptable:scriptableDspRoot(deadbeef->get_shared_scriptable_root())];
119119
self.dspSelectViewController.dataSource = self.dspPresetsDataSource;
120120
self.dspSelectViewController = [ScriptableSelectViewController new];
121121
self.dspSelectViewController.view.frame = self.dspPresetSelectorContainer.bounds;
@@ -126,12 +126,12 @@ - (void)windowDidLoad {
126126

127127
char dsp_preset_name[100];
128128
deadbeef->conf_get_str ("converter.dsp_preset_name", "", dsp_preset_name, sizeof(dsp_preset_name));
129-
scriptableItem_t *dspPreset = scriptableItemSubItemForName(scriptableDspRoot(scriptableRootShared()), dsp_preset_name);
129+
scriptableItem_t *dspPreset = scriptableItemSubItemForName(scriptableDspRoot(deadbeef->get_shared_scriptable_root()), dsp_preset_name);
130130
if (dspPreset) {
131131
[self.dspSelectViewController selectItem:dspPreset];
132132
}
133133

134-
self.encoderPresetsDataSource = [ScriptableTableDataSource dataSourceWithScriptable:scriptableEncoderRoot(scriptableRootShared())];
134+
self.encoderPresetsDataSource = [ScriptableTableDataSource dataSourceWithScriptable:scriptableEncoderRoot(deadbeef->get_shared_scriptable_root())];
135135
self.encoderSelectViewController.dataSource = self.dspPresetsDataSource;
136136

137137
self.encoderSelectViewController = [ScriptableSelectViewController new];
@@ -143,7 +143,7 @@ - (void)windowDidLoad {
143143

144144
char enc_preset_name[100];
145145
deadbeef->conf_get_str ("converter.encoder_preset_name", "", enc_preset_name, sizeof(enc_preset_name));
146-
scriptableItem_t *encPreset = scriptableItemSubItemForName(scriptableEncoderRoot(scriptableRootShared()), enc_preset_name);
146+
scriptableItem_t *encPreset = scriptableItemSubItemForName(scriptableEncoderRoot(deadbeef->get_shared_scriptable_root()), enc_preset_name);
147147
if (encPreset) {
148148
[self.encoderSelectViewController selectItem:encPreset];
149149
}
@@ -220,7 +220,7 @@ -(void)updateFilenamesPreview {
220220
if (selectedEncoderPreset == -1) {
221221
return;
222222
}
223-
scriptableItem_t *preset = scriptableItemChildAtIndex(scriptableEncoderRoot(scriptableRootShared()), (unsigned int)selectedEncoderPreset);
223+
scriptableItem_t *preset = scriptableItemChildAtIndex(scriptableEncoderRoot(deadbeef->get_shared_scriptable_root()), (unsigned int)selectedEncoderPreset);
224224
ddb_encoder_preset_t *encoder_preset = self.converter_plugin->encoder_preset_alloc();
225225
scriptableEncoderPresetToConverterEncoderPreset(preset, encoder_preset);
226226

@@ -402,7 +402,7 @@ - (IBAction)okAction:(id)sender {
402402

403403
NSInteger selectedEncoderPreset = self.encoderSelectViewController.indexOfSelectedItem;
404404
if (selectedEncoderPreset != -1) {
405-
scriptableItem_t *preset = scriptableItemChildAtIndex(scriptableEncoderRoot(scriptableRootShared()), (unsigned int)selectedEncoderPreset);
405+
scriptableItem_t *preset = scriptableItemChildAtIndex(scriptableEncoderRoot(deadbeef->get_shared_scriptable_root()), (unsigned int)selectedEncoderPreset);
406406
self.encoder_preset = self.converter_plugin->encoder_preset_alloc();
407407
scriptableEncoderPresetToConverterEncoderPreset(preset, self.encoder_preset);
408408
}
@@ -422,7 +422,7 @@ - (IBAction)okAction:(id)sender {
422422

423423
NSInteger selectedDspPreset = self.dspSelectViewController.indexOfSelectedItem;
424424
if (selectedDspPreset != -1) {
425-
scriptableItem_t *preset = scriptableItemChildAtIndex(scriptableDspRoot(scriptableRootShared()), (unsigned int)selectedDspPreset);
425+
scriptableItem_t *preset = scriptableItemChildAtIndex(scriptableDspRoot(deadbeef->get_shared_scriptable_root()), (unsigned int)selectedDspPreset);
426426
ddb_dsp_context_t *chain = scriptableDspConfigToDspChain(preset);
427427
if (chain) {
428428
self.dsp_preset = self.converter_plugin->dsp_preset_alloc ();
@@ -604,27 +604,27 @@ + (void)cleanup {
604604
#pragma mark - ScriptableSelectDelegate
605605

606606
- (void)scriptableSelectItemSelected:(nonnull scriptableItem_t *)item {
607-
if (scriptableItemParent(item) == scriptableEncoderRoot(scriptableRootShared())) {
607+
if (scriptableItemParent(item) == scriptableEncoderRoot(deadbeef->get_shared_scriptable_root())) {
608608
const char *name = scriptableItemPropertyValueForKey(item, "name");
609609
deadbeef->conf_set_str ("converter.encoder_preset_name", name);
610610
[self updateFilenamesPreview];
611611
}
612-
else if (scriptableItemParent(item) == scriptableDspRoot(scriptableRootShared())) {
612+
else if (scriptableItemParent(item) == scriptableDspRoot(deadbeef->get_shared_scriptable_root())) {
613613
const char *name = scriptableItemPropertyValueForKey(item, "name");
614614
deadbeef->conf_set_str ("converter.dsp_preset_name", name);
615615
}
616616
}
617617

618618
- (void)scriptableItemDidChange:(scriptableItem_t * _Nonnull)scriptable change:(ScriptableItemChange)change {
619-
if (scriptable == scriptableEncoderRoot(scriptableRootShared())) {
619+
if (scriptable == scriptableEncoderRoot(deadbeef->get_shared_scriptable_root())) {
620620
NSInteger selectedEncPresetIndex = self.encoderSelectViewController.indexOfSelectedItem;
621-
scriptableItem_t *selectedEncPreset = scriptableItemChildAtIndex(scriptableEncoderRoot(scriptableRootShared()), (unsigned int)selectedEncPresetIndex);
621+
scriptableItem_t *selectedEncPreset = scriptableItemChildAtIndex(scriptableEncoderRoot(deadbeef->get_shared_scriptable_root()), (unsigned int)selectedEncPresetIndex);
622622
[self scriptableSelectItemSelected:selectedEncPreset];
623623
[self.encoderSelectViewController reloadData];
624624
}
625-
else if (scriptable == scriptableDspRoot(scriptableRootShared())) {
625+
else if (scriptable == scriptableDspRoot(deadbeef->get_shared_scriptable_root())) {
626626
NSInteger selectedDspPresetIndex = self.dspSelectViewController.indexOfSelectedItem;
627-
scriptableItem_t *selectedDspPreset = scriptableItemChildAtIndex(scriptableDspRoot(scriptableRootShared()), (unsigned int)selectedDspPresetIndex);
627+
scriptableItem_t *selectedDspPreset = scriptableItemChildAtIndex(scriptableDspRoot(deadbeef->get_shared_scriptable_root()), (unsigned int)selectedDspPresetIndex);
628628
[self scriptableSelectItemSelected:selectedDspPreset];
629629
[self.dspSelectViewController reloadData];
630630
}

plugins/cocoaui/Preferences/DspPreferencesViewController.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ - (void)viewDidLoad {
5858
_currentDspChain = scriptableDspPresetFromDspChain (deadbeef->streamer_get_dsp_chain ());
5959
self.dspChainDataSource = [ScriptableTableDataSource dataSourceWithScriptable:_currentDspChain];
6060

61-
self.dspPresetsDataSource = [ScriptableTableDataSource dataSourceWithScriptable:scriptableDspRoot(scriptableRootShared())];
61+
self.dspPresetsDataSource = [ScriptableTableDataSource dataSourceWithScriptable:scriptableDspRoot(deadbeef->get_shared_scriptable_root())];
6262

6363
// preset list and browse button
6464
self.dspSelectViewController = [ScriptableSelectViewController new];
@@ -101,7 +101,7 @@ - (void)segmentedControlAction:(NSSegmentedControl *)sender {
101101
if (returnCode == NSModalResponseOK) {
102102
const char *name = self.dspPresetNameTextField.stringValue.UTF8String;
103103
scriptableItem_t *preset = scriptableItemClone (self.dspChainDataSource.scriptable);
104-
scriptableItem_t *presets = scriptableDspRoot(scriptableRootShared());
104+
scriptableItem_t *presets = scriptableDspRoot(deadbeef->get_shared_scriptable_root());
105105
scriptableItemSetUniqueNameUsingPrefixAndRoot(preset, name, presets);
106106
scriptableItemAddSubItem(presets, preset);
107107
[self.dspSelectViewController reloadData];
@@ -111,11 +111,11 @@ - (void)segmentedControlAction:(NSSegmentedControl *)sender {
111111

112112
- (IBAction)presetNameOK:(id)sender {
113113
const char *name = self.dspPresetNameTextField.stringValue.UTF8String;
114-
if (scriptableItemContainsSubItemWithName(scriptableDspRoot(scriptableRootShared()), name)) {
114+
if (scriptableItemContainsSubItemWithName(scriptableDspRoot(deadbeef->get_shared_scriptable_root()), name)) {
115115
[ScriptableErrorViewer.sharedInstance displayDuplicateNameError];
116116
return;
117117
}
118-
if (!scriptableItemIsSubItemNameAllowed(scriptableDspRoot(scriptableRootShared()), name)) {
118+
if (!scriptableItemIsSubItemNameAllowed(scriptableDspRoot(deadbeef->get_shared_scriptable_root()), name)) {
119119
[ScriptableErrorViewer.sharedInstance displayInvalidNameError];
120120
return;
121121
}

plugins/gtkui/Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ GTKUI_SOURCES = \
6060
prefwin/prefwinplugins.c prefwin/prefwinplugins.h\
6161
prefwin/prefwinsound.c prefwin/prefwinsound.h\
6262
scriptable/gtkScriptable.c scriptable/gtkScriptable.h\
63+
gtkScriptablePropertySheetEditViewController.c gtkScriptablePropertySheetEditViewController.h\
64+
gtkScriptablePropertySheetEditWindowController.c gtkScriptablePropertySheetEditWindowController.h\
6365
scriptable/gtkScriptableListEditViewController.c scriptable/gtkScriptableListEditViewController.h\
6466
scriptable/gtkScriptableListEditWindowController.c scriptable/gtkScriptableListEditWindowController.h\
6567
scriptable/gtkScriptableSelectViewController.c scriptable/gtkScriptableSelectViewController.h\

0 commit comments

Comments
 (0)