def __init__(self, log): self.log = log self.timeline_object_property_trackers = {} self.interpolator_keyframe_trackers = {} self.effect_properties_tracker = EffectGstElementPropertyChangeTracker( log) self._pipeline = None
def __init__(self, log): self.log = log self.timeline_object_property_trackers = {} self.interpolator_keyframe_trackers = {} self.effect_properties_tracker = EffectGstElementPropertyChangeTracker(log) self._pipeline = None
class TimelineLogObserver(object): timelinePropertyChangedAction = TimelineObjectPropertyChanged timelineObjectAddedAction = TimelineObjectAdded timelineObjectRemovedAction = TimelineObjectRemoved trackEffectAddAction = TrackEffectAdded trackEffectRemovedAction = TrackEffectRemoved interpolatorKeyframeAddedAction = InterpolatorKeyframeAdded interpolatorKeyframeRemovedAction = InterpolatorKeyframeRemoved interpolatorKeyframeChangedAction = InterpolatorKeyframeChanged activePropertyChangedAction = ActivePropertyChanged def __init__(self, log): self.log = log self.timeline_object_property_trackers = {} self.interpolator_keyframe_trackers = {} self.effect_properties_tracker = EffectGstElementPropertyChangeTracker(log) self._pipeline = None def startObserving(self, timeline): self._connectToTimeline(timeline) for timeline_object in timeline.timeline_objects: self._connectToTimelineObject(timeline_object) for track_object in timeline_object.track_objects: self._connectToTrackObject(track_object) def stopObserving(self, timeline): self._disconnectFromTimeline(timeline) for timeline_object in timeline.timeline_objects: self._disconnectFromTimelineObject(timeline_object) for track_object in timeline_object.track_objects: self._disconnectFromTrackObject(track_object) def _connectToTimeline(self, timeline): timeline.connect("timeline-object-added", self._timelineObjectAddedCb) timeline.connect("timeline-object-removed", self._timelineObjectRemovedCb) def _disconnectFromTimeline(self, timeline): timeline.disconnect_by_func(self._timelineObjectAddedCb) timeline.disconnect_by_func(self._timelineObjectRemovedCb) def _connectToTimelineObject(self, timeline_object): tracker = TimelineObjectPropertyChangeTracker() tracker.connectToObject(timeline_object) for property_name in tracker.property_names: tracker.connect(property_name + "-changed", self._timelineObjectPropertyChangedCb, property_name) self.timeline_object_property_trackers[timeline_object] = tracker timeline_object.connect("track-object-added", self._timelineObjectTrackObjectAddedCb) timeline_object.connect("track-object-removed", self._timelineObjectTrackObjectRemovedCb) for obj in timeline_object.track_objects: self._connectToTrackObject(obj) def _disconnectFromTimelineObject(self, timeline_object): tracker = self.timeline_object_property_trackers.pop(timeline_object) tracker.disconnectFromObject(timeline_object) tracker.disconnect_by_func(self._timelineObjectPropertyChangedCb) def _connectToTrackObject(self, track_object): for prop, interpolator in track_object.getInterpolators().itervalues(): self._connectToInterpolator(interpolator) def _disconnectFromTrackObject(self, track_object): for prop, interpolator in track_object.getInterpolators().itervalues(): self._disconnectFromInterpolator(interpolator) def _connectToInterpolator(self, interpolator): interpolator.connect("keyframe-added", self._interpolatorKeyframeAddedCb) interpolator.connect("keyframe-removed", self._interpolatorKeyframeRemovedCb) tracker = KeyframeChangeTracker() tracker.connectToObject(interpolator) tracker.connect("keyframe-moved", self._interpolatorKeyframeMovedCb) self.interpolator_keyframe_trackers[interpolator] = tracker def _disconnectFromInterpolator(self, interpolator): tracker = self.interpolator_keyframe_trackers.pop(interpolator) tracker.disconnectFromObject(interpolator) tracker.disconnect_by_func(self._interpolatorKeyframeMovedCb) def _timelineObjectAddedCb(self, timeline, timeline_object): self._connectToTimelineObject(timeline_object) action = self.timelineObjectAddedAction(timeline, timeline_object) self.log.push(action) def _timelineObjectRemovedCb(self, timeline, timeline_object): self._disconnectFromTimelineObject(timeline_object) action = self.timelineObjectRemovedAction(timeline, timeline_object) self.log.push(action) def _timelineObjectPropertyChangedCb(self, tracker, timeline_object, old_value, new_value, property_name): action = self.timelinePropertyChangedAction(timeline_object, property_name, old_value, new_value) self.log.push(action) def _timelineObjectTrackObjectAddedCb(self, timeline_object, track_object): if isinstance(track_object, TrackEffect): action = self.trackEffectAddAction(timeline_object, track_object, self.effect_properties_tracker) #We use the action instead of the track object #because the track_object changes when redoing track_object.connect("active-changed", self._trackObjectActiveChangedCb, action) self.log.push(action) element = track_object.getElement() if element: self.effect_properties_tracker.addEffectElement(element) else: self._connectToTrackObject(track_object) def _timelineObjectTrackObjectRemovedCb(self, timeline_object, track_object): if isinstance(track_object, TrackEffect): action = self.trackEffectRemovedAction(timeline_object, track_object, self.effect_properties_tracker) self.log.push(action) else: self._disconnectFromTrackObject(track_object) def _interpolatorKeyframeAddedCb(self, track_object, keyframe): action = self.interpolatorKeyframeAddedAction(track_object, keyframe) self.log.push(action) def _interpolatorKeyframeRemovedCb(self, track_object, keyframe, old_value=None): action = self.interpolatorKeyframeRemovedAction(track_object, keyframe) self.log.push(action) def _trackObjectActiveChangedCb(self, track_object, active, add_effect_action): action = self.activePropertyChangedAction(add_effect_action, active) self.log.push(action) def _interpolatorKeyframeMovedCb(self, tracker, track_object, keyframe, old_snapshot, new_snapshot): action = self.interpolatorKeyframeChangedAction(track_object, keyframe, old_snapshot, new_snapshot) self.log.push(action)