#define __ardour_gain_control_h__
#include <string>
-#include <map>
#include <boost/shared_ptr.hpp>
-#include <glibmm/threads.h>
#include "pbd/controllable.h"
#include "evoral/Parameter.hpp"
-#include "ardour/automation_control.h"
+#include "ardour/slavable_automation_control.h"
#include "ardour/libardour_visibility.h"
namespace ARDOUR {
class Session;
-class LIBARDOUR_API GainControl : public AutomationControl {
+class LIBARDOUR_API GainControl : public SlavableAutomationControl {
public:
GainControl (Session& session, const Evoral::Parameter ¶m,
boost::shared_ptr<AutomationList> al = boost::shared_ptr<AutomationList>());
- double get_value () const;
- void set_value (double val, PBD::Controllable::GroupControlDisposition group_override);
- void set_value_unchecked (double);
+ void inc_gain (gain_t);
- double internal_to_interface (double) const;
- double interface_to_internal (double) const;
- double internal_to_user (double) const;
- double user_to_internal (double) const;
- std::string get_user_string () const;
-
- double lower_db;
- double range_db;
-
- gain_t get_master_gain () const;
- void add_master (boost::shared_ptr<VCA>);
- void remove_master (boost::shared_ptr<VCA>);
- void clear_masters ();
- bool slaved_to (boost::shared_ptr<VCA>) const;
- bool slaved () const;
- std::vector<uint32_t> masters () const;
-
- PBD::Signal0<void> VCAStatusChange;
-
- int set_state (XMLNode const&, int);
- XMLNode& get_state();
-
- private:
- class MasterRecord {
- public:
- MasterRecord (boost::shared_ptr<GainControl> gc, double r)
- : _master (gc)
- , _ratio (r)
- {}
-
- boost::shared_ptr<GainControl> master() const { return _master; }
- double ratio () const { return _ratio; }
- void reset_ratio (double r) { _ratio = r; }
-
- PBD::ScopedConnection connection;
-
- private:
- boost::shared_ptr<GainControl> _master;
- double _ratio;
-
- };
-
- mutable Glib::Threads::RWLock master_lock;
- typedef std::map<uint32_t,MasterRecord> Masters;
- Masters _masters;
- PBD::ScopedConnectionList masters_connections;
- std::string _masters_state_string ();
-
- gain_t get_value_locked () const;
- gain_t get_master_gain_locked () const;
- void master_going_away (boost::weak_ptr<VCA>);
- void recompute_masters_ratios (double val);
-
- void _set_value (double val, PBD::Controllable::GroupControlDisposition group_override);
+protected:
+ void post_add_master (boost::shared_ptr<AutomationControl>);
+ bool get_masters_curve_locked (samplepos_t, samplepos_t, float*, samplecnt_t) const;
};
} /* namespace */