Consolidate meter-type state and API
In theory different UIs can show different meter-types, so it can make sense to maintain the type in different places. MeterType is a bit-set and PeakMeter implementation provides for this. However, this is not being used, and the current implementation was rather fragmented, cross-connected signals to keep types in sync, allowed inconsistent meter-types in GUI and backend. MeterType is now kept by meter itself, however it is still saved/restored as part of the Route state. N.B. This change breaks the API, various methods have been renamed for consistency.
This commit is contained in:
parent
1cec6d1250
commit
cd5b0819bf
|
@ -74,11 +74,11 @@ public:
|
|||
|
||||
float meter_level (uint32_t n, MeterType type);
|
||||
|
||||
void set_type(MeterType t);
|
||||
MeterType get_type() { return _meter_type; }
|
||||
void set_meter_type (MeterType t);
|
||||
MeterType meter_type () const { return _meter_type; }
|
||||
|
||||
|
||||
PBD::Signal1<void, MeterType> TypeChanged;
|
||||
PBD::Signal1<void, MeterType> MeterTypeChanged;
|
||||
|
||||
protected:
|
||||
XMLNode& state ();
|
||||
|
|
|
@ -193,8 +193,8 @@ public:
|
|||
void emit_pending_signals ();
|
||||
MeterPoint meter_point() const { return _pending_meter_point; }
|
||||
|
||||
void set_meter_type (MeterType t) { _meter_type = t; }
|
||||
MeterType meter_type() const { return _meter_type; }
|
||||
void set_meter_type (MeterType t);
|
||||
MeterType meter_type () const;
|
||||
|
||||
void set_disk_io_point (DiskIOPoint);
|
||||
DiskIOPoint disk_io_point() const { return _disk_io_point; }
|
||||
|
@ -659,7 +659,6 @@ protected:
|
|||
|
||||
MeterPoint _meter_point;
|
||||
MeterPoint _pending_meter_point;
|
||||
MeterType _meter_type;
|
||||
|
||||
bool _denormal_protection;
|
||||
|
||||
|
|
|
@ -1554,7 +1554,8 @@ LuaBindings::common (lua_State* L)
|
|||
|
||||
.deriveWSPtrClass <PeakMeter, Processor> ("PeakMeter")
|
||||
.addFunction ("meter_level", &PeakMeter::meter_level)
|
||||
.addFunction ("set_type", &PeakMeter::set_type)
|
||||
.addFunction ("set_meter_type", &PeakMeter::set_meter_type)
|
||||
.addFunction ("meter_type", &PeakMeter::meter_type)
|
||||
.addFunction ("reset_max", &PeakMeter::reset_max)
|
||||
.endClass ()
|
||||
|
||||
|
|
|
@ -403,7 +403,7 @@ PeakMeter::meter_level(uint32_t n, MeterType type) {
|
|||
}
|
||||
|
||||
void
|
||||
PeakMeter::set_type(MeterType t)
|
||||
PeakMeter::set_meter_type (MeterType t)
|
||||
{
|
||||
if (t == _meter_type) {
|
||||
return;
|
||||
|
@ -436,7 +436,7 @@ PeakMeter::set_type(MeterType t)
|
|||
}
|
||||
}
|
||||
|
||||
TypeChanged(t);
|
||||
MeterTypeChanged (t); /* EMIT SIGNAL */
|
||||
}
|
||||
|
||||
XMLNode&
|
||||
|
|
|
@ -103,7 +103,6 @@ Route::Route (Session& sess, string name, PresentationInfo::Flag flag, DataType
|
|||
, _pending_signals (0)
|
||||
, _meter_point (MeterPostFader)
|
||||
, _pending_meter_point (MeterPostFader)
|
||||
, _meter_type (MeterPeak)
|
||||
, _denormal_protection (false)
|
||||
, _recordable (true)
|
||||
, _have_internal_generator (false)
|
||||
|
@ -129,16 +128,6 @@ Route::weakroute () {
|
|||
int
|
||||
Route::init ()
|
||||
{
|
||||
/* set default meter type */
|
||||
if (is_master()) {
|
||||
_meter_type = Config->get_meter_type_master ();
|
||||
}
|
||||
else if (dynamic_cast<Track*>(this)) {
|
||||
_meter_type = Config->get_meter_type_track ();
|
||||
} else {
|
||||
_meter_type = Config->get_meter_type_bus ();
|
||||
}
|
||||
|
||||
/* add standard controls */
|
||||
|
||||
_gain_control.reset (new GainControl (_session, GainAutomation));
|
||||
|
@ -227,6 +216,15 @@ Route::init ()
|
|||
_meter->set_display_to_user (false);
|
||||
_meter->activate ();
|
||||
|
||||
/* set default meter type */
|
||||
if (is_master()) {
|
||||
set_meter_type (Config->get_meter_type_master ());
|
||||
} else if (dynamic_cast<Track*>(this)) {
|
||||
set_meter_type (Config->get_meter_type_track ());
|
||||
} else {
|
||||
set_meter_type (Config->get_meter_type_bus ());
|
||||
}
|
||||
|
||||
_main_outs.reset (new Delivery (_session, _output, _pannable, _mute_master, _name, Delivery::Main));
|
||||
_main_outs->activate ();
|
||||
|
||||
|
@ -2457,7 +2455,7 @@ Route::state (bool save_template)
|
|||
node->set_property (X_("meter-point"), _meter_point);
|
||||
node->set_property (X_("disk-io-point"), _disk_io_point);
|
||||
|
||||
node->set_property (X_("meter-type"), _meter_type);
|
||||
node->set_property (X_("meter-type"), _meter->meter_type ());
|
||||
|
||||
if (_route_group) {
|
||||
node->set_property (X_("route-group"), _route_group->name());
|
||||
|
@ -2626,7 +2624,10 @@ Route::set_state (const XMLNode& node, int version)
|
|||
set_disk_io_point (diop);
|
||||
}
|
||||
|
||||
node.get_property (X_("meter-type"), _meter_type);
|
||||
MeterType meter_type;
|
||||
if (node.get_property (X_("meter-type"), meter_type)) {
|
||||
set_meter_type (meter_type);
|
||||
}
|
||||
|
||||
_initial_io_setup = false;
|
||||
|
||||
|
@ -5959,6 +5960,18 @@ Route::slavables () const
|
|||
return rv;
|
||||
}
|
||||
|
||||
void
|
||||
Route::set_meter_type (MeterType t)
|
||||
{
|
||||
_meter->set_meter_type (t);
|
||||
}
|
||||
|
||||
MeterType
|
||||
Route::meter_type () const
|
||||
{
|
||||
return _meter->meter_type ();
|
||||
}
|
||||
|
||||
void
|
||||
Route::set_disk_io_point (DiskIOPoint diop)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user