diff options
author | Carl Hetherington <carl@carlh.net> | 2011-11-13 15:12:34 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-11-13 15:12:34 +0000 |
commit | ef4ac379a330a6a26e4b2da575a2c0010bc41783 (patch) | |
tree | e8f9e6fc692290a2cc2faaab4e5613dae6f5f894 /gtk2_ardour/mixer_strip.cc | |
parent | 05ae84cbed64e6bb0c77e8fcdb933d826f0ac277 (diff) |
Popup menu over meters in mixer strips to select metering
point (rest of #4419).
git-svn-id: svn://localhost/ardour2/branches/3.0@10569 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/mixer_strip.cc')
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 02e483fea4..bf82130b95 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -364,6 +364,8 @@ MixerStrip::init () parameter_changed (X_("mixer-strip-visibility")); Config->ParameterChanged.connect (_config_connection, MISSING_INVALIDATOR, ui_bind (&MixerStrip::parameter_changed, this, _1), gui_context()); + + gpm.LevelMeterButtonPress.connect_same_thread (_level_meter_connection, boost::bind (&MixerStrip::level_meter_button_press, this, _1)); } MixerStrip::~MixerStrip () @@ -2010,3 +2012,48 @@ MixerStrip::ab_plugins () processor_box.processor_operation (ProcessorBox::ProcessorsAB); } +bool +MixerStrip::level_meter_button_press (GdkEventButton* ev) +{ + if (ev->button == 3) { + popup_level_meter_menu (ev); + return true; + } + + return false; +} + +void +MixerStrip::popup_level_meter_menu (GdkEventButton* ev) +{ + using namespace Gtk::Menu_Helpers; + + Gtk::Menu* m = manage (new Menu); + MenuList& items = m->items (); + + RadioMenuItem::Group group; + + add_level_meter_item (items, group, _("Input"), MeterInput); + add_level_meter_item (items, group, _("Pre-fader"), MeterPreFader); + add_level_meter_item (items, group, _("Post-fader"), MeterPostFader); + add_level_meter_item (items, group, _("Output"), MeterOutput); + add_level_meter_item (items, group, _("Custom"), MeterCustom); + + m->popup (ev->button, ev->time); +} + +void +MixerStrip::add_level_meter_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterPoint point) +{ + using namespace Menu_Helpers; + + items.push_back (RadioMenuElem (group, name, sigc::bind (sigc::mem_fun (*this, &MixerStrip::set_meter_point), point))); + RadioMenuItem* i = dynamic_cast<RadioMenuItem *> (&items.back ()); + i->set_active (_route->meter_point() == point); +} + +void +MixerStrip::set_meter_point (MeterPoint p) +{ + _route->set_meter_point (p); +} |