diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-11-10 15:25:01 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-11-10 15:25:01 +0000 |
commit | 6449c2e5c8b027245fe5fb9942984243e4a653d7 (patch) | |
tree | 0441b7521bc04dec2f858c3ca836d1ce43b1dcb9 /gtk2_ardour | |
parent | dbafe45a280cc6c33bb7dca72202c109012cd8eb (diff) |
more ardour-button-ization; fix transparency of selection rects; use "correct" cursors when entering and leaving selection rect handles; color tweaks for a few buttons
git-svn-id: svn://localhost/ardour2/branches/3.0@10527 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour3_ui_default.conf | 70 | ||||
-rw-r--r-- | gtk2_ardour/ardour3_widget_list.rc | 14 | ||||
-rw-r--r-- | gtk2_ardour/ardour_button.cc | 14 | ||||
-rw-r--r-- | gtk2_ardour/ardour_button.h | 6 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 8 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui2.cc | 49 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_options.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/canvas_vars.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 27 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 19 | ||||
-rw-r--r-- | gtk2_ardour/editor_actions.cc | 88 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 20 | ||||
-rw-r--r-- | gtk2_ardour/generic_pluginui.cc | 16 | ||||
-rwxr-xr-x | gtk2_ardour/lxvst_pluginui.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/plugin_ui.cc | 48 | ||||
-rw-r--r-- | gtk2_ardour/plugin_ui.h | 7 | ||||
-rw-r--r-- | gtk2_ardour/time_info_box.cc | 20 | ||||
-rw-r--r-- | gtk2_ardour/time_info_box.h | 6 |
19 files changed, 251 insertions, 177 deletions
diff --git a/gtk2_ardour/ardour3_ui_default.conf b/gtk2_ardour/ardour3_ui_default.conf index 3b3323ed6c..f0267215f7 100644 --- a/gtk2_ardour/ardour3_ui_default.conf +++ b/gtk2_ardour/ardour3_ui_default.conf @@ -98,7 +98,7 @@ <Option name="selected region base" value="46465cff"/> <Option name="selected waveform fill" value="bfbfbfff"/> <Option name="selected waveform outline" value="000000ff"/> - <Option name="selection rect" value="ffffffff"/> + <Option name="selection rect" value="9de4d57b"/> <Option name="selection" value="636363b2"/> <Option name="shuttle" value="6bb620ff"/> <Option name="silence" value="9efffd7a"/> @@ -416,7 +416,7 @@ <Option name="rude audition: text active" value="ffffffff"/> <Option name="rude audition: text mid" value="00000000"/> <Option name="mute button: border start" value="ffcb8bff"/> - <Option name="mute button: border end" value="000000ff"/> + <Option name="mute button: border end" value="603600ff"/> <Option name="mute button: border start selected" value="00000000"/> <Option name="mute button: border end selected" value="00000000"/> <Option name="mute button: fill start" value="ac8568ff"/> @@ -432,7 +432,7 @@ <Option name="mute button: text active" value="191919ff"/> <Option name="mute button: text mid" value="262626ff"/> <Option name="solo button: border start" value="ffffffff"/> - <Option name="solo button: border end" value="000000ff"/> + <Option name="solo button: border end" value="757500ff"/> <Option name="solo button: border start selected" value="000000ff"/> <Option name="solo button: border end selected" value="000000ff"/> <Option name="solo button: fill start" value="b7ac6cff"/> @@ -527,5 +527,69 @@ <Option name="transport option button: text" value="c7c7d8ff"/> <Option name="transport option button: text active" value="c8c8d9ff"/> <Option name="transport option button: text mid" value="000000ff"/> + <Option name="transport active option button: border start" value="b7b7d2ff"/> + <Option name="transport active option button: border end" value="000000ff"/> + <Option name="transport active option button: border start selected" value="9a908eff"/> + <Option name="transport active option button: border end selected" value="675c5bff"/> + <Option name="transport active option button: fill start" value="5d5856ff"/> + <Option name="transport active option button: fill end" value="564d48ff"/> + <Option name="transport active option button: fill start active" value="9dfc3dff"/> + <Option name="transport active option button: fill end active" value="90f927ff"/> + <Option name="transport active option button: fill start mid" value="5d5856ff"/> + <Option name="transport active option button: fill end mid" value="564d48ff"/> + <Option name="transport active option button: led" value="4f3300ff"/> + <Option name="transport active option button: led active" value="ffa500ff"/> + <Option name="transport active option button: led mid" value="b87700ff"/> + <Option name="transport active option button: text" value="c7c7d8ff"/> + <Option name="transport active option button: text active" value="000000ff"/> + <Option name="transport active option button: text mid" value="000000ff"/> + <Option name="plugin bypass button: border start" value="826669ff"/> + <Option name="plugin bypass button: border end" value="1b1a1dff"/> + <Option name="plugin bypass button: border start selected" value="00000000"/> + <Option name="plugin bypass button: border end selected" value="00000000"/> + <Option name="plugin bypass button: fill start" value="624848ff"/> + <Option name="plugin bypass button: fill end" value="523d3dff"/> + <Option name="plugin bypass button: fill start active" value="ff0202ff"/> + <Option name="plugin bypass button: fill end active" value="aa0101ff"/> + <Option name="plugin bypass button: fill start mid" value="00000000"/> + <Option name="plugin bypass button: fill end mid" value="00000000"/> + <Option name="plugin bypass button: led" value="510000ff"/> + <Option name="plugin bypass button: led active" value="ff0202ff"/> + <Option name="plugin bypass button: led mid" value="00000000"/> + <Option name="plugin bypass button: text" value="e5e5e5ff"/> + <Option name="plugin bypass button: text active" value="000000ff"/> + <Option name="plugin bypass button: text mid" value="00000000"/> + <Option name="punch button: border start" value="997171ff"/> + <Option name="punch button: border end" value="750d0dff"/> + <Option name="punch button: border start selected" value="000000ff"/> + <Option name="punch button: border end selected" value="00000000"/> + <Option name="punch button: fill start" value="684d4dff"/> + <Option name="punch button: fill end" value="513c3cff"/> + <Option name="punch button: fill start active" value="ff1f1fff"/> + <Option name="punch button: fill end active" value="991212ff"/> + <Option name="punch button: fill start mid" value="00000000"/> + <Option name="punch button: fill end mid" value="00000000"/> + <Option name="punch button: led" value="00000000"/> + <Option name="punch button: led active" value="00000000"/> + <Option name="punch button: led mid" value="00000000"/> + <Option name="punch button: text" value="969696ff"/> + <Option name="punch button: text active" value="e5e5e5ff"/> + <Option name="punch button: text mid" value="00000000"/> + <Option name="mouse mode button: border start" value="32baaeff"/> + <Option name="mouse mode button: border end" value="22827aff"/> + <Option name="mouse mode button: border start selected" value="9a908eff"/> + <Option name="mouse mode button: border end selected" value="675c5bff"/> + <Option name="mouse mode button: fill start" value="21847bff"/> + <Option name="mouse mode button: fill end" value="0c3330ff"/> + <Option name="mouse mode button: fill start active" value="9dfc3dff"/> + <Option name="mouse mode button: fill end active" value="90f927ff"/> + <Option name="mouse mode button: fill start mid" value="5d5856ff"/> + <Option name="mouse mode button: fill end mid" value="564d48ff"/> + <Option name="mouse mode button: led" value="4f3300ff"/> + <Option name="mouse mode button: led active" value="ffa500ff"/> + <Option name="mouse mode button: led mid" value="b87700ff"/> + <Option name="mouse mode button: text" value="c7c7d8ff"/> + <Option name="mouse mode button: text active" value="000000ff"/> + <Option name="mouse mode button: text mid" value="000000ff"/> </Canvas> </Ardour> diff --git a/gtk2_ardour/ardour3_widget_list.rc b/gtk2_ardour/ardour3_widget_list.rc index bfb9ae5bf8..9cf7625da8 100644 --- a/gtk2_ardour/ardour3_widget_list.rc +++ b/gtk2_ardour/ardour3_widget_list.rc @@ -2,6 +2,7 @@ class "GtkWidget" style:highest "default" class "GtkScrollbar" style:highest "ardour_adjusters" class "GtkLabel" style:highest "default_generic" class "GtkButton" style:highest "ardour_button" +class "GtkCheckButton" style:highest "ardour_button" class "GtkArrow" style:highest "tearoff_arrow" class "GtkProgressBar" style:highest "ardour_progressbars" @@ -78,7 +79,6 @@ widget "*MixerSoloButton" style:highest "mixer_solo_button" widget "*MixerSoloButton-alternate" style:highest "mixer_solo_button_alternate" widget "*MixerSoloButton-alternate2" style:highest "mixer_solo_button_alternate2" widget "*MixerSoloButton-active" style:highest "mixer_solo_button_active" -widget "*monitor" style:highest "monitor" widget "*TrackLoopButton*" style:highest "track_loop_button" widget "*PanAutomationLineSelector*" style:highest "multiline_combo" widget "*EditorTimeButton*" style:highest "time_button" @@ -385,11 +385,17 @@ widget "*InsertTimeClock" style:highest "default_clock_display" widget "*EditorRouteGroupsAllGroupButton" style:highest "default_toggle_button" widget "*MidiSoundNotesButton" style:highest "default_toggle_button" widget "*MeasureLatencyButton" style:highest "default_toggle_button" +widget "*monitor" style:highest "monitor" widget "*processor prefader" style:highest "processor" widget "*processor fader" style:highest "processor" widget "*processor postfader" style:highest "processor" widget "*MonitorSectionLabel" style:highest "very_small_text" -widget "*mute button" style:highest "small_text" +widget "*mute button" style:highest "monitor" widget "*send alert button" style:highest "small_text" -widget "*solo button" style:highest "small_text" -widget "*transport option button" style:highest "very_small_text" +widget "*solo button" style:highest "monitor" +widget "*rude solo" style:highest "small_text" +widget "*rude audition" style:highest "small_text" +widget "*transport option button" style:highest "small_text" +widget "*transport active option button" style:highest "small_text" +widget "*plugin bypass button" style:highest "small_text" +widget "*punch button" style:highest "small_text" diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index c6b89e7b7c..1ba4de7535 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -612,6 +612,20 @@ ArdourButton::set_image (const RefPtr<Gdk::Pixbuf>& img) } void +ArdourButton::set_active (bool yn) +{ + /* this is an API simplification for buttons + that only use the Active and Normal states. + */ + + if (yn) { + set_active_state (Gtkmm2ext::Active); + } else { + unset_active_state (); + } +} + +void ArdourButton::set_active_state (Gtkmm2ext::ActiveState s) { bool changed = (_active_state != s); diff --git a/gtk2_ardour/ardour_button.h b/gtk2_ardour/ardour_button.h index 0cee4092ae..9157cc81fd 100644 --- a/gtk2_ardour/ardour_button.h +++ b/gtk2_ardour/ardour_button.h @@ -59,6 +59,12 @@ class ArdourButton : public CairoWidget void set_active_state (Gtkmm2ext::ActiveState); void set_visual_state (Gtkmm2ext::VisualState); + /* this is an API simplification for buttons + that only use the Active and Normal active states. + */ + void set_active (bool); + bool get_active () { return active_state() != Gtkmm2ext::ActiveState (0); } + void set_elements (Element); Element elements() const { return _elements; } diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index e2da245499..0ebf07afe5 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -157,8 +157,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) , auto_play_button (ArdourButton::led_default_elements) , auto_input_button (ArdourButton::led_default_elements) - , time_master_button (_("time\nmaster")) - , auditioning_alert_button (_("AUDITION")) , solo_alert_button (_("SOLO")) diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 720fa6c9e9..2f1ded27cd 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -439,11 +439,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr ArdourButton auto_play_button; ArdourButton auto_input_button; ArdourButton click_button; - Gtkmm2ext::StatefulToggleButton time_master_button; - Gtkmm2ext::StatefulToggleButton sync_button; + ArdourButton time_master_button; + ArdourButton sync_button; - Gtk::ToggleButton auditioning_alert_button; - Gtk::ToggleButton solo_alert_button; + ArdourButton auditioning_alert_button; + ArdourButton solo_alert_button; Gtk::VBox alert_box; diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 8dc25f0004..76794d3e61 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -253,10 +253,14 @@ ARDOUR_UI::setup_transport () auto_return_button.set_name ("transport option button"); auto_play_button.set_name ("transport option button"); auto_input_button.set_name ("transport option button"); - click_button.set_name ("transport option button"); - time_master_button.set_name ("TransportButton"); - sync_button.set_name ("TransportSyncButton"); + /* these have to provide a clear indication of active state */ + + click_button.set_name ("transport active option button"); + time_master_button.set_name ("transport active option button"); + sync_button.set_name ("transport active option button"); + + time_master_button.set_text (_("time master")); stop_button.set_active_state (Active); @@ -286,10 +290,9 @@ ARDOUR_UI::setup_transport () act = ActionManager::get_action (X_("Transport"), X_("ToggleTimeMaster")); - act->connect_proxy (time_master_button); + time_master_button.set_related_action (act); act = ActionManager::get_action (X_("Transport"), X_("ToggleExternalSync")); - act->connect_proxy (sync_button); - + sync_button.set_related_action (act); /* clocks, etc. */ @@ -311,9 +314,9 @@ ARDOUR_UI::setup_transport () /* CANNOT sigc::bind these to clicked or toggled, must use pressed or released */ - solo_alert_button.set_name ("TransportSoloAlert"); + solo_alert_button.set_name ("rude solo"); solo_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::solo_alert_press), false); - auditioning_alert_button.set_name ("TransportAuditioningAlert"); + auditioning_alert_button.set_name ("rude audition"); auditioning_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_press), false); alert_box.pack_start (solo_alert_button, true, false); @@ -402,20 +405,19 @@ ARDOUR_UI::setup_transport () } transport_tearoff_hbox.pack_start (*toggle_box, false, false); - Table* time_controls_table = manage (new Table (2, 2)); - time_controls_table->set_col_spacings (6); - time_controls_table->attach (sync_button, 0, 1, 0, 1, Gtk::AttachOptions(FILL|EXPAND), Gtk::AttachOptions(0)); - time_controls_table->attach (time_master_button, 0, 1, 1, 2, Gtk::AttachOptions(FILL|EXPAND), Gtk::AttachOptions(0)); - - time_controls_table->attach (click_button, 1, 2, 0, 2, Gtk::AttachOptions(FILL|EXPAND), FILL); + VBox* time_controls = manage (new VBox); + time_controls->set_spacing (2); + time_controls->set_homogeneous (true); + time_controls->pack_start (sync_button, true, false); + time_controls->pack_start (time_master_button, true, false); transport_tearoff_hbox.pack_start (*clock_box, false, false); - transport_tearoff_hbox.pack_start (*time_controls_table, false, false); + transport_tearoff_hbox.pack_start (*time_controls, false, false); + transport_tearoff_hbox.pack_start (click_button, false, false); time_info_box = manage (new TimeInfoBox); transport_tearoff_hbox.pack_start (*time_info_box, false, false); - if (Profile->get_small_screen()) { transport_tearoff_hbox.pack_start (_editor_transport_box, false, false); } @@ -527,7 +529,7 @@ ARDOUR_UI::sync_blink (bool onoff) { if (_session == 0 || !_session->config.get_external_sync()) { /* internal sync */ - sync_button.set_visual_state (0); + sync_button.unset_active_state (); return; } @@ -535,13 +537,13 @@ ARDOUR_UI::sync_blink (bool onoff) /* not locked, so blink on and off according to the onoff argument */ if (onoff) { - sync_button.set_visual_state (1); // "-active" + sync_button.set_active_state (Gtkmm2ext::Active); // "-active" } else { - sync_button.set_visual_state (0); // normal + sync_button.unset_active_state (); // normal } } else { /* locked */ - sync_button.set_visual_state (1); // "-active" + sync_button.set_active_state (Gtkmm2ext::Active); // "-active" } } @@ -554,13 +556,12 @@ ARDOUR_UI::audition_blink (bool onoff) if (_session->is_auditioning()) { if (onoff) { - auditioning_alert_button.set_state (STATE_ACTIVE); + auditioning_alert_button.set_active_state (Gtkmm2ext::Active); } else { - auditioning_alert_button.set_state (STATE_NORMAL); + auditioning_alert_button.unset_active_state(); } } else { - auditioning_alert_button.set_active (false); - auditioning_alert_button.set_state (STATE_NORMAL); + auditioning_alert_button.unset_active_state (); } } diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index 2a84d70c0e..866cb6afb4 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -307,11 +307,11 @@ ARDOUR_UI::parameter_changed (std::string p) ActionManager::map_some_state ("Transport", "ToggleExternalSync", sigc::mem_fun (_session->config, &SessionConfiguration::get_external_sync)); if (!_session->config.get_external_sync()) { - sync_button.set_label (_("Internal")); + sync_button.set_text (_("Internal")); ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (true); ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (true); } else { - sync_button.set_label (sync_source_to_string (_session->config.get_sync_source(), true)); + sync_button.set_text (sync_source_to_string (_session->config.get_sync_source(), true)); /* XXX need to make auto-play is off as well as insensitive */ ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (false); ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (false); diff --git a/gtk2_ardour/canvas_vars.h b/gtk2_ardour/canvas_vars.h index 77eb02f9ce..b186c8bf4b 100644 --- a/gtk2_ardour/canvas_vars.h +++ b/gtk2_ardour/canvas_vars.h @@ -180,4 +180,8 @@ BUTTON_VARS(SendButton, "send alert button") BUTTON_VARS(TransportButton, "transport button") BUTTON_VARS(TransportRecenableButton, "transport recenable button") BUTTON_VARS(TransportOptionButton, "transport option button") +BUTTON_VARS(TransportActiveOptionButton, "transport active option button") +BUTTON_VARS(PluginBypassButton, "plugin bypass button") +BUTTON_VARS(PunchButton, "punch button") +BUTTON_VARS(MouseModeButton, "mouse mode button") diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 791357d517..05108eaf08 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -2759,6 +2759,7 @@ Editor::setup_toolbar () /* table containing mode buttons */ HBox* mouse_mode_button_box = manage (new HBox ()); + mouse_mode_button_box->set_spacing (2); if (Profile->get_sae()) { mouse_mode_button_box->pack_start (mouse_move_button); @@ -2808,32 +2809,6 @@ Editor::setup_toolbar () _mouse_mode_tearoff->Visible.connect (sigc::bind (sigc::mem_fun(*this, &Editor::reattach_tearoff), static_cast<Box*> (&toolbar_hbox), &_mouse_mode_tearoff->tearoff_window(), 1)); - mouse_move_button.set_mode (false); - mouse_select_button.set_mode (false); - mouse_gain_button.set_mode (false); - mouse_zoom_button.set_mode (false); - mouse_timefx_button.set_mode (false); - mouse_audition_button.set_mode (false); - join_object_range_button.set_mode (false); - - mouse_move_button.set_name ("MouseModeButton"); - mouse_select_button.set_name ("MouseModeButton"); - mouse_gain_button.set_name ("MouseModeButton"); - mouse_zoom_button.set_name ("MouseModeButton"); - mouse_timefx_button.set_name ("MouseModeButton"); - mouse_audition_button.set_name ("MouseModeButton"); - internal_edit_button.set_name ("MouseModeButton"); - join_object_range_button.set_name ("MouseModeButton"); - - mouse_move_button.unset_flags (CAN_FOCUS); - mouse_select_button.unset_flags (CAN_FOCUS); - mouse_gain_button.unset_flags (CAN_FOCUS); - mouse_zoom_button.unset_flags (CAN_FOCUS); - mouse_timefx_button.unset_flags (CAN_FOCUS); - mouse_audition_button.unset_flags (CAN_FOCUS); - internal_edit_button.unset_flags (CAN_FOCUS); - join_object_range_button.unset_flags (CAN_FOCUS); - /* Zoom */ _zoom_box.set_spacing (1); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 8114559fa8..f76a19ac0b 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -52,6 +52,7 @@ #include "ardour/types.h" #include "gtk-custom-ruler.h" +#include "ardour_button.h" #include "ardour_dialog.h" #include "public_editor.h" #include "editing.h" @@ -1532,20 +1533,20 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::Label toolbar_selection_cursor_label; Gtkmm2ext::TearOff* _mouse_mode_tearoff; - Gtkmm2ext::StatefulToggleButton mouse_select_button; - Gtkmm2ext::StatefulToggleButton mouse_move_button; - Gtkmm2ext::StatefulToggleButton mouse_gain_button; - Gtkmm2ext::StatefulToggleButton mouse_zoom_button; - Gtkmm2ext::StatefulToggleButton mouse_timefx_button; - Gtkmm2ext::StatefulToggleButton mouse_audition_button; - Gtkmm2ext::StatefulToggleButton join_object_range_button; + ArdourButton mouse_select_button; + ArdourButton mouse_move_button; + ArdourButton mouse_gain_button; + ArdourButton mouse_zoom_button; + ArdourButton mouse_timefx_button; + ArdourButton mouse_audition_button; + ArdourButton join_object_range_button; void mouse_mode_toggled (Editing::MouseMode m); void mouse_mode_object_range_toggled () {} bool ignore_mouse_mode_toggle; - Gtkmm2ext::StatefulToggleButton internal_edit_button; - void toggle_internal_editing (); + ArdourButton internal_edit_button; + void toggle_internal_editing (); bool mouse_select_button_release (GdkEventButton*); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 2687d05bef..321cb81b88 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -397,62 +397,46 @@ Editor::register_actions () RadioAction::Group mouse_mode_group; act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-object", _("Object Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseObject)); - act->connect_proxy (mouse_move_button); - mouse_move_button.set_image (*(manage (new Image (::get_icon("tool_object"))))); - mouse_move_button.set_label (""); - mouse_move_button.set_name ("MouseModeButton"); - mouse_move_button.get_image ()->show (); - - act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange)); - act->connect_proxy (mouse_select_button); - mouse_select_button.set_image (*(manage (new Image (::get_icon("tool_range"))))); - mouse_select_button.set_label (""); - mouse_select_button.set_name ("MouseModeButton"); - mouse_select_button.get_image ()->show (); - - act = ActionManager::register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Link Object / Range Tools"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled)); - act->connect_proxy (join_object_range_button); - join_object_range_button.set_image (*(manage (new Image (::get_icon ("tool_object_range"))))); - join_object_range_button.set_label (""); - join_object_range_button.set_name ("MouseModeButton"); - join_object_range_button.get_image ()->show (); - - act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-gain", _("Gain Tool"), sigc::bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseGain)); - act->connect_proxy (mouse_gain_button); - mouse_gain_button.set_image (*(manage (new Image (::get_icon("tool_gain"))))); - mouse_gain_button.set_label (""); - mouse_gain_button.set_name ("MouseModeButton"); - mouse_gain_button.get_image ()->show (); - - act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-zoom", _("Zoom Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseZoom)); - act->connect_proxy (mouse_zoom_button); - mouse_zoom_button.set_image (*(manage (new Image (::get_icon("tool_zoom"))))); - mouse_zoom_button.set_label (""); - mouse_zoom_button.set_name ("MouseModeButton"); - mouse_zoom_button.get_image ()->show (); - - act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-audition", _("Audition Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition)); - act->connect_proxy (mouse_audition_button); - mouse_audition_button.set_image (*(manage (new Image (::get_icon("tool_audition"))))); - mouse_audition_button.set_label (""); - mouse_audition_button.set_name ("MouseModeButton"); - mouse_audition_button.get_image ()->show (); - - act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX)); - act->connect_proxy (mouse_timefx_button); - mouse_timefx_button.set_image (*(manage (new Image (::get_icon("tool_stretch"))))); - mouse_timefx_button.set_label (""); - mouse_timefx_button.set_name ("MouseModeButton"); - mouse_timefx_button.get_image ()->show (); + mouse_move_button.set_related_action (act); + mouse_move_button.set_image (::get_icon("tool_object")); + mouse_move_button.set_name ("mouse mode button"); + + act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange)); + mouse_select_button.set_related_action (act); + mouse_select_button.set_image (::get_icon("tool_range")); + mouse_select_button.set_name ("mouse mode button"); + + act = ActionManager::register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Link Object / Range Tools"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled)); + join_object_range_button.set_related_action (act); + join_object_range_button.set_image (::get_icon ("tool_object_range")); + join_object_range_button.set_name ("mouse mode button"); + + act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-gain", _("Gain Tool"), sigc::bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseGain)); + mouse_gain_button.set_related_action (act); + mouse_gain_button.set_image (::get_icon("tool_gain")); + mouse_gain_button.set_name ("mouse mode button"); + + act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-zoom", _("Zoom Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseZoom)); + mouse_zoom_button.set_related_action (act); + mouse_zoom_button.set_image (::get_icon("tool_zoom")); + mouse_zoom_button.set_name ("mouse mode button"); + + act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-audition", _("Audition Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition)); + mouse_audition_button.set_related_action (act); + mouse_audition_button.set_image (::get_icon("tool_audition")); + mouse_audition_button.set_name ("mouse mode button"); + + act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX)); + mouse_timefx_button.set_related_action (act); + mouse_timefx_button.set_image (::get_icon("tool_stretch")); + mouse_timefx_button.set_name ("mouse mode button"); ActionManager::register_action (editor_actions, "step-mouse-mode", _("Step Mouse Mode"), sigc::bind (sigc::mem_fun(*this, &Editor::step_mouse_mode), true)); act = ActionManager::register_toggle_action (mouse_mode_actions, "toggle-internal-edit", _("Edit MIDI"), sigc::mem_fun(*this, &Editor::toggle_internal_editing)); - act->connect_proxy (internal_edit_button); - internal_edit_button.set_image (*(manage (new Image (::get_icon("tool_note"))))); - internal_edit_button.set_label (""); - internal_edit_button.set_name ("MouseModeButton"); - internal_edit_button.get_image ()->show (); + internal_edit_button.set_related_action (act); + internal_edit_button.set_image (::get_icon("tool_note")); + internal_edit_button.set_name ("mouse mode button"); RadioAction::Group edit_point_group; ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-playhead"), _("Playhead"), (sigc::bind (sigc::mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead))); diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 1ddf026af7..6419591716 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1655,17 +1655,21 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ break; case StartSelectionTrimItem: - case EndSelectionTrimItem: - #ifdef WITH_CMT case ImageFrameHandleStartItem: - case ImageFrameHandleEndItem: case MarkerViewHandleStartItem: +#endif + if (is_drawable()) { + set_canvas_cursor (_cursors->left_side_trim); + } + break; + case EndSelectionTrimItem: +#ifdef WITH_CMT + case ImageFrameHandleEndItem: case MarkerViewHandleEndItem: #endif - if (is_drawable()) { - set_canvas_cursor (_cursors->trimmer); + set_canvas_cursor (_cursors->right_side_trim); } break; @@ -2549,8 +2553,7 @@ Editor::set_internal_edit (bool yn) _internal_editing = yn; if (yn) { - mouse_select_button.set_image (*(manage (new Image (::get_icon("midi_tool_pencil"))))); - mouse_select_button.get_image ()->show (); + mouse_select_button.set_image (::get_icon("midi_tool_pencil")); ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Draw/Edit MIDI Notes")); mouse_mode_toggled (mouse_mode); @@ -2562,8 +2565,7 @@ Editor::set_internal_edit (bool yn) } else { - mouse_select_button.set_image (*(manage (new Image (::get_icon("tool_range"))))); - mouse_select_button.get_image ()->show (); + mouse_select_button.set_image (::get_icon("tool_range")); ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Select/Move Ranges")); mouse_mode_toggled (mouse_mode); // sets cursor diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index 6bdd8314b9..30be93c140 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -126,7 +126,11 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol pi->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&GenericPluginUI::processor_active_changed, this, boost::weak_ptr<Processor>(pi)), gui_context()); - bypass_button.set_active (!pi->active()); + if (!pi->active()) { + bypass_button.set_active_state (Gtkmm2ext::Active); + } else { + bypass_button.unset_active_state (); + } prefheight = 0; build (); @@ -793,16 +797,6 @@ GenericPluginUI::control_combo_changed (ControlUI* cui) } } -void -GenericPluginUI::processor_active_changed (boost::weak_ptr<Processor> weak_processor) -{ - ENSURE_GUI_THREAD (*this, &GenericPluginUI::processor_active_changed, weak_processor) - - boost::shared_ptr<Processor> processor = weak_processor.lock(); - - bypass_button.set_active (!processor || !processor->active()); -} - bool GenericPluginUI::start_updating (GdkEventAny*) { diff --git a/gtk2_ardour/lxvst_pluginui.cc b/gtk2_ardour/lxvst_pluginui.cc index ec8a27a25d..b2a847488f 100755 --- a/gtk2_ardour/lxvst_pluginui.cc +++ b/gtk2_ardour/lxvst_pluginui.cc @@ -61,7 +61,11 @@ LXVSTPluginUI::LXVSTPluginUI (boost::shared_ptr<PluginInsert> pi, boost::shared_ lxvst_preset_combo.signal_changed().connect (mem_fun (*this, &LXVSTPluginUI::preset_chosen)); - bypass_button.set_active (!insert->active()); + if (!insert->active()) { + bypass_button.set_active_state (Gtkmm2ext::Active); + } else { + bypass_button.unset_active_state (); + } pack_start (preset_box, false, false); pack_start (socket, true, true); diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index b6189d200e..741fcbe631 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -455,7 +455,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi) , add_button (_("Add")) , save_button (_("Save")) , delete_button (_("Delete")) - , bypass_button (_("Bypass")) + , bypass_button (ArdourButton::led_default_elements) , latency_gui (0) , latency_dialog (0) , plugin_analysis_expander (_("Plugin analysis")) @@ -464,6 +464,11 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi) _preset_combo.set_size_request (100, -1); _preset_modified.set_size_request (16, -1); _preset_combo.signal_changed().connect(sigc::mem_fun(*this, &PlugUIBase::preset_selected)); + ARDOUR_UI::instance()->set_tip (_preset_combo, _("Presets (if any) for this plugin\n(Both factory and user-created)")); + ARDOUR_UI::instance()->set_tip (add_button, _("Save a new preset")); + ARDOUR_UI::instance()->set_tip (save_button, _("Save the current preset")); + ARDOUR_UI::instance()->set_tip (delete_button, _("Delete the current preset")); + ARDOUR_UI::instance()->set_tip (bypass_button, _("Disable signal processing by the plugin")); _no_load_preset = 0; _preset_box.pack_start (_preset_combo); @@ -483,10 +488,16 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi) insert->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&PlugUIBase::processor_active_changed, this, boost::weak_ptr<Processor>(insert)), gui_context()); - bypass_button.set_active (!pi->active()); + bypass_button.set_name ("plugin bypass button"); + bypass_button.set_text (_("Bypass")); - bypass_button.set_name ("PluginBypassButton"); - bypass_button.signal_toggled().connect (sigc::mem_fun(*this, &PlugUIBase::bypass_toggled)); + if (!pi->active()) { + bypass_button.set_active_state (Gtkmm2ext::Active); + } else { + bypass_button.unset_active_state (); + } + + bypass_button.signal_button_release_event().connect (sigc::mem_fun(*this, &PlugUIBase::bypass_button_release)); focus_button.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK); focus_button.signal_button_release_event().connect (sigc::mem_fun(*this, &PlugUIBase::focus_toggled)); @@ -561,10 +572,15 @@ PlugUIBase::latency_button_clicked () void PlugUIBase::processor_active_changed (boost::weak_ptr<Processor> weak_p) { - ENSURE_GUI_THREAD (*this, &PlugUIBase::processor_active_changed, weak_p) - boost::shared_ptr<Processor> p (weak_p); + ENSURE_GUI_THREAD (*this, &PlugUIBase::processor_active_changed, weak_p); + boost::shared_ptr<Processor> p (weak_p.lock()); + if (p) { - bypass_button.set_active (!p->active()); + if (!p->active()) { + bypass_button.set_active_state (Gtkmm2ext::Active); + } else { + bypass_button.unset_active_state (); + } } } @@ -626,18 +642,20 @@ PlugUIBase::delete_plugin_setting () plugin->remove_preset (_preset_combo.get_active_text ()); } -void -PlugUIBase::bypass_toggled () +bool +PlugUIBase::bypass_button_release (GdkEventButton*) { - bool x; - - if ((x = bypass_button.get_active()) == insert->active()) { - if (x) { - insert->deactivate (); - } else { + bool view_says_bypassed = (bypass_button.active_state() != 0); + + if (view_says_bypassed != insert->active()) { + if (view_says_bypassed) { insert->activate (); + } else { + insert->deactivate (); } } + + return false; } bool diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h index 20282c4cfa..5ee275c240 100644 --- a/gtk2_ardour/plugin_ui.h +++ b/gtk2_ardour/plugin_ui.h @@ -48,6 +48,7 @@ #include "ardour/types.h" #include "automation_controller.h" +#include "ardour_button.h" namespace ARDOUR { class PluginInsert; @@ -110,7 +111,7 @@ class PlugUIBase : public virtual sigc::trackable, public PBD::ScopedConnectionL Gtk::Button add_button; Gtk::Button save_button; Gtk::Button delete_button; - Gtk::ToggleButton bypass_button; + ArdourButton bypass_button; Gtk::EventBox focus_button; Gtk::Label latency_label; @@ -133,7 +134,7 @@ class PlugUIBase : public virtual sigc::trackable, public PBD::ScopedConnectionL void save_plugin_setting (); void delete_plugin_setting (); bool focus_toggled(GdkEventButton*); - void bypass_toggled(); + bool bypass_button_release(GdkEventButton*); void toggle_plugin_analysis (); void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p); void plugin_going_away (); @@ -248,8 +249,6 @@ class GenericPluginUI : public PlugUIBase, public Gtk::VBox void control_port_toggled (ControlUI* cui); void control_combo_changed (ControlUI* cui); - void processor_active_changed (boost::weak_ptr<ARDOUR::Processor>); - void astate_clicked (ControlUI*, uint32_t parameter); void automation_state_changed (ControlUI*); void set_automation_state (ARDOUR::AutoState state, ControlUI* cui); diff --git a/gtk2_ardour/time_info_box.cc b/gtk2_ardour/time_info_box.cc index fa092ea913..a34314c3cd 100644 --- a/gtk2_ardour/time_info_box.cc +++ b/gtk2_ardour/time_info_box.cc @@ -45,8 +45,6 @@ TimeInfoBox::TimeInfoBox () , right (2, 4) , syncing_selection (false) , syncing_punch (false) - , punch_in_button (_("In")) - , punch_out_button (_("Out")) { selection_start = new AudioClock ("selection-start", false, "SelectionClockDisplay", false, false, false, false); selection_end = new AudioClock ("selection-end", false, "SelectionClockDisplay", false, false, false, false); @@ -116,20 +114,24 @@ TimeInfoBox::TimeInfoBox () left.attach (*l, 0, 1, 3, 4, FILL); left.attach (*selection_length, 1, 2, 3, 4); - punch_in_button.set_name ("TimeInfoPunchButton"); - punch_out_button.set_name ("TimeInfoPunchButton"); + punch_in_button.set_name ("punch button"); + punch_out_button.set_name ("punch button"); + punch_in_button.set_text (_("In")); + punch_out_button.set_text (_("Out")); - ActionManager::get_action ("Transport", "TogglePunchIn")->connect_proxy (punch_in_button); - ActionManager::get_action ("Transport", "TogglePunchOut")->connect_proxy (punch_out_button); + Glib::RefPtr<Action> act = ActionManager::get_action ("Transport", "TogglePunchIn"); + punch_in_button.set_related_action (act); + act = ActionManager::get_action ("Transport", "TogglePunchOut"); + punch_out_button.set_related_action (act); Gtkmm2ext::UI::instance()->set_tip (punch_in_button, _("Start recording at auto-punch start")); Gtkmm2ext::UI::instance()->set_tip (punch_out_button, _("Stop recording at auto-punch end")); punch_title.set_name ("TimeInfoSelectionTitle"); right.attach (punch_title, 2, 4, 0, 1); - right.attach (punch_in_button, 2, 3, 1, 2, FILL); + right.attach (punch_in_button, 2, 3, 1, 2, FILL, SHRINK); right.attach (*punch_start, 3, 4, 1, 2); - right.attach (punch_out_button, 2, 3, 2, 3, FILL); + right.attach (punch_out_button, 2, 3, 2, 3, FILL, SHRINK); right.attach (*punch_end, 3, 4, 2, 3); show_all (); @@ -360,7 +362,7 @@ TimeInfoBox::on_expose_event (GdkEventExpose* ev) #endif translate_coordinates (*window_parent, 0, 0, x, y); context->set_source_rgba (0.149, 0.149, 0.149, 1.0); - Gtkmm2ext::rounded_rectangle (context, x, y, get_allocation().get_width(), get_allocation().get_height(), 5); + Gtkmm2ext::rounded_rectangle (context, x, y, get_allocation().get_width(), get_allocation().get_height(), 9); context->fill (); } } diff --git a/gtk2_ardour/time_info_box.h b/gtk2_ardour/time_info_box.h index 7409d7631e..035cdb7e00 100644 --- a/gtk2_ardour/time_info_box.h +++ b/gtk2_ardour/time_info_box.h @@ -29,6 +29,8 @@ #include "ardour/ardour.h" #include "ardour/session_handle.h" +#include "ardour_button.h" + namespace ARDOUR { class Session; class Location; @@ -69,8 +71,8 @@ class TimeInfoBox : public Gtk::HBox, public ARDOUR::SessionHandlePtr PBD::ScopedConnectionList punch_connections; PBD::ScopedConnectionList editor_connections; - Gtkmm2ext::StatefulToggleButton punch_in_button; - Gtkmm2ext::StatefulToggleButton punch_out_button; + ArdourButton punch_in_button; + ArdourButton punch_out_button; void selection_changed (); |