From cb4f49e3b4373360a69cdcc790047df2ecf5f272 Mon Sep 17 00:00:00 2001 From: GZharun Date: Wed, 17 Dec 2014 13:26:25 +0200 Subject: [PATCH] [Summary] Added use cases for master bus selection --- gtk2_ardour/master_bus_ui.cc | 61 +++++++++++++++++++++++++++--------- gtk2_ardour/master_bus_ui.h | 2 +- 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/gtk2_ardour/master_bus_ui.cc b/gtk2_ardour/master_bus_ui.cc index 641a5417b4..82f206529f 100644 --- a/gtk2_ardour/master_bus_ui.cc +++ b/gtk2_ardour/master_bus_ui.cc @@ -132,7 +132,7 @@ MasterBusUI::MasterBusUI (Session* sess, PublicEditor& ed) _master_mute_button.signal_clicked.connect (sigc::mem_fun (*this, &MasterBusUI::on_master_mute_button)); _clear_solo_button.signal_clicked.connect (sigc::mem_fun (*this, &MasterBusUI::on_clear_solo_button)); _global_rec_button.signal_clicked.connect (sigc::mem_fun (*this, &MasterBusUI::on_global_rec_button)); - _master_event_box.signal_button_press_event().connect (sigc::mem_fun (*this, &MasterBusUI::on_master_event_box_button_release)); + _master_event_box.signal_button_press_event().connect (sigc::mem_fun (*this, &MasterBusUI::on_master_event_box_button_press)); _editor.get_selection().TracksChanged.connect (sigc::mem_fun(*this, &MasterBusUI::update_master_bus_selection)); @@ -247,31 +247,64 @@ MasterBusUI::update_master_bus_selection () } bool -MasterBusUI::on_master_event_box_button_release (GdkEventButton *ev) +MasterBusUI::on_master_event_box_button_press (GdkEventButton *ev) { if (ev->button == 1) { + if (Keyboard::modifier_state_equals (ev->state, (Keyboard::TertiaryModifier|Keyboard::PrimaryModifier))) { + + TimeAxisView* tv = _editor.axis_view_from_route (_route ); + if (tv) { + /* special case: select/deselect all tracks along with master bus*/ + if (_editor.get_selection().selected (tv)) { + _editor.get_selection().clear_tracks (); + } else { + _editor.select_all_tracks (); + } + } + return true; + } + switch (ArdourKeyboard::selection_type (ev->state)) { case Selection::Toggle: - if (_selected) { - TimeAxisView* tv = _editor.axis_view_from_route (_route ); - if (tv) { - _editor.set_selected_track(*tv, Selection::Toggle); - } - _selected = false; - break; - } /*else - just fall down*/ + { + TimeAxisView* tv = _editor.axis_view_from_route (_route ); + if (tv) { + _editor.get_selection().toggle (tv); + } + _selected = false; + } + break; case Selection::Set: - if (!_selected) { + { + TimeAxisView* tv = _editor.axis_view_from_route (_route ); + if (tv) { + _editor.set_selected_track(*tv); + } + _selected = true; + } + break; + + case Selection::Extend: + { + TimeAxisView* tv = _editor.axis_view_from_route (_route ); + if (tv) { + _editor.extend_selection_to_track (*tv); + } + _selected = true; + } + break; + + case Selection::Add: + { TimeAxisView* tv = _editor.axis_view_from_route (_route ); if (tv) { - _editor.set_selected_track(*tv); + _editor.get_selection().add (tv); } _selected = true; - break; - } + break; } } diff --git a/gtk2_ardour/master_bus_ui.h b/gtk2_ardour/master_bus_ui.h index 3e7c742e99..3e6b034db3 100644 --- a/gtk2_ardour/master_bus_ui.h +++ b/gtk2_ardour/master_bus_ui.h @@ -73,7 +73,7 @@ private: void on_global_rec_button (WavesButton*); void on_output_connection_mode_changed (); bool on_level_meter_button_press (GdkEventButton*); - bool on_master_event_box_button_release (GdkEventButton*); + bool on_master_event_box_button_press (GdkEventButton*); PBD::ScopedConnection _route_meter_connection;