diff options
author | Robin Gareus <robin@gareus.org> | 2013-07-07 06:17:02 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2013-07-10 15:27:13 +0200 |
commit | 3a8f5a9770c61a8546bec905301be3ea0b038c86 (patch) | |
tree | e811d4dc8dace482a1ecba5e249b27c06fdd9cff | |
parent | 4368759d41ffddf1c57baeb3c2bc929ab600b79b (diff) |
remember meter type with session
-rw-r--r-- | gtk2_ardour/gain_meter.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/gain_meter.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/meter_strip.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 39 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.h | 4 | ||||
-rw-r--r-- | libs/ardour/ardour/route.h | 7 | ||||
-rw-r--r-- | libs/ardour/meter.cc | 2 | ||||
-rw-r--r-- | libs/ardour/route.cc | 13 |
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 |