diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index f666262f16..15f1bde1b6 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -511,6 +511,7 @@ + diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 0ed5d145b4..dd025b6f8b 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -71,6 +71,7 @@ #include "ardour_dialog.h" #include "ardour_window.h" #include "editing.h" +#include "meterbridge.h" #include "nsm.h" #include "ui_config.h" #include "enums.h" @@ -306,6 +307,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void goto_editor_window (); void goto_mixer_window (); void toggle_mixer_window (); + void toggle_meterbridge (); void toggle_editor_mixer (); int setup_windows (); @@ -570,6 +572,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr PublicEditor *editor; int create_editor (); + Meterbridge *meterbridge; + int create_meterbridge (); /* Dialogs that can be created via new */ WM::Proxy speaker_config_window; diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 76396e845d..5a64e53140 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -78,6 +78,11 @@ ARDOUR_UI::setup_windows () return -1; } + if (create_meterbridge ()) { + error << _("UI: cannot setup meterbridge") << endmsg; + return -1; + } + /* all other dialogs are created conditionally */ we_have_dependents (); diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index e8d94bbe04..4ed563e201 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -314,6 +314,23 @@ ARDOUR_UI::toggle_mixer_window () } } +void +ARDOUR_UI::toggle_meterbridge () +{ + Glib::RefPtr act = ActionManager::get_action (X_("Common"), X_("toggle-meterbridge")); + if (!act) { + return; + } + + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + + if (tact->get_active()) { + meterbridge->show_window (); + } else { + meterbridge->hide (); + } +} + void ARDOUR_UI::toggle_editor_mixer () { diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index b6ba025d99..c5a9ee0775 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -229,6 +229,7 @@ ARDOUR_UI::install_actions () ActionManager::register_toggle_action (common_actions, X_("toggle-mixer"), S_("Window|Mixer"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_window)); ActionManager::register_action (common_actions, X_("toggle-editor-mixer"), _("Toggle Editor+Mixer"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_editor_mixer)); + ActionManager::register_toggle_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meter"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge)); act = ActionManager::register_action (common_actions, X_("NewMIDITracer"), _("MIDI Tracer"), sigc::mem_fun(*this, &ARDOUR_UI::new_midi_tracer_window)); ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/ardour_ui_mixer.cc b/gtk2_ardour/ardour_ui_mixer.cc index 2604e8215b..a2669f968d 100644 --- a/gtk2_ardour/ardour_ui_mixer.cc +++ b/gtk2_ardour/ardour_ui_mixer.cc @@ -26,6 +26,7 @@ #include "actions.h" #include "ardour_ui.h" #include "mixer_ui.h" +#include "meterbridge.h" #include "i18n.h" @@ -50,3 +51,22 @@ ARDOUR_UI::create_mixer () return 0; } + +int +ARDOUR_UI::create_meterbridge () + +{ + try { + meterbridge = Meterbridge::instance (); + } + + catch (failed_constructor& err) { + return -1; + } + + meterbridge->signal_window_state_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), false)); + meterbridge->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("/Common/toggle-meterbridge"))); + + return 0; +} + diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index 5a8ecc771c..325f0eac62 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -145,6 +145,7 @@ gtk2_ardour_sources = [ 'mixer_group_tabs.cc', 'mixer_strip.cc', 'mixer_ui.cc', + 'meterbridge.cc', 'monitor_section.cc', 'mono_panner.cc', 'mono_panner_editor.cc',