diff --git a/gtk2_ardour/trigger_ui.cc b/gtk2_ardour/trigger_ui.cc index 3f2d918c3f..def5c9787a 100644 --- a/gtk2_ardour/trigger_ui.cc +++ b/gtk2_ardour/trigger_ui.cc @@ -16,6 +16,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include + #include #include #include @@ -401,11 +403,60 @@ TriggerUI::context_menu () items.push_back (SeparatorElem()); items.push_back (MenuElem (_("MIDI Learn"), sigc::mem_fun (*this, &TriggerUI::trigger_midi_learn))); items.push_back (MenuElem (_("MIDI un-Learn"), sigc::mem_fun (*this, &TriggerUI::trigger_midi_unlearn))); + items.push_back (SeparatorElem()); + items.push_back (MenuElem (_("Save all MIDI Learn settings"), sigc::mem_fun (*this, &TriggerUI::save_midi_learn))); _context_menu->popup (3, gtk_get_current_event_time ()); } +void +TriggerUI::save_midi_learn () +{ + Gtk::FileChooserDialog d (_("Choose filename"), Gtk::FILE_CHOOSER_ACTION_SAVE); + + std::string midi_maps = Glib::build_filename (user_config_directory(), "midi_maps"); + + if (!Glib::file_test (midi_maps, Glib::FILE_TEST_IS_DIR|Glib::FILE_TEST_EXISTS)) { + ::g_mkdir (midi_maps.c_str(), 0755); + } + + d.set_current_folder (midi_maps); + d.present (); + + d.add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); + d.add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK); + + while (true) { + int result = d.run (); + + if (result == Gtk::RESPONSE_OK) { + + std::string filename = d.get_filename (); + + if (filename.find (".midi_map") == std::string::npos) { + filename += X_(".midi_map"); + } + + if (Glib::file_test (filename, Glib::FILE_TEST_EXISTS)) { + Gtk::MessageDialog msg (string_compose (_("%1 already exists.\n" + "Please select a different filename"), filename)); + msg.run (); + msg.set_keep_above (true); + continue; + } + + TriggerBox::dump_custom_midi_bindings (filename); + break; + + } else { + + break; + + } + } +} + void TriggerUI::trigger_midi_learn () { diff --git a/gtk2_ardour/trigger_ui.h b/gtk2_ardour/trigger_ui.h index f6fc7d938d..3f08213eb0 100644 --- a/gtk2_ardour/trigger_ui.h +++ b/gtk2_ardour/trigger_ui.h @@ -91,6 +91,8 @@ public: void trigger_midi_learn (); void trigger_midi_unlearn (); + void save_midi_learn (); + private: void trigger_changed (PBD::PropertyChange const& ); //calls on_trigger_changed to subclasses