Skip to content

Commit 0572a99

Browse files
committed
Add save manu entry for standalone
1 parent ebb3e17 commit 0572a99

File tree

1 file changed

+53
-2
lines changed

1 file changed

+53
-2
lines changed

NeuralRack/standalone/NeuralRack.cc

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)