summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-07 06:17:02 +0200
committerRobin Gareus <robin@gareus.org>2013-07-10 15:27:13 +0200
commit3a8f5a9770c61a8546bec905301be3ea0b038c86 (patch)
treee811d4dc8dace482a1ecba5e249b27c06fdd9cff
parent4368759d41ffddf1c57baeb3c2bc929ab600b79b (diff)
remember meter type with session
-rw-r--r--gtk2_ardour/gain_meter.cc12
-rw-r--r--gtk2_ardour/gain_meter.h2
-rw-r--r--gtk2_ardour/meter_strip.cc4
-rw-r--r--gtk2_ardour/mixer_strip.cc39
-rw-r--r--gtk2_ardour/mixer_strip.h4
-rw-r--r--libs/ardour/ardour/route.h7
-rw-r--r--libs/ardour/meter.cc2
-rw-r--r--libs/ardour/route.cc13
8 files changed, 74 insertions, 9 deletions
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index dcc89e1d29..ca25f20471 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -302,11 +302,23 @@ GainMeterBase::setup_meters (int len)
}
void
+GainMeterBase::set_type (MeterType t)
+{
+ level_meter->set_type(t);
+}
+
+void
GainMeter::setup_meters (int len)
{
GainMeterBase::setup_meters (len);
}
+void
+GainMeter::set_type (MeterType t)
+{
+ GainMeterBase::set_type (t);
+}
+
bool
GainMeterBase::gain_key_press (GdkEventKey* ev)
{
diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h
index c48d250947..98d1288b0c 100644
--- a/gtk2_ardour/gain_meter.h
+++ b/gtk2_ardour/gain_meter.h
@@ -85,6 +85,7 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr
void set_flat_buttons ();
virtual void setup_meters (int len=0);
+ virtual void set_type (ARDOUR::MeterType);
boost::shared_ptr<PBD::Controllable> get_controllable();
@@ -208,6 +209,7 @@ class GainMeter : public GainMeterBase, public Gtk::VBox
int get_gm_width ();
void setup_meters (int len=0);
+ void set_type (ARDOUR::MeterType);
protected:
void hide_all_meters ();
diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc
index 1b4938694d..691bf34d3f 100644
--- a/gtk2_ardour/meter_strip.cc
+++ b/gtk2_ardour/meter_strip.cc
@@ -113,6 +113,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
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));
+ level_meter->set_type (_route->meter_type_meterbridge());
meter_align.set(0.5, 0.5, 0.0, 1.0);
meter_align.add(*level_meter);
@@ -463,11 +464,12 @@ MeterStrip::add_level_meter_item (Menu_Helpers::MenuList& items, RadioMenuItem::
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);
+ i->set_active (_route->meter_type_meterbridge() == type);
}
void
MeterStrip::set_meter_point (MeterType m)
{
level_meter->set_type (m);
+ _route->set_meter_type_meterbridge(m);
}
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 2ee3faf4e7..8baa1df8d5 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -410,6 +410,8 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
if (gpm.gain_display.get_parent()) {
gpm.gain_display.get_parent()->remove (gpm.gain_display);
}
+
+ gpm.set_type (rt->meter_type_mixer());
middle_button_table.attach (gpm.gain_display,0,1,1,2);
middle_button_table.attach (gpm.peak_display,1,2,1,2);
@@ -2123,17 +2125,24 @@ MixerStrip::popup_level_meter_menu (GdkEventButton* ev)
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);
+ add_level_meter_item_point (items, group, _("Input"), MeterInput);
+ add_level_meter_item_point (items, group, _("Pre-fader"), MeterPreFader);
+ add_level_meter_item_point (items, group, _("Post-fader"), MeterPostFader);
+ add_level_meter_item_point (items, group, _("Output"), MeterOutput);
+ add_level_meter_item_point (items, group, _("Custom"), MeterCustom);
+
+ RadioMenuItem::Group tgroup;
+ items.push_back (SeparatorElem());
+
+ add_level_meter_item_type (items, tgroup, _("Peak"), MeterPeak);
+ add_level_meter_item_type (items, tgroup, _("RMS"), MeterKrms);
m->popup (ev->button, ev->time);
}
void
-MixerStrip::add_level_meter_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterPoint point)
+MixerStrip::add_level_meter_item_point (Menu_Helpers::MenuList& items,
+ RadioMenuItem::Group& group, string const & name, MeterPoint point)
{
using namespace Menu_Helpers;
@@ -2147,3 +2156,21 @@ MixerStrip::set_meter_point (MeterPoint p)
{
_route->set_meter_point (p);
}
+
+void
+MixerStrip::add_level_meter_item_type (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, &MixerStrip::set_meter_type), type)));
+ RadioMenuItem* i = dynamic_cast<RadioMenuItem *> (&items.back ());
+ i->set_active (_route->meter_type_mixer() == type);
+}
+
+void
+MixerStrip::set_meter_type (MeterType t)
+{
+ _route->set_meter_type_mixer (t);
+ gpm.set_type (t);
+}
diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h
index 4a2865c339..135ee6d77c 100644
--- a/gtk2_ardour/mixer_strip.h
+++ b/gtk2_ardour/mixer_strip.h
@@ -310,8 +310,10 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
bool level_meter_button_press (GdkEventButton *);
void popup_level_meter_menu (GdkEventButton *);
- void add_level_meter_item (Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, ARDOUR::MeterPoint);
+ void add_level_meter_item_point (Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, ARDOUR::MeterPoint);
+ void add_level_meter_item_type (Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, ARDOUR::MeterType);
void set_meter_point (ARDOUR::MeterPoint);
+ void set_meter_type (ARDOUR::MeterType);
PBD::ScopedConnection _level_meter_connection;
std::string meter_point_string (ARDOUR::MeterPoint);
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index 0bd3b07ea4..783011a158 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -181,6 +181,11 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember,
MeterPoint meter_point() const { return _meter_point; }
void meter ();
+ void set_meter_type_mixer (MeterType t) { _meter_type_mixer = t; }
+ void set_meter_type_meterbridge (MeterType t) { _meter_type_meterbridge = t; }
+ MeterType meter_type_mixer() const { return _meter_type_mixer; }
+ MeterType meter_type_meterbridge() const { return _meter_type_meterbridge; }
+
/* Processors */
boost::shared_ptr<Amp> amp() const { return _amp; }
@@ -486,6 +491,8 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember,
Flag _flags;
int _pending_declick;
MeterPoint _meter_point;
+ MeterType _meter_type_mixer;
+ MeterType _meter_type_meterbridge;
boost::dynamic_bitset<> _phase_invert;
bool _self_solo;
uint32_t _soloed_by_others_upstream;
diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc
index ccb3ff32d0..0773ab451a 100644
--- a/libs/ardour/meter.cc
+++ b/libs/ardour/meter.cc
@@ -95,7 +95,7 @@ PeakMeter::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fr
// Meter audio in to the rest of the peaks
for (uint32_t i = 0; i < n_audio; ++i, ++n) {
_peak_signal[n] = compute_peak (bufs.get_audio(i).data(), nframes, _peak_signal[n]);
- if (_meter_type & MeterKrms) {
+ if (1 /* TODO use separate bit-flags for mixer|meterbridge */ || _meter_type & MeterKrms) {
_kmeter[i]->process(bufs.get_audio(i).data(), nframes);
}
}
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index b9c6f1b4cd..d3e0fbce22 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -83,6 +83,8 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
, _flags (flg)
, _pending_declick (true)
, _meter_point (MeterPostFader)
+ , _meter_type_mixer (MeterPeak)
+ , _meter_type_meterbridge (MeterPeak)
, _self_solo (false)
, _soloed_by_others_upstream (0)
, _soloed_by_others_downstream (0)
@@ -1878,6 +1880,9 @@ Route::state(bool full_state)
node->add_property("denormal-protection", _denormal_protection?"yes":"no");
node->add_property("meter-point", enum_2_string (_meter_point));
+ node->add_property("meter-type-mixer", enum_2_string (_meter_type_mixer));
+ node->add_property("meter-type-meterbridge", enum_2_string (_meter_type_meterbridge));
+
if (_route_group) {
node->add_property("route-group", _route_group->name());
}
@@ -2052,6 +2057,14 @@ Route::set_state (const XMLNode& node, int version)
}
}
+ if ((prop = node.property (X_("meter-type-mixer"))) != 0) {
+ _meter_type_mixer = MeterType (string_2_enum (prop->value (), _meter_type_mixer));
+ }
+
+ if ((prop = node.property (X_("meter-type-meterbridge"))) != 0) {
+ _meter_type_meterbridge = MeterType (string_2_enum (prop->value (), _meter_type_meterbridge));
+ }
+
set_processor_state (processor_state);
// this looks up the internal instrument in processors