X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fmute_master.h;h=6f5999efb44c8b704a440061900400fe15d78b12;hb=9766cc7d8b1d96817d2ec9b5a7ccef6f97f440f5;hp=1b06b4bf7c5baad0196f09e8a5646d4570aff385;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/libs/ardour/ardour/mute_master.h b/libs/ardour/ardour/mute_master.h index 1b06b4bf7c..6f5999efb4 100644 --- a/libs/ardour/ardour/mute_master.h +++ b/libs/ardour/ardour/mute_master.h @@ -20,56 +20,72 @@ #ifndef __ardour_mute_master_h__ #define __ardour_mute_master_h__ +#include + +#include "pbd/signals.h" +#include "pbd/stateful.h" + #include "evoral/Parameter.hpp" -#include "ardour/automation_control.h" -#include "ardour/automation_list.h" + +#include "ardour/session_handle.h" +#include "ardour/types.h" namespace ARDOUR { class Session; -class MuteMaster : public AutomationControl +class LIBARDOUR_API MuteMaster : public SessionHandleRef, public PBD::Stateful { public: + /** deliveries to mute when the channel is "muted" */ enum MutePoint { - PreFader = 0x1, - PostFader = 0x2, - Listen = 0x4, - Main = 0x8 + PreFader = 0x1, ///< mute all pre-fader sends + PostFader = 0x2, ///< mute all post-fader sends + Listen = 0x4, ///< mute listen out + Main = 0x8 ///< mute main out }; + static const MutePoint AllPoints; + MuteMaster (Session& s, const std::string& name); ~MuteMaster() {} - bool muted_pre_fader() const { return _mute_point & PreFader; } - bool muted_post_fader() const { return _mute_point & PostFader; } - bool muted_listen() const { return _mute_point & Listen; } - bool muted_main () const { return _mute_point & Main; } - - bool muted_at (MutePoint mp) const { return _mute_point & mp; } - bool muted() const { return _mute_point != MutePoint (0); } + bool muted_by_self () const { return _muted_by_self && (_mute_point != MutePoint (0)); } + bool muted_by_self_at (MutePoint mp) const { return _muted_by_self && (_mute_point & mp); } + bool muted_by_others_soloing_at (MutePoint mp) const; + bool muted_by_masters () const { return _muted_by_masters && (_mute_point != MutePoint (0)); } + bool muted_by_masters_at (MutePoint mp) const { return _muted_by_masters && (_mute_point & mp); } gain_t mute_gain_at (MutePoint) const; - void clear_mute (); + void set_muted_by_self (bool yn) { _muted_by_self = yn; } + void mute_at (MutePoint); void unmute_at (MutePoint); - void mute (bool yn); + void set_mute_points (const std::string& mute_point); + void set_mute_points (MutePoint); + MutePoint mute_points() const { return _mute_point; } - /* Controllable interface */ + void set_soloed_by_self (bool yn) { _soloed_by_self = yn; } + void set_soloed_by_others (bool yn) { _soloed_by_others = yn; } + void set_solo_ignore (bool yn) { _solo_ignore = yn; } - void set_value (float); /* note: float is used as a bitfield of MutePoints */ - float get_value () const; + void set_muted_by_masters (bool); - sigc::signal MutePointChanged; + PBD::Signal0 MutePointChanged; XMLNode& get_state(); - int set_state(const XMLNode& node); + int set_state(const XMLNode&, int version); + static const std::string xml_node_name; private: - AutomationList* _automation; MutePoint _mute_point; + bool _muted_by_self; + bool _soloed_by_self; + bool _soloed_by_others; + bool _solo_ignore; + bool _muted_by_masters; }; } // namespace ARDOUR