summaryrefslogtreecommitdiff
path: root/gtk2_ardour/meter_strip.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/meter_strip.cc')
-rw-r--r--gtk2_ardour/meter_strip.cc45
1 files changed, 45 insertions, 0 deletions
diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc
index a2872063d4..1b4938694d 100644
--- a/gtk2_ardour/meter_strip.cc
+++ b/gtk2_ardour/meter_strip.cc
@@ -112,6 +112,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
level_meter->set_meter (_route->shared_peak_meter().get());
level_meter->clear_meters();
level_meter->setup_meters (220, meter_width, 6);
+ level_meter->ButtonPress.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::level_meter_button_press, this, _1));
meter_align.set(0.5, 0.5, 0.0, 1.0);
meter_align.add(*level_meter);
@@ -426,3 +427,47 @@ MeterStrip::parameter_changed (std::string const & p)
max_peak = -INFINITY;
}
}
+
+
+bool
+MeterStrip::level_meter_button_press (GdkEventButton* ev)
+{
+ if (ev->button == 3) {
+ popup_level_meter_menu (ev);
+ return true;
+ }
+
+ return false;
+}
+
+void
+MeterStrip::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, _("Peak"), MeterPeak);
+ add_level_meter_item (items, group, _("RMS"), MeterKrms);
+
+ m->popup (ev->button, ev->time);
+}
+
+void
+MeterStrip::add_level_meter_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterType type)
+{
+ using namespace Menu_Helpers;
+
+ items.push_back (RadioMenuElem (group, name, sigc::bind (sigc::mem_fun (*this, &MeterStrip::set_meter_point), type)));
+ RadioMenuItem* i = dynamic_cast<RadioMenuItem *> (&items.back ());
+ i->set_active (level_meter->get_type() == type);
+}
+
+void
+MeterStrip::set_meter_point (MeterType m)
+{
+ level_meter->set_type (m);
+}