+
+void
+MonitorProcessor::update_monitor_state ()
+{
+ bool en = false;
+
+ if (_cut_all || _dim_all || _mono) {
+ en = true;
+ }
+
+ const uint32_t nchans = _channels.size();
+ for (uint32_t i = 0; i < nchans && !en; ++i) {
+ if (cut (i) || dimmed (i) || soloed (i) || inverted (i)) {
+ en = true;
+ break;
+ }
+ }
+
+ if (_monitor_active != en) {
+ _monitor_active = en;
+ _session.MonitorChanged();
+ }
+}
+
+boost::shared_ptr<Controllable>
+MonitorProcessor::channel_cut_control (uint32_t chn) const
+{
+ if (chn < _channels.size()) {
+ return _channels[chn]->cut_control;
+ }
+ return boost::shared_ptr<Controllable>();
+}
+
+boost::shared_ptr<Controllable>
+MonitorProcessor::channel_dim_control (uint32_t chn) const
+{
+ if (chn < _channels.size()) {
+ return _channels[chn]->dim_control;
+ }
+ return boost::shared_ptr<Controllable>();
+}
+
+boost::shared_ptr<Controllable>
+MonitorProcessor::channel_polarity_control (uint32_t chn) const
+{
+ if (chn < _channels.size()) {
+ return _channels[chn]->polarity_control;
+ }
+ return boost::shared_ptr<Controllable>();
+}
+
+boost::shared_ptr<Controllable>
+MonitorProcessor::channel_solo_control (uint32_t chn) const
+{
+ if (chn < _channels.size()) {
+ return _channels[chn]->soloed_control;
+ }
+ return boost::shared_ptr<Controllable>();
+}
+
+MonitorProcessor::ChannelRecord::ChannelRecord (uint32_t chn)
+ : current_gain (GAIN_COEFF_UNITY)
+ , cut_ptr (new MPControl<gain_t> (1.0, string_compose (_("cut control %1"), chn), PBD::Controllable::GainLike))
+ , dim_ptr (new MPControl<bool> (false, string_compose (_("dim control"), chn), PBD::Controllable::Toggle))
+ , polarity_ptr (new MPControl<gain_t> (1.0, string_compose (_("polarity control"), chn), PBD::Controllable::Toggle, -1, 1))
+ , soloed_ptr (new MPControl<bool> (false, string_compose (_("solo control"), chn), PBD::Controllable::Toggle))
+
+ , cut_control (cut_ptr)
+ , dim_control (dim_ptr)
+ , polarity_control (polarity_ptr)
+ , soloed_control (soloed_ptr)
+
+ , cut (*cut_ptr)
+ , dim (*dim_ptr)
+ , polarity (*polarity_ptr)
+ , soloed (*soloed_ptr)
+{
+
+}