X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fregion.h;h=c3aac3dfa881959ad563911aaaa84c6525fc2594;hb=6698f5f686bef82b0c9568558c83a3b9b3344700;hp=96663f79c8335e05b00361df157fcca10da3a4f1;hpb=fedf3d34f32264ac57c6a222b678dc90f2bb1a88;p=ardour.git diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 96663f79c8..c3aac3dfa8 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_region_h__ @@ -29,7 +28,6 @@ #include #include -#include #include class XMLNode; @@ -44,21 +42,7 @@ enum RegionEditState { EditChangesID = 2 }; -struct RegionState : public StateManager::State -{ - RegionState (std::string why) : StateManager::State (why) {} - - nframes_t _start; - nframes_t _length; - nframes_t _position; - uint32_t _flags; - nframes_t _sync_position; - layer_t _layer; - string _name; - mutable RegionEditState _first_edit; -}; - -class Region : public PBD::StatefulDestructible, public StateManager, public boost::enable_shared_from_this +class Region : public PBD::StatefulDestructible, public boost::enable_shared_from_this { public: typedef std::vector > SourceList; @@ -82,6 +66,7 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo RightOfSplit = 0x8000, Hidden = 0x10000, DoNotSaveState = 0x20000, + PositionLocked = 0x40000, // range_guarantoor = USHRT_MAX }; @@ -96,6 +81,8 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo static Change LayerChanged; static Change HiddenChanged; + sigc::signal StateChanged; + virtual ~Region(); /* Note: changing the name of a Region does not constitute an edit */ @@ -125,9 +112,11 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo bool muted() const { return _flags & Muted; } bool opaque () const { return _flags & Opaque; } bool locked() const { return _flags & Locked; } + bool position_locked() const { return _flags & PositionLocked; } bool automatic() const { return _flags & Automatic; } bool whole_file() const { return _flags & WholeFile ; } bool captured() const { return !(_flags & (Region::Flag (Region::Import|Region::External))); } + bool can_move() const { return !(_flags & (Locked|PositionLocked)); } virtual bool should_save_state () const { return !(_flags & DoNotSaveState); }; @@ -157,6 +146,7 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo void special_set_position (nframes_t); void nudge_position (long, void *src); + bool at_natural_position () const; void move_to_natural_position (void *src); void trim_start (nframes_t new_position, void *src); @@ -165,8 +155,6 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo void trim_to (nframes_t position, nframes_t length, void *src); void set_layer (layer_t l); /* ONLY Playlist can call this */ - void raise (); - void lower (); void raise_to_top (); void lower_to_bottom (); @@ -176,34 +164,38 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo void set_muted (bool yn); void set_opaque (bool yn); void set_locked (bool yn); + void set_position_locked (bool yn); virtual uint32_t read_data_count() const { return _read_data_count; } - ARDOUR::Playlist* playlist() const { return _playlist; } - - virtual UndoAction get_memento() const = 0; - - void set_playlist (ARDOUR::Playlist*); + boost::shared_ptr playlist() const { return _playlist.lock(); } + virtual void set_playlist (boost::weak_ptr); void source_deleted (boost::shared_ptr); - + boost::shared_ptr source (uint32_t n=0) const { return _sources[ (n < _sources.size()) ? n : 0 ]; } uint32_t n_channels() const { return _sources.size(); } std::vector master_source_names(); - + + const SourceList& sources() const { return _sources; } + const SourceList& master_sources() const { return _master_sources; } /* serialization */ XMLNode& get_state (); virtual XMLNode& state (bool); virtual int set_state (const XMLNode&); + virtual int set_live_state (const XMLNode&, Change&, bool send); - boost::shared_ptr get_parent(); + virtual boost::shared_ptr get_parent() const; uint64_t last_layer_op() const { return _last_layer_op; } void set_last_layer_op (uint64_t when); + virtual bool is_dependent() const { return false; } + virtual bool depends_on (boost::shared_ptr other) const { return false; } + protected: friend class RegionFactory; @@ -217,33 +209,28 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo Region (boost::shared_ptr src, const XMLNode&); Region (SourceList& srcs, const XMLNode&); + /* this one is for derived types of derived types */ + + Region (nframes_t start, nframes_t length, const string& name, DataType, layer_t = 0, Flag flags = DefaultFlags); + protected: XMLNode& get_short_state (); /* used only by Session */ - /* state management */ - void send_change (Change); - /* derived classes need these during their own state management calls */ - - void store_state (RegionState&) const; - Change restore_and_return_flags (RegionState&); - void trim_to_internal (nframes_t position, nframes_t length, void *src); bool copied() const { return _flags & Copied; } void maybe_uncopy (); void first_edit (); - bool verify_start (jack_nframes_t); - bool verify_start_and_length (jack_nframes_t, jack_nframes_t); - bool verify_start_mutable (jack_nframes_t&_start); - bool verify_length (jack_nframes_t); + virtual bool verify_start (nframes_t); + virtual bool verify_start_and_length (nframes_t, nframes_t); + virtual bool verify_start_mutable (nframes_t&_start); + virtual bool verify_length (nframes_t); virtual void recompute_at_start () = 0; virtual void recompute_at_end () = 0; - - PBD::ID _id; string _name; DataType _type; Flag _flags; @@ -258,7 +245,7 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo Change _pending_changed; uint64_t _last_layer_op; ///< timestamp Glib::Mutex _lock; - ARDOUR::Playlist* _playlist; + boost::weak_ptr _playlist; SourceList _sources; /** Used when timefx are applied, so we can always use the original source */ SourceList _master_sources;