treat VCA assign as a RouteGroup property.
[ardour.git] / libs / ardour / ardour / types.h
index b1b4388a747115d3b090decd6471264f07a60f17..ce284845191ac667cb05cbf296499f8e8a2a485a 100644 (file)
@@ -52,6 +52,9 @@ namespace ARDOUR {
        class AudioSource;
        class Route;
        class Region;
+       class Stripable;
+       class VCA;
+       class AutomationControl;
 
        typedef float    Sample;
        typedef float    pan_t;
@@ -117,6 +120,13 @@ namespace ARDOUR {
        };
 
        /** See evoral/Parameter.hpp
+        *
+        * When you add things here, you REALLY SHOULD add a case clause to
+        * the constructor of ParameterDescriptor, unless the Controllables
+        * that the enum refers to are completely standard (0-1.0 range, 0.0 as
+        * normal, non-toggled, non-enumerated). Anything else needs to be
+        * added there so that things that try to represent them can do so
+        * with as much information as possible.
         */
        enum AutomationType {
                NullAutomation,
@@ -129,6 +139,8 @@ namespace ARDOUR {
                PluginAutomation,
                PluginPropertyAutomation,
                SoloAutomation,
+               SoloIsolateAutomation,
+               SoloSafeAutomation,
                MuteAutomation,
                MidiCCAutomation,
                MidiPgmChangeAutomation,
@@ -139,7 +151,24 @@ namespace ARDOUR {
                FadeOutAutomation,
                EnvelopeAutomation,
                RecEnableAutomation,
+               RecSafeAutomation,
                TrimAutomation,
+               PhaseAutomation,
+               MonitoringAutomation,
+               EQGain,
+               EQFrequency,
+               EQQ,
+               EQShape,
+               EQHPF,
+               EQEnable,
+               CompThreshold,
+               CompSpeed,
+               CompMode,
+               CompMakeup,
+               CompRedux,
+               CompEnable,
+               BusSendLevel,
+               BusSendEnable,
        };
 
        enum AutoState {
@@ -192,7 +221,8 @@ namespace ARDOUR {
                MeterIEC2EBU   = 0x0200,
                MeterVU        = 0x0400,
                MeterK12       = 0x0800,
-               MeterPeak0dB   = 0x1000
+               MeterPeak0dB   = 0x1000,
+               MeterMCP       = 0x2000
        };
 
        enum TrackMode {
@@ -292,7 +322,7 @@ namespace ARDOUR {
 
                AudioRange (framepos_t s, framepos_t e, uint32_t i) : start (s), end (e) , id (i) {}
 
-               framecnt_t length() { return end - start + 1; }
+               framecnt_t length() const { return end - start + 1; }
 
                bool operator== (const AudioRange& other) const {
                        return start == other.start && end == other.end && id == other.id;
@@ -436,11 +466,6 @@ namespace ARDOUR {
                DenormalFTZDAZ
        };
 
-       enum RemoteModel {
-               UserOrdered,
-               MixerOrdered
-       };
-
        enum LayerModel {
                LaterHigher,
                Manual
@@ -457,6 +482,11 @@ namespace ARDOUR {
                AutoConnectMaster = 0x2
        };
 
+    enum TracksAutoNamingRule {
+        UseDefaultNames = 0x1,
+        NameAfterDriver = 0x2
+    };
+
        enum SampleFormat {
                FormatFloat = 0,
                FormatInt24,
@@ -479,7 +509,9 @@ namespace ARDOUR {
                CAF,
                AIFF,
                iXML,
-               RF64
+               RF64,
+               RF64_WAV,
+               MBWF,
        };
 
        struct PeakData {
@@ -530,7 +562,12 @@ namespace ARDOUR {
        typedef std::list<framepos_t> AnalysisFeatureList;
 
        typedef std::list<boost::shared_ptr<Route> > RouteList;
+       typedef std::list<boost::shared_ptr<Stripable> > StripableList;
        typedef std::list<boost::weak_ptr  <Route> > WeakRouteList;
+       typedef std::list<boost::weak_ptr  <Stripable> > WeakStripableList;
+       typedef std::list<boost::shared_ptr<AutomationControl> > ControlList;
+
+       typedef std::list<boost::shared_ptr<VCA> > VCAList;
 
        class Bundle;
        typedef std::vector<boost::shared_ptr<Bundle> > BundleList;
@@ -602,8 +639,8 @@ namespace ARDOUR {
                   this equality cannot be assumed.
                */
                TransportStopped = 0,
-               TransportRolling = 1, 
-               TransportLooping = 2, 
+               TransportRolling = 1,
+               TransportLooping = 2,
                TransportStarting = 3,
        };
 
@@ -611,7 +648,7 @@ namespace ARDOUR {
                /* these values happen to match the constants used by JACK but
                   this equality cannot be assumed.
                */
-               IsInput = 0x1, 
+               IsInput = 0x1,
                IsOutput = 0x2,
                IsPhysical = 0x4,
                CanMonitor = 0x8,
@@ -623,6 +660,26 @@ namespace ARDOUR {
            uint32_t max; //< samples
        };
 
+       enum BufferingPreset {
+               Small,
+               Medium,
+               Large,
+               Custom,
+       };
+
+       enum AutoReturnTarget {
+               LastLocate = 0x1,
+               RangeSelectionStart = 0x2,
+               Loop = 0x4,
+               RegionSelectionStart = 0x8,
+       };
+
+       enum PlaylistDisposition {
+               CopyPlaylist,
+               NewPlaylist,
+               SharePlaylist
+       };
+
 } // namespace ARDOUR
 
 
@@ -632,11 +689,11 @@ namespace ARDOUR {
 std::istream& operator>>(std::istream& o, ARDOUR::SampleFormat& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::TracksAutoNamingRule& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::PFLPosition& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::AFLPosition& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::RemoteModel& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::ListenPosition& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::LayerModel& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::InsertMergePolicy& sf);
@@ -648,15 +705,18 @@ std::istream& operator>>(std::istream& o, ARDOUR::DenormalModel& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::PositionLockStyle& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::FadeShape& sf);
 std::istream& operator>>(std::istream& o, ARDOUR::RegionSelectionAfterSplit& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::BufferingPreset& var);
+std::istream& operator>>(std::istream& o, ARDOUR::AutoReturnTarget& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::MeterType& sf);
 
 std::ostream& operator<<(std::ostream& o, const ARDOUR::SampleFormat& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::HeaderFormat& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoConnectOption& sf);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::TracksAutoNamingRule& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::EditMode& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::AFLPosition& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::RemoteModel& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::ListenPosition& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::LayerModel& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::InsertMergePolicy& sf);
@@ -668,7 +728,9 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::DenormalModel& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::PositionLockStyle& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::FadeShape& sf);
 std::ostream& operator<<(std::ostream& o, const ARDOUR::RegionSelectionAfterSplit& sf);
-
+std::ostream& operator<<(std::ostream& o, const ARDOUR::BufferingPreset& var);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoReturnTarget& sf);
+std::ostream& operator<<(std::ostream& o, const ARDOUR::MeterType& sf);
 
 /* because these operators work on types which can be used when making
    a UI_CONFIG_VARIABLE (in gtk2_ardour) we need them to be exported.
@@ -687,13 +749,30 @@ LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::MeterLineU
 static inline ARDOUR::framepos_t
 session_frame_to_track_frame (ARDOUR::framepos_t session_frame, double speed)
 {
-       return (ARDOUR::framepos_t) ((long double) session_frame * (long double) speed);
+       long double result = (long double) session_frame * (long double) speed;
+
+       if (result >= (long double) ARDOUR::max_framepos) {
+               return ARDOUR::max_framepos;
+       } else if (result <= (long double) (ARDOUR::max_framepos) * (ARDOUR::framepos_t)(-1)) {
+               return (ARDOUR::max_framepos * (ARDOUR::framepos_t)(-1));
+       } else {
+               return result;
+       }
 }
 
 static inline ARDOUR::framepos_t
 track_frame_to_session_frame (ARDOUR::framepos_t track_frame, double speed)
 {
-       return (ARDOUR::framepos_t) ((long double) track_frame / (long double) speed);
+       /* NB - do we need a check for speed == 0 ??? */
+       long double result = (long double) track_frame / (long double) speed;
+
+       if (result >= (long double) ARDOUR::max_framepos) {
+               return ARDOUR::max_framepos;
+       } else if (result <= (long double) (ARDOUR::max_framepos) * (ARDOUR::framepos_t)(-1)) {
+               return (ARDOUR::max_framepos * (ARDOUR::framepos_t)(-1));
+       } else {
+               return result;
+       }
 }
 
 /* for now, break the rules and use "using" to make this "global" */
@@ -702,4 +781,3 @@ using ARDOUR::framepos_t;
 
 
 #endif /* __ardour_types_h__ */
-