+protected:
+ boost::shared_ptr<ControlGroup> _group;
+
+ const ParameterDescriptor _desc;
+
+ bool check_rt (double val, Controllable::GroupControlDisposition gcd);
+
+ /* derived classes may reimplement this, but should either
+ call this explicitly inside their version OR make sure that the
+ Controllable::Changed signal is emitted when necessary.
+ */
+
+ virtual void actually_set_value (double value, PBD::Controllable::GroupControlDisposition);
+
+ /* Session needs to call this method before it queues up the real
+ change for execution in a realtime context. C++ access control sucks.
+ */
+ friend class Session;
+ /* this is what the session invokes */
+ void pre_realtime_queue_stuff (double new_value, PBD::Controllable::GroupControlDisposition);
+ /* this will be invoked in turn on behalf of the group or the control by itself */
+ virtual void do_pre_realtime_queue_stuff (double new_value) {}
+
+ void session_going_away ();
+
+private:
+ /* I am unclear on why we have to make ControlGroup a friend in order
+ to get access to the ::set_group() method when it is already
+ declared to be a friend in ControlGroupMember. Oh well.
+ */
+ friend class ControlGroup;
+ void set_group (boost::shared_ptr<ControlGroup>);
+ PBD::ScopedConnection _state_changed_connection;
+ bool _no_session;