From d1413f60a67ec8d6723a6c0e3e06a3b3a13b95d9 Mon Sep 17 00:00:00 2001 From: GZharun Date: Tue, 5 Aug 2014 16:18:08 +0300 Subject: [PATCH] [Summary] Implemented use case to show and select master bus on MasterLevelMeter click --- gtk2_ardour/editor.h | 2 ++ gtk2_ardour/editor_mixer.cc | 17 +++++++++++++++++ gtk2_ardour/master_bus_ui.cc | 10 ++++++++++ gtk2_ardour/master_bus_ui.h | 5 ++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 85a32eda43..11bf0be2a9 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -687,6 +687,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void add_routes (ARDOUR::RouteList&); void timeaxisview_deleted (TimeAxisView *); + void master_meter_clicked (); + Gtk::Container& inspector_home; Gtk::Container& _master_bus_ui_home; MasterBusUI* _master_bus_ui; diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc index 212c47d6f2..5284639b3d 100644 --- a/gtk2_ardour/editor_mixer.cc +++ b/gtk2_ardour/editor_mixer.cc @@ -198,6 +198,23 @@ Editor::create_editor_mixer () } else { _master_bus_ui->init(_session); } + + _master_bus_ui->MasterMeterClicked.connect(*this, invalidator (*this), boost::bind (&Editor::master_meter_clicked, this), gui_context() ); +} + +void +Editor::master_meter_clicked () +{ + if (!_session) { + return; + } + + TimeAxisView* tv = axis_view_from_route (_session->master_out() ); + if (tv) { + TrackViewList selected; + selected.push_back(tv); + get_selection().set(selected); + } } void diff --git a/gtk2_ardour/master_bus_ui.cc b/gtk2_ardour/master_bus_ui.cc index 4a299ec971..78d89df94f 100644 --- a/gtk2_ardour/master_bus_ui.cc +++ b/gtk2_ardour/master_bus_ui.cc @@ -147,6 +147,7 @@ void MasterBusUI::init(ARDOUR::Session *session) ARDOUR_UI::Blink.connect (sigc::mem_fun (*this, &MasterBusUI::solo_blink)); _level_meter.set_session(session); + _level_meter.ButtonRelease.connect_same_thread (_session_connections, boost::bind (&MasterBusUI::on_level_meter_button_release, this, _1) ); } void MasterBusUI::on_output_connection_mode_changed() @@ -189,6 +190,15 @@ void MasterBusUI::on_output_connection_mode_changed() route_mute_state_changed(NULL); } +bool +MasterBusUI::on_level_meter_button_release (GdkEventButton *ev) +{ + // EMIT SIGNAL + MasterMeterClicked (); + + return true; +} + MasterBusUI::~MasterBusUI () { CatchDeletion (this); diff --git a/gtk2_ardour/master_bus_ui.h b/gtk2_ardour/master_bus_ui.h index 79c151abab..17e95797da 100644 --- a/gtk2_ardour/master_bus_ui.h +++ b/gtk2_ardour/master_bus_ui.h @@ -53,6 +53,8 @@ public: void fast_update (); void set_route (boost::shared_ptr); static PBD::Signal1 CatchDeletion; + + PBD::Signal0 MasterMeterClicked; private: static int __meter_width; @@ -68,7 +70,8 @@ private: void on_master_mute_button (WavesButton*); void on_clear_solo_button (WavesButton*); void on_global_rec_button (WavesButton*); - void on_output_connection_mode_changed(); + void on_output_connection_mode_changed (); + bool on_level_meter_button_release (GdkEventButton*); // MASTER staff void connect_route_state_signals(ARDOUR::RouteList& tracks);