summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-10-20 20:53:40 +0200
committerRobin Gareus <robin@gareus.org>2019-10-20 20:53:40 +0200
commit20daca929001c27de3b4f238301b8b8af1beefc6 (patch)
treea50e173b43464c5bb47a833b7612fe882577ec83
parent9c00d6216ace1eb5f4d53b39d54b232ff7fca0e4 (diff)
Virtual-Keyboard: save/restore state
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc7
-rw-r--r--gtk2_ardour/virtual_keyboard_window.cc86
-rw-r--r--gtk2_ardour/virtual_keyboard_window.h5
3 files changed, 95 insertions, 3 deletions
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index 56249bdba8..800eedde2d 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -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;
diff --git a/gtk2_ardour/virtual_keyboard_window.cc b/gtk2_ardour/virtual_keyboard_window.cc
index eb72ffbf0c..26ab4e8bb4 100644
--- a/gtk2_ardour/virtual_keyboard_window.cc
+++ b/gtk2_ardour/virtual_keyboard_window.cc
@@ -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"));
@@ -198,6 +199,85 @@ VirtualKeyboardWindow::~VirtualKeyboardWindow ()
}
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 ()
{
ArdourWindow::on_unmap ();
diff --git a/gtk2_ardour/virtual_keyboard_window.h b/gtk2_ardour/virtual_keyboard_window.h
index 59fd38c418..20d11562f5 100644
--- a/gtk2_ardour/virtual_keyboard_window.h
+++ b/gtk2_ardour/virtual_keyboard_window.h
@@ -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)
{