diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2006-03-12 18:21:48 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2006-03-12 18:21:48 +0000 |
commit | a505e1469d362cc32acb01252d192c73729fbc43 (patch) | |
tree | a92b0dd4cd289950d453ea2c9c1f913628cb023c /gtk2_ardour/ardour_ui2.cc | |
parent | fd9d6433a15ae5e3f02e5a15aa25d35197c48bc3 (diff) |
remove varispeed control; shuttle controller now has a context menu with max speed options; rearrange and optimize meter metric displays
git-svn-id: svn://localhost/trunk/ardour2@382 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ardour_ui2.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui2.cc | 89 |
1 files changed, 74 insertions, 15 deletions
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index cc2a990326..7655931904 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -56,8 +56,6 @@ using namespace sigc; int ARDOUR_UI::setup_windows () { - using namespace Menu_Helpers; - if (create_editor ()) { error << _("UI: cannot setup editor") << endmsg; return -1; @@ -556,12 +554,73 @@ ARDOUR_UI::audition_blink (bool onoff) } } +void +ARDOUR_UI::build_shuttle_context_menu () +{ + using namespace Menu_Helpers; + + shuttle_context_menu = new Menu(); + MenuList& items = shuttle_context_menu->items(); + + Menu* speed_menu = manage (new Menu()); + MenuList& speed_items = speed_menu->items(); + + RadioMenuItem::Group group; + + speed_items.push_back (RadioMenuElem (group, "8", bind (mem_fun (*this, &ARDOUR_UI::set_shuttle_max_speed), 8.0f))); + if (shuttle_max_speed == 8.0) { + static_cast<RadioMenuItem*>(&speed_items.back())->set_active (); + } + speed_items.push_back (RadioMenuElem (group, "6", bind (mem_fun (*this, &ARDOUR_UI::set_shuttle_max_speed), 6.0f))); + if (shuttle_max_speed == 6.0) { + static_cast<RadioMenuItem*>(&speed_items.back())->set_active (); + } + speed_items.push_back (RadioMenuElem (group, "4", bind (mem_fun (*this, &ARDOUR_UI::set_shuttle_max_speed), 4.0f))); + if (shuttle_max_speed == 4.0) { + static_cast<RadioMenuItem*>(&speed_items.back())->set_active (); + } + speed_items.push_back (RadioMenuElem (group, "3", bind (mem_fun (*this, &ARDOUR_UI::set_shuttle_max_speed), 3.0f))); + if (shuttle_max_speed == 3.0) { + static_cast<RadioMenuItem*>(&speed_items.back())->set_active (); + } + speed_items.push_back (RadioMenuElem (group, "2", bind (mem_fun (*this, &ARDOUR_UI::set_shuttle_max_speed), 2.0f))); + if (shuttle_max_speed == 2.0) { + static_cast<RadioMenuItem*>(&speed_items.back())->set_active (); + } + speed_items.push_back (RadioMenuElem (group, "1.5", bind (mem_fun (*this, &ARDOUR_UI::set_shuttle_max_speed), 1.5f))); + if (shuttle_max_speed == 1.5) { + static_cast<RadioMenuItem*>(&speed_items.back())->set_active (); + } + + items.push_back (MenuElem (_("Maximum speed"), *speed_menu)); +} + +void +ARDOUR_UI::show_shuttle_context_menu () +{ + if (shuttle_context_menu == 0) { + build_shuttle_context_menu (); + } + + shuttle_context_menu->popup (1, 0); +} + +void +ARDOUR_UI::set_shuttle_max_speed (float speed) +{ + shuttle_max_speed = speed; +} gint ARDOUR_UI::shuttle_box_button_press (GdkEventButton* ev) { if (!session) { - return TRUE; + return true; + } + + if (Keyboard::is_context_menu_event (ev)) { + show_shuttle_context_menu (); + return true; } switch (ev->button) { @@ -573,20 +632,20 @@ ARDOUR_UI::shuttle_box_button_press (GdkEventButton* ev) case 2: case 3: - return TRUE; + return true; break; } - return TRUE; + return true; } gint ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev) { if (!session) { - return TRUE; + return true; } - + switch (ev->button) { case 1: mouse_shuttle (ev->x, true); @@ -597,7 +656,7 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev) session->request_transport_speed (1.0); shuttle_box.queue_draw (); } - return TRUE; + return true; case 2: if (session->transport_rolling()) { @@ -607,10 +666,10 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev) shuttle_fract = 0; } shuttle_box.queue_draw (); - return TRUE; + return true; case 3: - return TRUE; + return true; case 4: shuttle_fract += 0.005; @@ -622,14 +681,14 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev) use_shuttle_fract (true); - return TRUE; + return true; } gint ARDOUR_UI::shuttle_box_motion (GdkEventMotion* ev) { if (!session || !shuttle_grabbed) { - return TRUE; + return true; } return mouse_shuttle (ev->x, false); @@ -649,7 +708,7 @@ ARDOUR_UI::mouse_shuttle (double x, bool force) shuttle_fract = distance / half_width; use_shuttle_fract (force); - return TRUE; + return true; } void @@ -679,7 +738,7 @@ ARDOUR_UI::use_shuttle_fract (bool force) fract = -fract; } - session->request_transport_speed (8.0 * fract); // Formula A2 + session->request_transport_speed (shuttle_max_speed * fract); // Formula A2 shuttle_box.queue_draw (); } @@ -706,7 +765,7 @@ ARDOUR_UI::shuttle_box_expose (GdkEventExpose* event) 0, x, shuttle_box.get_height()); - return TRUE; + return true; } void |