Add API to expand/flatten AC groups
[ardour.git] / libs / ardour / ardour / types.h
index 46ef2bade9c81888710e2b3138b0184532607fe0..7a0c5762b720d2de593033c8b5b0178e56609a69 100644 (file)
@@ -23,6 +23,7 @@
 #include <istream>
 #include <vector>
 #include <map>
+#include <set>
 #include <boost/shared_ptr.hpp>
 #include <sys/types.h>
 #include <stdint.h>
@@ -55,6 +56,7 @@ namespace ARDOUR {
        class Stripable;
        class VCA;
        class AutomationControl;
+       class SlavableAutomationControl;
 
        typedef float    Sample;
        typedef float    pan_t;
@@ -156,20 +158,8 @@ namespace ARDOUR {
                TrimAutomation,
                PhaseAutomation,
                MonitoringAutomation,
-               EQGain,
-               EQFrequency,
-               EQQ,
-               EQShape,
-               EQHPF,
-               EQEnable,
-               CompThreshold,
-               CompSpeed,
-               CompMode,
-               CompMakeup,
-               CompRedux,
-               CompEnable,
                BusSendLevel,
-               BusSendEnable,
+               BusSendEnable
        };
 
        enum AutoState {
@@ -182,14 +172,6 @@ namespace ARDOUR {
        std::string auto_state_to_string (AutoState);
        AutoState string_to_auto_state (std::string);
 
-       enum AutoStyle {
-               Absolute = 0x1,
-               Trim = 0x2
-       };
-
-       std::string auto_style_to_string (AutoStyle);
-       AutoStyle string_to_auto_style (std::string);
-
        enum AlignStyle {
                CaptureTime,
                ExistingMaterial
@@ -249,12 +231,6 @@ namespace ARDOUR {
                TrackColor
        };
 
-       enum LocaleMode {
-               SET_LC_ALL,
-               SET_LC_MESSAGES,
-               SET_LC_MESSAGES_AND_LC_NUMERIC
-       };
-
        enum RoundMode {
                RoundDownMaybe  = -2,  ///< Round down only if necessary
                RoundDownAlways = -1,  ///< Always round down, even if on a division
@@ -319,6 +295,27 @@ namespace ARDOUR {
                }
        };
 
+       /* used for translating audio frames to an exact musical position using a note divisor.
+          an exact musical position almost never falls exactly on an audio frame, but for sub-sample
+          musical accuracy we need to derive exact musical locations from a frame position
+          the division follows TempoMap::exact_beat_at_frame().
+          division
+          -1       musical location is the bar closest to frame
+           0       musical location is the musical position of the frame
+           1       musical location is the BBT beat closest to frame
+           n       musical location is the quarter-note division n closest to frame
+       */
+       struct MusicFrame {
+               framepos_t frame;
+               int32_t    division;
+
+               MusicFrame (framepos_t f, int32_t d) : frame (f), division (d) {}
+
+               void set (framepos_t f, int32_t d) {frame = f; division = d; }
+
+               MusicFrame operator- (MusicFrame other) { return MusicFrame (frame - other.frame, 0); }
+       };
+
        /* XXX: slightly unfortunate that there is this and Evoral::Range<>,
           but this has a uint32_t id which Evoral::Range<> does not.
        */
@@ -573,6 +570,8 @@ namespace ARDOUR {
        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<SlavableAutomationControl> > SlavableControlList;
+       typedef std::set <boost::shared_ptr<AutomationControl> > AutomationControlSet;
 
        typedef std::list<boost::shared_ptr<VCA> > VCAList;
 
@@ -711,74 +710,6 @@ namespace ARDOUR {
 
 } // namespace ARDOUR
 
-
-/* these cover types declared above in this header. See enums.cc
-   for the definitions.
-*/
-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::MonitorChoice& 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::ListenPosition& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::LayerModel& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::InsertMergePolicy& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::SyncSource& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::ShuttleBehaviour& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::ShuttleUnits& sf);
-std::istream& operator>>(std::istream& o, Timecode::TimecodeFormat& sf);
-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::MonitorChoice& 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::ListenPosition& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::LayerModel& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::InsertMergePolicy& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::SyncSource& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::ShuttleBehaviour& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::ShuttleUnits& sf);
-std::ostream& operator<<(std::ostream& o, const Timecode::TimecodeFormat& sf);
-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.
-*/
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::WaveformScale& sf);
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::WaveformShape& sf);
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::VUMeterStandard& sf);
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::MeterLineUp& sf);
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::LocaleMode& sf);
-
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::WaveformScale& sf);
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::WaveformShape& sf);
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::VUMeterStandard& sf);
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::MeterLineUp& sf);
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::LocaleMode& sf);
-
-
 static inline ARDOUR::framepos_t
 session_frame_to_track_frame (ARDOUR::framepos_t session_frame, double speed)
 {