summaryrefslogtreecommitdiff
path: root/gtk2_ardour/mixer_strip.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-11-13 15:12:34 +0000
committerCarl Hetherington <carl@carlh.net>2011-11-13 15:12:34 +0000
commitef4ac379a330a6a26e4b2da575a2c0010bc41783 (patch)
treee8f9e6fc692290a2cc2faaab4e5613dae6f5f894 /gtk2_ardour/mixer_strip.cc
parent05ae84cbed64e6bb0c77e8fcdb933d826f0ac277 (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.cc47
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);
+}