@@ -119,9 +119,12 @@ class NeuralRack : public TextEntry
119119 PresetLoadMenu = menu_add_submenu (PresetMenu, " Load Preset" );
120120 PresetLoadMenu->parent_struct = (void *)this ;
121121 PresetLoadMenu->func .value_changed_callback = load_preset_callback;
122- Widget_t* SaveMenu = menu_add_entry (PresetMenu, " Save as ... " );
122+ Widget_t* SaveMenu = menu_add_entry (PresetMenu, " Save" );
123123 SaveMenu->parent_struct = (void *)this ;
124- SaveMenu->func .button_release_callback = save_preset_callback;
124+ SaveMenu->func .button_release_callback = save_changed_preset_callback;
125+ Widget_t* SaveAsMenu = menu_add_entry (PresetMenu, " Save as ..." );
126+ SaveAsMenu->parent_struct = (void *)this ;
127+ SaveAsMenu->func .button_release_callback = save_preset_callback;
125128 Widget_t* DeleteMenu = menu_add_entry (PresetMenu, " Delete Current" );
126129 DeleteMenu->parent_struct = (void *)this ;
127130 DeleteMenu->func .button_release_callback = delete_preset_callback;
@@ -683,6 +686,46 @@ class NeuralRack : public TextEntry
683686 }
684687 }
685688
689+ // replace a preset from the config file
690+ void replacePreset (std::string LoadName) {
691+ std::ifstream infile (presetFile);
692+ std::ofstream outfile (presetFile + " temp" );
693+ bool save = true ;
694+ int remove = 0 ;
695+ std::string line;
696+ std::string key;
697+ std::string value;
698+ std::string ListName;
699+ if (infile.is_open () && outfile.is_open ()) {
700+ while (std::getline (infile, line)) {
701+ std::istringstream buf (line);
702+ buf >> key;
703+ buf >> value;
704+ if (key.compare (" [Preset]" ) == 0 ) {
705+ ListName = remove_sub (line, " [Preset] " );
706+ }
707+ if (ListName.compare (LoadName) == 0 ) {
708+ save = false ;
709+ remove = 1 ;
710+ } else {
711+ save = true ;
712+ }
713+ if (save && remove) {
714+ writePreset (&outfile, currentPreset);
715+ remove = 0 ;
716+ }
717+ if (save) outfile << line<< std::endl;
718+ key.clear ();
719+ value.clear ();
720+ }
721+ infile.close ();
722+ outfile.close ();
723+ std::remove (presetFile.c_str ());
724+ std::rename ((presetFile + " temp" ).c_str (), presetFile.c_str ());
725+ getPresets (ui);
726+ }
727+ }
728+
686729 static void question_response (void *w_, void * user_data) {
687730 Widget_t *w = (Widget_t*)w_;
688731 if (user_data !=NULL ) {
@@ -735,6 +778,14 @@ class NeuralRack : public TextEntry
735778 self->save_as ();
736779 }
737780
781+ // save menu callback
782+ static void save_changed_preset_callback (void * w_, void * item_, void * data_) {
783+ Widget_t *w = (Widget_t*)w_;
784+ NeuralRack *self = static_cast <NeuralRack*>(w->parent_struct );
785+ if (self->currentPreset .empty ()) self->save_as ();
786+ self->replacePreset (self->currentPreset );
787+ }
788+
738789 // load a saved preset
739790 static void load_preset_callback (void * w_, void * data_) {
740791 Widget_t *w = (Widget_t*)w_;
0 commit comments