Virtual-Keyboard: save/restore state
authorRobin Gareus <robin@gareus.org>
Sun, 20 Oct 2019 18:53:40 +0000 (20:53 +0200)
committerRobin Gareus <robin@gareus.org>
Sun, 20 Oct 2019 18:53:40 +0000 (20:53 +0200)
gtk2_ardour/ardour_ui_ed.cc
gtk2_ardour/virtual_keyboard_window.cc
gtk2_ardour/virtual_keyboard_window.h

index 56249bdba8fe32fa2fc6f5b6ba705437a90b7436..800eedde2d76a78ae69c7bd727a699d32178a5d9 100644 (file)
@@ -68,6 +68,7 @@
 #include "location_ui.h"
 #include "main_clock.h"
 #include "rc_option_editor.h"
+#include "virtual_keyboard_window.h"
 
 #include <gtkmm2ext/application.h>
 
@@ -871,6 +872,9 @@ ARDOUR_UI::save_ardour_state ()
                if (location_ui) {
                        _session->add_instant_xml (location_ui->ui().get_state ());
                }
+               if (virtual_keyboard_window) {
+                       _session->add_instant_xml (virtual_keyboard_window->get_state());
+               }
        } else {
                Config->add_instant_xml (main_window_node);
                Config->add_instant_xml (enode);
@@ -880,6 +884,9 @@ ARDOUR_UI::save_ardour_state ()
                if (location_ui) {
                        Config->add_instant_xml (location_ui->ui().get_state ());
                }
+               if (virtual_keyboard_window) {
+                       Config->add_instant_xml (virtual_keyboard_window->get_state());
+               }
        }
 
        delete &enode;
index eb72ffbf0c58e3fc9e99c6e6085efe8c5fbd0c21..26ab4e8bb413688a179f618cf87b307a1323e379 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "pbd/convert.h"
 #include "ardour/async_midi_port.h"
+#include "ardour/session.h"
 #include "widgets/tooltips.h"
 
 #include "ardour_ui.h"
@@ -57,11 +58,11 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
        piano_keyboard_set_keyboard_layout (_piano, "QWERTY");
 
        using namespace Menu_Helpers;
-       _keyboard_layout.AddMenuElem (MenuElem (_("QWERTY"),
+       _keyboard_layout.AddMenuElem (MenuElem ("QWERTY",
                                sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), 0)));
-       _keyboard_layout.AddMenuElem (MenuElem (_("QWERTZ"),
+       _keyboard_layout.AddMenuElem (MenuElem ("QWERTZ",
                                sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), 1)));
-       _keyboard_layout.AddMenuElem (MenuElem (_("AZERTY"),
+       _keyboard_layout.AddMenuElem (MenuElem ("AZERTY",
                                sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), 2)));
        _keyboard_layout.set_text (_("QWERTY"));
 
@@ -197,6 +198,85 @@ VirtualKeyboardWindow::~VirtualKeyboardWindow ()
        delete _pitch_slider_tooltip;
 }
 
+void
+VirtualKeyboardWindow::set_session (ARDOUR::Session* s)
+{
+       ArdourWindow::set_session (s);
+
+       if (!_session) {
+               return;
+       }
+
+       XMLNode* node = _session->instant_xml(X_("VirtualKeyboard"));
+       if (node) {
+               set_state (*node);
+       }
+}
+
+XMLNode&
+VirtualKeyboardWindow::get_state ()
+{
+       XMLNode* node = new XMLNode (X_("VirtualKeyboard"));
+       node->set_property (X_("YAxisVelocity"), _yaxis_velocity.get_active());
+       node->set_property (X_("Layout"), _keyboard_layout.get_text ());
+       node->set_property (X_("Channel"), _piano_channel.get_value_as_int ());
+       node->set_property (X_("MinVelocity"), _piano_min_velocity.get_value_as_int ());
+       node->set_property (X_("MaxVelocity"), _piano_max_velocity.get_value_as_int ());
+       node->set_property (X_("KeyVelocity"), _piano_key_velocity.get_value_as_int ());
+       for (int i = 0; i < VKBD_NCTRLS; ++i) {
+               char buf[16];
+               sprintf (buf, "CC-%d", i);
+               node->set_property (buf, _cc_key[i].get_text());
+       }
+       return *node;
+}
+
+void
+VirtualKeyboardWindow::set_state (const XMLNode &root)
+{
+       if (root.name() != "VirtualKeyboard") {
+               return;
+       }
+
+       XMLNode const* node = &root;
+
+       std::string layout;
+       if (node->get_property(X_("Layout"), layout)) {
+               piano_keyboard_set_keyboard_layout (_piano, layout.c_str());
+               _keyboard_layout.set_text (layout);
+       }
+
+       for (int i = 0; i < VKBD_NCTRLS; ++i) {
+               char buf[16];
+               sprintf (buf, "CC-%d", i);
+               std::string cckey;
+               if (node->get_property(buf, cckey)) {
+                       _cc_key[i].set_text (cckey);
+               }
+       }
+
+       bool a;
+       if (node->get_property(X_("YAxisVelocity"), a)) {
+       _yaxis_velocity.set_active (a);
+       }
+
+       int v;
+       if (node->get_property(X_("Channel"), v)) {
+               _piano_channel.set_value (v);
+       }
+       if (node->get_property(X_("MinVelocity"), v)) {
+               _piano_min_velocity.set_value (v);
+       }
+       if (node->get_property(X_("MaxVelocity"), v)) {
+               _piano_max_velocity.set_value (v);
+       }
+       if (node->get_property(X_("KeyVelocity"), v)) {
+               _piano_key_velocity.set_value (v);
+       }
+
+       update_velocity_settings (0);
+}
+
 void
 VirtualKeyboardWindow::on_unmap ()
 {
index 59fd38c4186a8e82ec076ba557173232872de705..20d11562f5466270acf1895e63e60283ead9ac3e 100644 (file)
@@ -89,6 +89,11 @@ public:
        VirtualKeyboardWindow ();
        ~VirtualKeyboardWindow ();
 
+       void set_session (ARDOUR::Session*);
+
+       XMLNode& get_state ();
+       void set_state (const XMLNode &);
+
 private:
        static void _note_on_event_handler (GtkWidget*, int note, int vel, gpointer arg)
        {