Merge branch 'master' into cairocanvas
[ardour.git] / libs / ardour / region.cc
index cc57e774c8862e847875862a8313aaf38df986ab..1784cdbf3c1acac7cf3a64ec1299aefa4af40e77 100644 (file)
@@ -49,9 +49,7 @@ namespace ARDOUR {
                PBD::PropertyDescriptor<bool> muted;
                PBD::PropertyDescriptor<bool> opaque;
                PBD::PropertyDescriptor<bool> locked;
-#ifdef WITH_VIDEOTIMELINE
                PBD::PropertyDescriptor<bool> video_locked;
-#endif
                PBD::PropertyDescriptor<bool> automatic;
                PBD::PropertyDescriptor<bool> whole_file;
                PBD::PropertyDescriptor<bool> import;
@@ -87,10 +85,8 @@ Region::make_property_quarks ()
        DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for opaque = %1\n",      Properties::opaque.property_id));
        Properties::locked.property_id = g_quark_from_static_string (X_("locked"));
        DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for locked = %1\n",      Properties::locked.property_id));
-#ifdef WITH_VIDEOTIMELINE
        Properties::video_locked.property_id = g_quark_from_static_string (X_("video-locked"));
        DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for video-locked = %1\n",        Properties::video_locked.property_id));
-#endif
        Properties::automatic.property_id = g_quark_from_static_string (X_("automatic"));
        DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for automatic = %1\n",   Properties::automatic.property_id));
        Properties::whole_file.property_id = g_quark_from_static_string (X_("whole-file"));
@@ -143,9 +139,7 @@ Region::register_properties ()
        add_property (_muted);
        add_property (_opaque);
        add_property (_locked);
-#ifdef WITH_VIDEOTIMELINE
        add_property (_video_locked);
-#endif
        add_property (_automatic);
        add_property (_whole_file);
        add_property (_import);
@@ -167,13 +161,6 @@ Region::register_properties ()
        add_property (_position_lock_style);
        add_property (_layering_index);
 }
-#ifdef WITH_VIDEOTIMELINE
-#define VTLSTATE       , _video_locked (Properties::video_locked, false)
-#define VTLCSTATE      , _video_locked (Properties::video_locked, other->_video_locked)
-#else
-#define VTLSTATE
-#define VTLCSTATE
-#endif
 
 #define REGION_DEFAULT_STATE(s,l) \
        _sync_marked (Properties::sync_marked, false) \
@@ -187,7 +174,7 @@ Region::register_properties ()
        , _muted (Properties::muted, false) \
        , _opaque (Properties::opaque, true) \
        , _locked (Properties::locked, false) \
-  VTLSTATE \
+  , _video_locked (Properties::video_locked, false) \
        , _automatic (Properties::automatic, false) \
        , _whole_file (Properties::whole_file, false) \
        , _import (Properties::import, false) \
@@ -213,7 +200,7 @@ Region::register_properties ()
         , _muted (Properties::muted, other->_muted)            \
        , _opaque (Properties::opaque, other->_opaque)          \
        , _locked (Properties::locked, other->_locked)          \
-  VTLCSTATE \
+  , _video_locked (Properties::video_locked, other->_video_locked) \
        , _automatic (Properties::automatic, other->_automatic) \
        , _whole_file (Properties::whole_file, other->_whole_file) \
        , _import (Properties::import, other->_import)          \
@@ -646,11 +633,7 @@ Region::recompute_position_from_lock_style ()
 void
 Region::nudge_position (frameoffset_t n)
 {
-       if (locked()
-#ifdef WITH_VIDEOTIMELINE
-                       || video_locked()
-#endif
-                       ) {
+       if (locked() || video_locked()) {
                return;
        }
 
@@ -691,11 +674,7 @@ Region::set_ancestral_data (framepos_t s, framecnt_t l, float st, float sh)
 void
 Region::set_start (framepos_t pos)
 {
-       if (locked() || position_locked()
-#ifdef WITH_VIDEOTIMELINE
-                       || video_locked()
-#endif
-                       ) {
+       if (locked() || position_locked() || video_locked()) {
                return;
        }
        /* This just sets the start, nothing else. It effectively shifts
@@ -719,37 +698,32 @@ Region::set_start (framepos_t pos)
 }
 
 void
-Region::trim_start (framepos_t new_position)
+Region::move_start (frameoffset_t distance)
 {
-       if (locked() || position_locked()
-#ifdef WITH_VIDEOTIMELINE
-                       || video_locked()
-#endif
-                       ) {
+       if (locked() || position_locked() || video_locked()) {
                return;
        }
 
        framepos_t new_start;
-       frameoffset_t const start_shift = new_position - _position;
 
-       if (start_shift > 0) {
+       if (distance > 0) {
 
-               if (_start > max_framepos - start_shift) {
-                       new_start = max_framepos;
+               if (_start > max_framepos - distance) {
+                       new_start = max_framepos; // makes no sense
                } else {
-                       new_start = _start + start_shift;
+                       new_start = _start + distance;
                }
 
                if (!verify_start (new_start)) {
                        return;
                }
 
-       } else if (start_shift < 0) {
+       } else if (distance < 0) {
 
-               if (_start < -start_shift) {
+               if (_start < -distance) {
                        new_start = 0;
                } else {
-                       new_start = _start + start_shift;
+                       new_start = _start + distance;
                }
 
        } else {
@@ -761,6 +735,7 @@ Region::trim_start (framepos_t new_position)
        }
 
        set_start_internal (new_start);
+
        _whole_file = false;
        first_edit ();
 
@@ -1010,7 +985,6 @@ Region::set_locked (bool yn)
        }
 }
 
-#ifdef WITH_VIDEOTIMELINE
 void
 Region::set_video_locked (bool yn)
 {
@@ -1019,7 +993,6 @@ Region::set_video_locked (bool yn)
                send_change (Properties::video_locked);
        }
 }
-#endif
 
 void
 Region::set_position_locked (bool yn)
@@ -1517,6 +1490,20 @@ Region::uses_source (boost::shared_ptr<const Source> source) const
                }
        }
 
+       for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) {
+               if (*i == source) {
+                       return true;
+               }
+
+               boost::shared_ptr<PlaylistSource> ps = boost::dynamic_pointer_cast<PlaylistSource> (*i);
+
+               if (ps) {
+                       if (ps->playlist()->uses_source (source)) {
+                               return true;
+                       }
+               }
+       }
+
        return false;
 }