summaryrefslogtreecommitdiff
path: root/gtk2_ardour/virtual_keyboard_window.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-10-21 15:27:42 +0200
committerRobin Gareus <robin@gareus.org>2019-10-21 16:07:12 +0200
commit3daf16dc3aa2d394cb3c03fd4490512735bd11a9 (patch)
tree5082e4e8f2ab66e2173ad491160a640861de743d /gtk2_ardour/virtual_keyboard_window.cc
parent08a9368adf649d82bedecf70b5801f45da91c8da (diff)
Virtual-keyboard: cont'd initial development:
* Reset default note range to 0..127 for step-entry and other users * Allow to print label "C-<n>" on keyboard * Fix 6 octave note range * Save/load user settings in virtual-keyboard window
Diffstat (limited to 'gtk2_ardour/virtual_keyboard_window.cc')
-rw-r--r--gtk2_ardour/virtual_keyboard_window.cc80
1 files changed, 54 insertions, 26 deletions
diff --git a/gtk2_ardour/virtual_keyboard_window.cc b/gtk2_ardour/virtual_keyboard_window.cc
index 299a380cbb..b8dc7c2482 100644
--- a/gtk2_ardour/virtual_keyboard_window.cc
+++ b/gtk2_ardour/virtual_keyboard_window.cc
@@ -47,6 +47,7 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
, _yaxis_velocity ("Y-Axis", ArdourButton::led_default_elements)
, _highlight_grand_piano ("Grand Piano", ArdourButton::led_default_elements)
, _highlight_key_range ("Key Bindings", ArdourButton::led_default_elements)
+ , _show_note_label ("Label C Key", ArdourButton::led_default_elements)
, _send_panic ("Panic", ArdourButton::default_elements)
, _piano_key_velocity (*manage (new Adjustment (100, 1, 127, 1, 16)))
, _piano_min_velocity (*manage (new Adjustment (1 , 1, 127, 1, 16)))
@@ -60,16 +61,17 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
_pianomm->set_flags(Gtk::CAN_FOCUS);
_pianomm->add_events(Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
piano_keyboard_set_keyboard_layout (_piano, "QWERTY");
+ piano_keyboard_show_note_label (_piano, true);
using namespace Menu_Helpers;
_keyboard_layout.AddMenuElem (MenuElem ("QWERTY",
- sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), 0)));
+ sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), "QWERTY")));
_keyboard_layout.AddMenuElem (MenuElem ("QWERTZ",
- sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), 1)));
+ sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), "QWERTZ")));
_keyboard_layout.AddMenuElem (MenuElem ("AZERTY",
- sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), 2)));
+ sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), "AZERTY")));
_keyboard_layout.AddMenuElem (MenuElem ("DVORAK",
- sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), 3)));
+ sigc::bind (sigc::mem_fun (*this, &VirtualKeyboardWindow::select_keyboard_layout), "DVORAK")));
_keyboard_layout.set_active (_("QWERTY"));
_cfg_display.set_active (false);
@@ -77,6 +79,7 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
_yaxis_velocity.set_active (false);
_highlight_grand_piano.set_active (false);
_highlight_key_range.set_active (false);
+ _show_note_label.set_active (true);
_pitchbend = boost::shared_ptr<VKBDControl> (new VKBDControl ("PB", 8192, 16383));
_pitch_slider = manage (new VSliderController(&_pitch_adjustment, _pitchbend, 0, PX_SCALE (15)));
@@ -88,6 +91,7 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
set_tooltip (_highlight_grand_piano, "Shade keys outside the range of a Grand Piano (A0-C8).");
set_tooltip (_highlight_key_range, "Indicate which notes can be controlled by keyboard-shortcuts.");
+ set_tooltip (_show_note_label, "When enabled, print octave number on C-Keys");
set_tooltip (_yaxis_velocity, "When enabled, mouse-click y-axis position defines the velocity.");
set_tooltip (_piano_octave_key, "The center octave, and lowest octave for keyboard control.");
@@ -123,12 +127,13 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
cfg_tbl->attach (*manage (new ArdourVSpacer), 7, 8, 0, 2, SHRINK, FILL, 4, 0);
- cfg_tbl->attach (_highlight_grand_piano, 8, 9, 0, 1, FILL, SHRINK, 4, 2);
- cfg_tbl->attach (_highlight_key_range, 8, 9, 1, 2, FILL, SHRINK, 4, 2);
+ cfg_tbl->attach (_highlight_grand_piano, 8, 9, 0, 1, FILL, SHRINK, 4, 1);
+ cfg_tbl->attach (_highlight_key_range, 8, 9, 1, 2, FILL, SHRINK, 4, 1);
cfg_tbl->attach (*manage (new ArdourVSpacer), 9,10, 0, 2, SHRINK, FILL, 4, 0);
- cfg_tbl->attach (_keyboard_layout, 10,11, 0, 2, SHRINK, SHRINK, 4, 0);
+ cfg_tbl->attach (_show_note_label, 10,11, 0, 1, FILL, SHRINK, 4, 1);
+ cfg_tbl->attach (_keyboard_layout, 10,11, 1, 2, FILL, SHRINK, 4, 1);
cfg_tbl->show_all ();
/* bank/patch */
@@ -188,8 +193,8 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
box1->pack_start (*tbl, true, false);
Box* box2 = manage (new VBox ());
- box2->pack_start (_pgm_display, false, false);
- box2->pack_start (_cfg_display, false, false);
+ box2->pack_start (_pgm_display, false, false, 1);
+ box2->pack_start (_cfg_display, false, false, 1);
box1->pack_start (*box2, false, false);
_cfg_box = manage (new HBox ());
@@ -223,12 +228,14 @@ VirtualKeyboardWindow::VirtualKeyboardWindow ()
_yaxis_velocity.signal_button_release_event().connect (sigc::mem_fun(*this, &VirtualKeyboardWindow::toggle_yaxis_velocity), false);
_highlight_grand_piano.signal_button_release_event().connect (sigc::mem_fun(*this, &VirtualKeyboardWindow::toggle_highlight_piano), false);
_highlight_key_range.signal_button_release_event().connect (sigc::mem_fun(*this, &VirtualKeyboardWindow::toggle_highlight_key), false);
+ _show_note_label.signal_button_release_event().connect (sigc::mem_fun(*this, &VirtualKeyboardWindow::toggle_note_label), false);
_send_panic.signal_button_release_event().connect (sigc::mem_fun(*this, &VirtualKeyboardWindow::send_panic_message), false);
g_signal_connect (G_OBJECT (_piano), "note-on", G_CALLBACK (VirtualKeyboardWindow::_note_on_event_handler), this);
g_signal_connect (G_OBJECT (_piano), "note-off", G_CALLBACK (VirtualKeyboardWindow::_note_off_event_handler), this);
update_velocity_settings (0);
+ update_octave_range ();
set_keep_above (true);
vbox->show_all();
@@ -260,11 +267,16 @@ VirtualKeyboardWindow::get_state ()
{
XMLNode* node = new XMLNode (X_("VirtualKeyboard"));
node->set_property (X_("YAxisVelocity"), _yaxis_velocity.get_active());
+ node->set_property (X_("HighlightGrandPiano"), _highlight_grand_piano.get_active());
+ node->set_property (X_("HighlightKeyRange"), _highlight_key_range.get_active());
+ node->set_property (X_("ShowNoteLabel"), _show_note_label.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 ());
+ node->set_property (X_("Octave"), _piano_octave_key.get_value_as_int ());
+ node->set_property (X_("Range"), _piano_octave_range.get_value_as_int ());
for (int i = 0; i < VKBD_NCTRLS; ++i) {
char buf[16];
sprintf (buf, "CC-%d", i);
@@ -299,7 +311,19 @@ VirtualKeyboardWindow::set_state (const XMLNode &root)
bool a;
if (node->get_property(X_("YAxisVelocity"), a)) {
- _yaxis_velocity.set_active (a);
+ _yaxis_velocity.set_active (a);
+ }
+ if (node->get_property(X_("HighlightGrandPiano"), a)) {
+ _highlight_grand_piano.set_active (a);
+ piano_keyboard_set_grand_piano_highlight (_piano, a);
+ }
+ if (node->get_property(X_("HighlightKeyRange"), a)) {
+ _highlight_key_range.set_active (a);
+ piano_keyboard_set_keyboard_cue (_piano, a);
+ }
+ if (node->get_property(X_("ShowNoteLabel"), a)) {
+ _show_note_label.set_active (a);
+ piano_keyboard_show_note_label (_piano, a);
}
int v;
@@ -315,8 +339,16 @@ VirtualKeyboardWindow::set_state (const XMLNode &root)
if (node->get_property(X_("KeyVelocity"), v)) {
_piano_key_velocity.set_value (v);
}
+ if (node->get_property(X_("Octave"), v)) {
+ _piano_octave_key.set_value (v);
+ }
+ if (node->get_property(X_("Range"), v)) {
+ _piano_octave_range.set_value (v);
+ }
update_velocity_settings (0);
+ update_octave_range ();
+ update_octave_key ();
}
void
@@ -333,23 +365,10 @@ VirtualKeyboardWindow::on_key_press_event (GdkEventKey* ev)
}
void
-VirtualKeyboardWindow::select_keyboard_layout (int l)
+VirtualKeyboardWindow::select_keyboard_layout (std::string const& l)
{
- switch (l) {
- default:
- case 0:
- piano_keyboard_set_keyboard_layout (_piano, "QWERTY");
- break;
- case 1:
- piano_keyboard_set_keyboard_layout (_piano, "QWERTZ");
- break;
- case 2:
- piano_keyboard_set_keyboard_layout (_piano, "AZERTY");
- break;
- case 3:
- piano_keyboard_set_keyboard_layout (_piano, "DVORAK");
- break;
- }
+ piano_keyboard_set_keyboard_layout (_piano, l.c_str());
+ _keyboard_layout.set_active (l);
}
bool
@@ -417,6 +436,15 @@ VirtualKeyboardWindow::toggle_highlight_key (GdkEventButton*)
}
bool
+VirtualKeyboardWindow::toggle_note_label (GdkEventButton*)
+{
+ bool a = ! _show_note_label.get_active ();
+ _show_note_label.set_active (a);
+ piano_keyboard_show_note_label (_piano, a);
+ return false;
+}
+
+bool
VirtualKeyboardWindow::send_panic_message (GdkEventButton*)
{
uint8_t channel = _piano_channel.get_value_as_int () - 1;