From f4557194abe97764e0d7445468471a195bc0b535 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 5 Jul 2013 03:05:19 +0200 Subject: meterbridge shift|ctrl reset [group] peaks --- gtk2_ardour/meter_strip.cc | 14 +++++++++++++- gtk2_ardour/meter_strip.h | 13 ++++++++----- gtk2_ardour/meterbridge.cc | 18 ++++++++++++++++++ gtk2_ardour/meterbridge.h | 3 +++ 4 files changed, 42 insertions(+), 6 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index b909369c03..3d3e8edeb6 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -30,6 +30,7 @@ #include "ardour/midi_track.h" #include +#include #include #include @@ -52,6 +53,9 @@ using namespace Gtkmm2ext; using namespace std; PBD::Signal1 MeterStrip::CatchDeletion; +PBD::Signal0 MeterStrip::ResetAllPeakDisplays; +PBD::Signal1 MeterStrip::ResetGroupPeakDisplays; + MeterStrip::MetricPatterns MeterStrip::metric_patterns; MeterStrip::TickPatterns MeterStrip::ticks_patterns; @@ -814,6 +818,14 @@ MeterStrip::reset_peak_display () bool MeterStrip::peak_button_release (GdkEventButton* ev) { - reset_peak_display (); + if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) { + ResetAllPeakDisplays (); + } else if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { + if (_route) { + ResetGroupPeakDisplays (_route->route_group()); + } + } else { + reset_peak_display (); + } return true; } diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h index aee1168e47..cfd95a4c3b 100644 --- a/gtk2_ardour/meter_strip.h +++ b/gtk2_ardour/meter_strip.h @@ -35,6 +35,7 @@ namespace ARDOUR { class Route; + class RouteGroup; class Session; } namespace Gtk { @@ -53,6 +54,11 @@ class MeterStrip : public Gtk::VBox, public RouteUI boost::shared_ptr route() { return _route; } static PBD::Signal1 CatchDeletion; + static PBD::Signal0 ResetAllPeakDisplays; + static PBD::Signal1 ResetGroupPeakDisplays; + + void reset_peak_display (); + void reset_group_peak_display (ARDOUR::RouteGroup*); protected: boost::shared_ptr _route; @@ -78,8 +84,6 @@ class MeterStrip : public Gtk::VBox, public RouteUI void on_size_allocate (Gtk::Allocation&); void on_size_request (Gtk::Requisition*); - bool peak_button_release (GdkEventButton*); - /* route UI */ void update_rec_display (); std::string state_id() const; @@ -105,14 +109,13 @@ class MeterStrip : public Gtk::VBox, public RouteUI LevelMeter *level_meter; void meter_changed (); - void reset_peak_display (); - void reset_group_peak_display (ARDOUR::RouteGroup*); - PBD::ScopedConnection _config_connection; void strip_property_changed (const PBD::PropertyChange&); void meter_configuration_changed (ARDOUR::ChanCount); static int max_pattern_metric_size; // == FastMeter::max_pattern_metric_size + + bool peak_button_release (GdkEventButton*); }; #endif /* __ardour_mixer_strip__ */ diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc index 6ab84d9874..00ba3d43ec 100644 --- a/gtk2_ardour/meterbridge.cc +++ b/gtk2_ardour/meterbridge.cc @@ -145,6 +145,8 @@ Meterbridge::Meterbridge () signal_configure_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler)); Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Meterbridge::sync_order_keys, this, _1), gui_context()); MeterStrip::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&Meterbridge::remove_strip, this, _1), gui_context()); + MeterStrip::ResetAllPeakDisplays.connect_same_thread (*this, boost::bind(&Meterbridge::reset_all_peaks, this)); + MeterStrip::ResetGroupPeakDisplays.connect_same_thread (*this, boost::bind (&Meterbridge::reset_group_peaks, this, _1)); global_hpacker.set_spacing(0); scroller.add (global_hpacker); @@ -439,6 +441,22 @@ Meterbridge::remove_strip (MeterStrip* strip) } } +void +Meterbridge::reset_all_peaks () +{ + for (list::iterator i = strips.begin(); i != strips.end(); ++i) { + (*i)->reset_peak_display (); + } +} + +void +Meterbridge::reset_group_peaks (RouteGroup* rg) +{ + for (list::iterator i = strips.begin(); i != strips.end(); ++i) { + (*i)->reset_group_peak_display (rg); + } +} + void Meterbridge::sync_order_keys (RouteSortOrderKey src) { diff --git a/gtk2_ardour/meterbridge.h b/gtk2_ardour/meterbridge.h index 43fdef3c42..8402676e0e 100644 --- a/gtk2_ardour/meterbridge.h +++ b/gtk2_ardour/meterbridge.h @@ -74,6 +74,9 @@ class Meterbridge : void add_strips (ARDOUR::RouteList&); void remove_strip (MeterStrip *); + void reset_all_peaks (); + void reset_group_peaks (ARDOUR::RouteGroup*); + void session_going_away (); void sync_order_keys (ARDOUR::RouteSortOrderKey src); -- cgit v1.2.3