summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-05 03:05:19 +0200
committerRobin Gareus <robin@gareus.org>2013-07-10 15:27:08 +0200
commitf4557194abe97764e0d7445468471a195bc0b535 (patch)
treec1d8fc45cb42040b76e0541a464dceb262993687 /gtk2_ardour
parent94fbfb9658df9feeccd7681e58c60feebc89da03 (diff)
meterbridge shift|ctrl reset [group] peaks
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/meter_strip.cc14
-rw-r--r--gtk2_ardour/meter_strip.h13
-rw-r--r--gtk2_ardour/meterbridge.cc18
-rw-r--r--gtk2_ardour/meterbridge.h3
4 files changed, 42 insertions, 6 deletions
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 <gtkmm2ext/gtk_ui.h>
+#include <gtkmm2ext/keyboard.h>
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/rgb_macros.h>
@@ -52,6 +53,9 @@ using namespace Gtkmm2ext;
using namespace std;
PBD::Signal1<void,MeterStrip*> MeterStrip::CatchDeletion;
+PBD::Signal0<void> MeterStrip::ResetAllPeakDisplays;
+PBD::Signal1<void,RouteGroup*> 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<ARDOUR::Route> route() { return _route; }
static PBD::Signal1<void,MeterStrip*> CatchDeletion;
+ static PBD::Signal0<void> ResetAllPeakDisplays;
+ static PBD::Signal1<void,ARDOUR::RouteGroup*> ResetGroupPeakDisplays;
+
+ void reset_peak_display ();
+ void reset_group_peak_display (ARDOUR::RouteGroup*);
protected:
boost::shared_ptr<ARDOUR::Route> _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);
@@ -440,6 +442,22 @@ Meterbridge::remove_strip (MeterStrip* strip)
}
void
+Meterbridge::reset_all_peaks ()
+{
+ for (list<MeterStrip *>::iterator i = strips.begin(); i != strips.end(); ++i) {
+ (*i)->reset_peak_display ();
+ }
+}
+
+void
+Meterbridge::reset_group_peaks (RouteGroup* rg)
+{
+ for (list<MeterStrip *>::iterator i = strips.begin(); i != strips.end(); ++i) {
+ (*i)->reset_group_peak_display (rg);
+ }
+}
+
+void
Meterbridge::sync_order_keys (RouteSortOrderKey src)
{
MeterOrderRouteSorter sorter;
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);