+ sframes_t ancestral_start () const { return _ancestral_start; }
+ framecnt_t ancestral_length () const { return _ancestral_length; }
+ float stretch() const { return _stretch; }
+ float shift() const { return _shift; }
+
+ void set_ancestral_data (nframes64_t start, nframes64_t length, float stretch, float shift);
+
+ frameoffset_t sync_offset(int& dir) const;
+ framepos_t sync_position() const;
+ framepos_t sync_point () const;
+
+ framepos_t adjust_to_sync (framepos_t) const;
+
+ /* first_frame() is an alias; last_frame() just hides some math */
+
+ framepos_t first_frame() const { return _position; }
+ framepos_t last_frame() const { return _position + _length - 1; }
+
+ bool hidden() const { return _hidden; }
+ bool muted() const { return _muted; }
+ bool opaque () const { return _opaque; }
+ bool locked() const { return _locked; }
+ bool position_locked() const { return _position_locked; }
+ bool valid_transients() const { return _valid_transients; }
+ bool automatic() const { return _automatic; }
+ bool whole_file() const { return _whole_file; }
+ bool captured() const { return !(_import || _external); }
+ bool can_move() const { return !_position_locked; }
+ bool sync_marked() const { return _sync_marked; }
+ bool external() const { return _external; }
+ bool import() const { return _import; }
+
+ PositionLockStyle position_lock_style() const { return _position_lock_style; }
+ void set_position_lock_style (PositionLockStyle ps);
+ void recompute_position_from_lock_style ();
+
+ void suspend_property_changes ();
+
+ bool covers (framepos_t frame) const {
+ return first_frame() <= frame && frame <= last_frame();