25
25
gobject.threads_init()
28
from pitivi.pipeline import Pipeline
28
29
from pitivi.timeline.timeline import Timeline, TimelineObject, SELECT_ADD
29
from pitivi.timeline.track import Track, SourceTrackObject
30
from pitivi.factories.test import VideoTestSourceFactory
30
from pitivi.timeline.track import Track, SourceTrackObject, TrackEffect
31
from pitivi.factories.test import VideoTestSourceFactory, TestEffectFactory
31
32
from pitivi.stream import VideoStream
32
33
from pitivi.timeline.timeline_undo import TimelineLogObserver, \
33
34
TimelineObjectAdded, TimelineObjectRemoved, \
34
TimelineObjectPropertyChanged
35
TimelineObjectPropertyChanged, TrackEffectAdded, \
35
37
from pitivi.undo import UndoableActionLog
37
39
class TestTimelineLogObserver(TimelineLogObserver):
46
48
def _connectToTimelineObject(self, timeline_object):
47
49
TimelineLogObserver._connectToTimelineObject(self, timeline_object)
48
50
timeline_object.connected = True
50
52
def _disconnectFromTimelineObject(self, timeline_object):
51
53
TimelineLogObserver._disconnectFromTimelineObject(self, timeline_object)
52
54
timeline_object.connected = False
91
93
class TestTimelineUndo(TestCase):
93
95
self.stream = new_stream()
94
self.factory = new_factory()
96
self.factory = new_source_factory()
97
self.effect_factory = TestEffectFactory(self.stream)
95
98
self.track1 = Track(self.stream)
96
99
self.track2 = Track(self.stream)
97
100
self.timeline = Timeline()
99
102
self.timeline.addTrack(self.track2)
100
103
self.track_object1 = SourceTrackObject(self.factory, self.stream)
101
104
self.track_object2 = SourceTrackObject(self.factory, self.stream)
105
self.track_effect1 = TrackEffect(self.effect_factory, self.stream)
106
self.track_effect2 = TrackEffect(self.effect_factory, self.stream)
102
107
self.track1.addTrackObject(self.track_object1)
103
108
self.track2.addTrackObject(self.track_object2)
104
109
self.timeline_object1 = TimelineObject(self.factory)
161
166
self.failIf(self.timeline_object1 \
162
167
in self.timeline.timeline_objects)
169
def testAddEffectToTimelineObject(self):
171
pipeline = Pipeline()
172
def commitCb(action_log, stack, nested):
174
self.action_log.connect("commit", commitCb)
175
self.observer.pipeline = pipeline
177
#FIXME Should I commit it and check there are 2 elements
179
self.timeline.addTimelineObject(self.timeline_object1)
180
self.track1.addTrackObject(self.track_effect1)
182
self.action_log.begin("add effect")
183
self.timeline_object1.addTrackObject(self.track_effect1)
184
self.action_log.commit()
186
self.failUnlessEqual(len(stacks), 1)
188
self.failUnlessEqual(len(stack.done_actions), 1)
189
action = stack.done_actions[0]
190
self.failUnless(isinstance(action, TrackEffectAdded))
192
self.failUnless(self.track_effect1 \
193
in self.timeline_object1.track_objects)
194
self.failUnless(self.track_effect1 \
195
in self.track1.track_objects)
196
self.failUnless(len([effect for effect in \
197
self.timeline_object1.track_objects
198
if isinstance(effect, TrackEffect)]) == 1)
199
self.failUnless(len([effect for effect in self.track1.track_objects
200
if isinstance(effect, TrackEffect)]) == 1)
202
self.action_log.undo()
203
self.failIf(self.track_effect1 \
204
in self.timeline_object1.track_objects)
205
self.failIf(self.track_effect1 \
206
in self.track1.track_objects)
208
self.action_log.redo()
209
self.failUnless(len([effect for effect in
210
self.timeline_object1.track_objects
211
if isinstance(effect, TrackEffect)]) == 1)
212
self.failUnless(len([effect for effect in self.track1.track_objects
213
if isinstance(effect, TrackEffect)]) == 1)
215
self.timeline.removeTimelineObject(self.timeline_object1, deep=True)
164
217
def testTimelineObjectPropertyChange(self):
166
219
def commitCb(action_log, stack, nested):