예제 #1
0
    def test_move_clip(self):
        self._wait_until_project_loaded()

        clip1 = GES.TitleClip()
        clip1.set_start(0 * Gst.SECOND)
        clip1.set_duration(10 * Gst.SECOND)
        clip2 = GES.TitleClip()
        clip2.set_start(5 * Gst.SECOND)
        clip2.set_duration(10 * Gst.SECOND)

        self.layer.add_clip(clip1)
        self.assertEqual(len(self.layer.get_clips()), 1)
        self.layer.add_clip(clip2)
        self.assertEqual(len(self.layer.get_clips()), 3)

        with self.action_log.started("move clip"):
            clip2.set_start(20 * Gst.SECOND)
        self.assertEqual(clip2.get_start(), 20 * Gst.SECOND)
        self.assertEqual(len(self.layer.get_clips()), 2)

        self.action_log.undo()
        self.assertEqual(clip2.get_start(), 5 * Gst.SECOND)
        self.assertEqual(len(self.layer.get_clips()), 3)

        self.action_log.redo()
        self.assertEqual(clip2.get_start(), 20 * Gst.SECOND)
        self.assertEqual(len(self.layer.get_clips()), 2)
def create_project(with_group=False, saved=False):
    """Creates a project with two clips in a group."""
    timeline = GES.Timeline.new_audio_video()
    layer = timeline.append_layer()

    if with_group:
        clip1 = GES.TitleClip()
        clip1.set_start(0)
        clip1.set_duration(10 * Gst.SECOND)
        layer.add_clip(clip1)
        clip2 = GES.TitleClip()
        clip2.set_start(100 * Gst.SECOND)
        clip2.set_duration(10 * Gst.SECOND)
        layer.add_clip(clip2)
        group = GES.Container.group([clip1, clip2])

    if saved:
        if isinstance(saved, str):
            suffix = "-%s.xges" % saved
        else:
            suffix = ".xges"
        uri = "file://%s" % tempfile.NamedTemporaryFile(suffix=suffix).name
        timeline.get_asset().save(timeline, uri, None, overwrite=True)

    return timeline
예제 #3
0
    def test_rollback_of_nested_operation_does_not_add_actions_to_parent(self):
        clip1 = GES.TitleClip()
        clip1.set_start(0 * Gst.SECOND)
        clip1.set_duration(1 * Gst.SECOND)

        clip2 = GES.TitleClip()
        clip2.set_start(1 * Gst.SECOND)
        clip2.set_duration(1 * Gst.SECOND)

        # begin parent operation
        self.action_log.begin("parent")

        # push one parent action
        self.layer.add_clip(clip1)
        stack_snapshot = self.action_log._get_last_stack().done_actions[::]

        # begin nested operation
        self.action_log.begin("nested")

        # push one nested action
        self.layer.add_clip(clip2)

        self.action_log.rollback()
        self.assertListEqual(self.action_log._get_last_stack().done_actions,
                             stack_snapshot)
예제 #4
0
    def clip_dragged_to_create_layer(self, below):
        """Simulates dragging a clip on a separator, without dropping it."""
        self.setup_timeline_container()
        timeline_ui = self.timeline_container.timeline
        layers = self.timeline.get_layers()
        self.assertEqual(len(layers), 1)

        clip = GES.TitleClip()
        self.layer.add_clip(clip)

        # Drag a clip on a separator to create a layer.
        with mock.patch.object(Gtk, "get_event_widget") as get_event_widget:
            get_event_widget.return_value = clip.ui

            event = mock.Mock()
            event.x = 0
            event.get_button.return_value = True, 1
            timeline_ui._button_press_event_cb(None, event)

            def translate_coordinates(widget, x, y):
                return x, y

            clip.ui.translate_coordinates = translate_coordinates
            event = mock.Mock()
            event.get_state.return_value = Gdk.ModifierType.BUTTON1_MASK
            event.x = 1
            if below:
                event.y = LAYER_HEIGHT * 2
            else:
                event.y = -1
            event.get_button.return_value = True, 1
            timeline_ui._motion_notify_event_cb(None, event)

        return clip, event, timeline_ui
예제 #5
0
    def test_layer_added(self):
        self.setup_timeline_container()
        layers = self.timeline.get_layers()
        self.assertEqual(len(layers), 1)

        clip = GES.TitleClip()
        self.layer.add_clip(clip)

        self.timeline_container.add_layer_action.emit("activate", None)

        layers = self.timeline.get_layers()
        self.assertEqual(len(layers), 2)
        self.assertEqual(layers[0], self.layer)
        self.check_layers(layers)
        self.assertEqual(layers[0].get_clips(), [clip])
        self.assertEqual(layers[1].get_clips(), [])

        self.action_log.undo()
        layers = self.timeline.get_layers()
        self.assertEqual(len(layers), 1)
        self.assertEqual(layers[0], self.layer)
        self.check_layers(layers)
        self.assertEqual(layers[0].get_clips(), [clip])

        self.action_log.redo()
        layers = self.timeline.get_layers()
        self.assertEqual(len(layers), 2)
        self.assertEqual(layers[0], self.layer)
        self.check_layers(layers)
        self.assertEqual(layers[0].get_clips(), [clip])
        self.assertEqual(layers[1].get_clips(), [])
예제 #6
0
    def testConnectionAndDisconnection(self):
        timeline = GES.Timeline.new_audio_video()
        layer = GES.Layer()
        timeline.add_layer(layer)
        self.observer.startObserving(timeline)
        self.assertTrue(timeline.connected)

        clip1 = GES.TitleClip()

        layer.add_clip(clip1)
        track_element1 = clip1.get_children(False)[0]
        self.assertTrue(timeline.connected)
        self.assertTrue(clip1.connected)
        self.assertTrue(track_element1.connected)

        layer.remove_clip(clip1)
        self.assertTrue(timeline.connected)
        self.assertFalse(clip1.connected)
        self.assertFalse(track_element1.connected)

        layer.add_clip(clip1)
        track_element2 = clip1.get_children(False)[0]
        self.assertTrue(timeline.connected)
        self.assertTrue(clip1.connected)
        self.assertFalse(track_element1.connected)
        self.assertTrue(track_element2.connected)

        self.observer.stopObserving(timeline)
        self.assertFalse(timeline.connected)
        self.assertFalse(clip1.connected)
        self.assertFalse(track_element1.connected)
        self.assertFalse(track_element2.connected)
예제 #7
0
    def test_effects_index(self):
        stacks = []
        self.action_log.connect("commit", BaseTestUndoTimeline.commit_cb,
                                stacks)

        clip1 = GES.TitleClip()
        self.layer.add_clip(clip1)

        effect1 = GES.Effect.new("agingtv")
        effect2 = GES.Effect.new("edgetv")
        clip1.add(effect1)
        clip1.add(effect2)
        self.assert_effects(clip1, effect1, effect2)

        with self.action_log.started("move effect"):
            assert clip1.set_top_effect_index(effect2, 0)

        self.assertEqual(len(stacks), 1)
        self.assert_effects(clip1, effect2, effect1)

        self.action_log.undo()
        self.assert_effects(clip1, effect1, effect2)

        self.action_log.redo()
        self.assert_effects(clip1, effect2, effect1)
예제 #8
0
    def testClipPropertyChange(self):
        stacks = []
        self.action_log.connect("commit", TestTimelineUndo.commitCb, stacks)

        clip1 = GES.TitleClip()
        self.layer.add_clip(clip1)
        clip1.set_start(5 * Gst.SECOND)
        clip1.set_duration(20 * Gst.SECOND)
        self.layer.add_clip(clip1)
        self.action_log.begin("modify clip")
        clip1.set_start(10 * Gst.SECOND)
        self.action_log.commit()

        self.assertEqual(1, len(stacks))
        stack = stacks[0]
        self.assertEqual(1, len(stack.done_actions))
        action = stack.done_actions[0]
        self.assertTrue(isinstance(action, ClipPropertyChanged))
        self.assertEqual(10 * Gst.SECOND, clip1.get_start())

        self.action_log.undo()
        self.assertEqual(5 * Gst.SECOND, clip1.get_start())
        self.action_log.redo()
        self.assertEqual(10 * Gst.SECOND, clip1.get_start())

        clip1.set_priority(10)
        self.action_log.begin("priority change")
        clip1.set_priority(20)
        self.action_log.commit()

        self.assertEqual(20, clip1.get_priority())
        self.action_log.undo()
        self.assertEqual(10, clip1.get_priority())
        self.action_log.redo()
        self.assertEqual(20, clip1.get_priority())
예제 #9
0
    def testRemoveEffectFromClip(self):
        stacks = []
        self.action_log.connect("commit", BaseTestUndoTimeline.commit_cb, stacks)

        clip1 = GES.TitleClip()
        self.layer.add_clip(clip1)

        effect1 = GES.Effect.new("agingtv")
        with self.action_log.started("add effect"):
            clip1.add(effect1)

        self.assertEqual(1, len(stacks))
        stack = stacks[0]
        self.assertEqual(1, len(stack.done_actions), stack.done_actions)
        action = stack.done_actions[0]
        self.assertTrue(isinstance(action, TrackElementAdded))

        self.assertTrue(effect1 in clip1.get_children(True))
        self.assertEqual(1, len([effect for effect in
                                 clip1.get_children(True)
                                 if isinstance(effect, GES.Effect)]))

        with self.action_log.started("remove effect"):
            clip1.remove(effect1)
        self.assert_effect_count(clip1, 0)

        self.action_log.undo()
        self.assert_effect_count(clip1, 1)

        self.action_log.redo()
        self.assert_effect_count(clip1, 0)
예제 #10
0
    def testClipPropertyChange(self):
        stacks = []
        self.action_log.connect("commit", BaseTestUndoTimeline.commit_cb, stacks)

        # We are not dropping clips here...
        self.app.gui.timeline_ui.timeline.dropping_clips = False

        clip1 = GES.TitleClip()
        clip1.set_start(5 * Gst.SECOND)
        clip1.set_duration(20 * Gst.SECOND)
        self.layer.add_clip(clip1)
        with self.action_log.started("modify clip"):
            clip1.set_start(10 * Gst.SECOND)

        self.assertEqual(1, len(stacks))
        stack = stacks[0]
        self.assertEqual(1, len(stack.done_actions))
        action = stack.done_actions[0]
        self.assertTrue(isinstance(action, PropertyChangedAction))
        self.assertEqual(10 * Gst.SECOND, clip1.get_start())

        self.action_log.undo()
        self.assertEqual(5 * Gst.SECOND, clip1.get_start())
        self.action_log.redo()
        self.assertEqual(10 * Gst.SECOND, clip1.get_start())

        clip1.set_priority(10)
        with self.action_log.started("priority change"):
            clip1.set_priority(20)

        self.assertEqual(20, clip1.get_priority())
        self.action_log.undo()
        self.assertEqual(10, clip1.get_priority())
        self.action_log.redo()
        self.assertEqual(20, clip1.get_priority())
예제 #11
0
    def testAddEffectToClip(self):
        stacks = []
        self.action_log.connect("commit", TestTimelineUndo.commitCb, stacks)

        clip1 = GES.TitleClip()
        self.layer.add_clip(clip1)

        effect1 = GES.Effect.new("agingtv")
        self.action_log.begin("add effect")
        clip1.add(effect1)
        self.action_log.commit()

        self.assertEqual(1, len(stacks))
        stack = stacks[0]
        self.assertEqual(1, len(stack.done_actions), stack.done_actions)
        action = stack.done_actions[0]
        self.assertTrue(isinstance(action, EffectAdded))

        self.assertTrue(effect1 in clip1.get_children(True))
        self.assertEqual(1, len([effect for effect in
                                 clip1.get_children(True)
                                 if isinstance(effect, GES.Effect)]))

        self.action_log.undo()
        self.assertFalse(effect1 in clip1.get_children(True))

        self.action_log.redo()
        self.assertEqual(1, len([effect for effect in
                                 clip1.get_children(True)
                                 if isinstance(effect, GES.Effect)]))
예제 #12
0
    def test_add_effect_to_clip(self):
        stacks = []
        self.action_log.connect("commit", common.TestCase.commit_cb, stacks)

        clip1 = GES.TitleClip()
        self.layer.add_clip(clip1)

        effect1 = GES.Effect.new("agingtv")
        with self.action_log.started("add effect"):
            clip1.add(effect1)

        self.assertEqual(1, len(stacks))
        stack = stacks[0]
        self.assertEqual(1, len(stack.done_actions), stack.done_actions)
        action = stack.done_actions[0]
        self.assertTrue(isinstance(action, TrackElementAdded))

        self.assertTrue(effect1 in clip1.get_children(True))
        self.assertEqual(
            1,
            len([
                effect for effect in clip1.get_children(True)
                if isinstance(effect, GES.Effect)
            ]))

        self.action_log.undo()
        self.assertFalse(effect1 in clip1.get_children(True))

        self.action_log.redo()
        self.assertEqual(
            1,
            len([
                effect for effect in clip1.get_children(True)
                if isinstance(effect, GES.Effect)
            ]))
예제 #13
0
 def create_title_clip_cb(self, unused_button):
     title_clip = GES.TitleClip()
     duration = self.app.settings.titleClipLength * Gst.MSECOND
     title_clip.set_duration(duration)
     with self.app.action_log.started(
             "add title clip",
             finalizing_action=CommitTimelineFinalizingAction(
                 self._project.pipeline),
             toplevel=True):
         self.app.gui.editor.timeline_ui.insert_clips_on_first_layer(
             [title_clip])
         # Now that the clip is inserted in the timeline, it has a source which
         # can be used to set its properties.
         source = title_clip.get_children(False)[0]
         properties = {
             "text": DEFAULT_TEXT,
             "foreground-color": BACKGROUND_DEFAULT_COLOR,
             "color": FOREGROUND_DEFAULT_COLOR,
             "font-desc": DEFAULT_FONT_DESCRIPTION,
             "valignment": DEFAULT_VALIGNMENT,
             "halignment": DEFAULT_HALIGNMENT
         }
         for prop, value in properties.items():
             res = source.set_child_property(prop, value)
             assert res, prop
     self._selection.set_selection([title_clip], SELECT)
예제 #14
0
    def add_clips_separately(self):
        for i in range(3):
            clip = GES.TitleClip()
            clip.set_start(i * Gst.SECOND)
            clip.set_duration(1 * Gst.SECOND)

            with self.action_log.started("add clip {}".format(i)):
                self.layer.add_clip(clip)
예제 #15
0
    def test_effects_index_with_removal(self):
        stacks = []
        self.action_log.connect("commit", BaseTestUndoTimeline.commit_cb,
                                stacks)

        clip1 = GES.TitleClip()
        self.layer.add_clip(clip1)

        effect1 = GES.Effect.new("agingtv")
        effect2 = GES.Effect.new("dicetv")
        effect3 = GES.Effect.new("edgetv")
        with self.action_log.started("Add effect1"):
            clip1.add(effect1)
        with self.action_log.started("Add effect2"):
            clip1.add(effect2)
        with self.action_log.started("Add effect3"):
            clip1.add(effect3)
        self.assert_effects(clip1, effect1, effect2, effect3)
        self.action_log.undo()
        self.assert_effects(clip1, effect1, effect2)
        self.action_log.redo()
        self.assert_effects(clip1, effect1, effect2, effect3)

        with self.action_log.started("Remove effect"):
            assert clip1.remove(effect2)
        self.assertEqual(len(stacks), 4)
        self.assert_effects(clip1, effect1, effect3)

        self.action_log.undo()
        self.assert_effects(clip1, effect1, effect2, effect3)

        self.action_log.redo()
        self.assert_effects(clip1, effect1, effect3)

        self.action_log.undo()
        self.assert_effects(clip1, effect1, effect2, effect3)
        self.action_log.undo()
        self.assert_effects(clip1, effect1, effect2)
        self.action_log.undo()
        self.assert_effects(clip1, effect1)
        self.action_log.undo()
        self.assert_effects(clip1)

        self.action_log.redo()
        self.assert_effects(clip1, effect1)
        self.action_log.redo()
        self.assert_effects(clip1, effect1, effect2)
        self.action_log.redo()
        self.assert_effects(clip1, effect1, effect2, effect3)
        self.action_log.redo()
        self.assert_effects(clip1, effect1, effect3)

        self.action_log.undo()
        self.assert_effects(clip1, effect1, effect2, effect3)
        self.action_log.redo()
        self.assert_effects(clip1, effect1, effect3)
예제 #16
0
    def test_add_effect_change_property(self):
        stacks = []
        self.action_log.connect("commit", BaseTestUndoTimeline.commit_cb,
                                stacks)

        clip1 = GES.TitleClip()
        self.layer.add_clip(clip1)

        effect1 = GES.Effect.new("agingtv")
        with self.action_log.started("add effect"):
            clip1.add(effect1)

        self.assertEqual(1, len(stacks))
        stack = stacks[0]
        self.assertEqual(1, len(stack.done_actions), stack.done_actions)
        action = stack.done_actions[0]
        self.assertTrue(isinstance(action, TrackElementAdded))

        self.assertTrue(effect1 in clip1.get_children(True))
        self.assertEqual(
            1,
            len([
                effect for effect in clip1.get_children(True)
                if isinstance(effect, GES.Effect)
            ]))

        with self.action_log.started("change child property"):
            effect1.set_child_property("scratch-lines", 0)
        self.assertEqual(effect1.get_child_property("scratch-lines")[1], 0)

        # Undo effect property change.
        self.action_log.undo()
        self.assertEqual(effect1.get_child_property("scratch-lines")[1], 7)

        # Redo effect property change.
        self.action_log.redo()
        self.assertEqual(effect1.get_child_property("scratch-lines")[1], 0)

        # Undo effect property change.
        self.action_log.undo()
        self.assertTrue(effect1 in clip1.get_children(True))

        # Undo effect add.
        self.action_log.undo()
        self.assertFalse(effect1 in clip1.get_children(True))

        # Redo effect add.
        self.action_log.redo()
        self.assertTrue(effect1 in clip1.get_children(True))
        self.assertEqual(effect1.get_child_property("scratch-lines")[1], 7)

        # Redo effect property change.
        self.action_log.redo()
        self.assertEqual(effect1.get_child_property("scratch-lines")[1], 0)
예제 #17
0
    def test_clip_dragged_to_create_layer_below(self):
        self.setup_timeline_container()
        timeline_ui = self.timeline_container.timeline
        layers = self.timeline.get_layers()
        self.assertEqual(len(layers), 1)

        clip = GES.TitleClip()
        self.layer.add_clip(clip)

        # Drag a clip on a separator to create a layer.
        with mock.patch.object(Gtk, 'get_event_widget') as get_event_widget:
            get_event_widget.return_value = clip.ui

            event = mock.Mock()
            event.x = 0
            event.get_button.return_value = True, 1
            timeline_ui._button_press_event_cb(None, event)

            def translate_coordinates(widget, x, y):
                return x, y

            clip.ui.translate_coordinates = translate_coordinates
            event = mock.Mock()
            event.get_state.return_value = Gdk.ModifierType.BUTTON1_MASK
            event.x = 1
            event.y = LAYER_HEIGHT * 2
            event.get_button.return_value = True, 1
            timeline_ui._motion_notify_event_cb(None, event)

        timeline_ui._button_release_event_cb(None, event)

        layers = self.timeline.get_layers()
        self.assertEqual(len(layers), 2)
        self.assertEqual(layers[0], self.layer)
        self.check_layers(layers)
        self.assertEqual(layers[0].get_clips(), [])
        self.assertEqual(layers[1].get_clips(), [clip])

        self.action_log.undo()
        layers = self.timeline.get_layers()
        self.assertEqual(len(layers), 1)
        self.assertEqual(layers[0], self.layer)
        self.check_layers(layers)
        self.assertEqual(layers[0].get_clips(), [clip])

        self.action_log.redo()
        layers = self.timeline.get_layers()
        self.assertEqual(len(layers), 2)
        self.assertEqual(layers[0], self.layer)
        self.check_layers(layers)
        self.assertEqual(layers[0].get_clips(), [])
        self.assertEqual(layers[1].get_clips(), [clip])
예제 #18
0
 def _createCb(self, unused_button):
     """
     The user clicked the "Create and insert" button, initialize the UI
     """
     clip = GES.TitleClip()
     clip.set_text("")
     clip.set_duration(int(Gst.SECOND * 5))
     clip.set_color(FOREGROUND_DEFAULT_COLOR)
     clip.set_background(BACKGROUND_DEFAULT_COLOR)
     # TODO: insert on the current layer at the playhead position.
     # If no space is available, create a new layer to insert to on top.
     self.app.gui.timeline_ui.insertEnd([clip])
     self.app.gui.timeline_ui.timeline.selection.setToObj(clip, SELECT)
예제 #19
0
    def testTrackElementPropertyChanged(self):
        clip1 = GES.TitleClip()
        self.layer.add_clip(clip1)

        with self.action_log.started("Title text change"):
            source = clip1.get_children(False)[0]
            source.set_child_property("text", "pigs fly!")
            self.assertEqual(source.get_child_property("text")[1], "pigs fly!")

        self.action_log.undo()
        self.assertEqual(source.get_child_property("text")[1], "")
        self.action_log.redo()
        self.assertEqual(source.get_child_property("text")[1], "pigs fly!")
예제 #20
0
def create_project(with_group=False, saved=False):
    """Creates a project with two clips in a group."""
    project = GES.Project()
    timeline = project.extract()
    layer = timeline.append_layer()

    if with_group:
        clip1 = GES.TitleClip()
        clip1.set_start(0)
        clip1.set_duration(10)
        layer.add_clip(clip1)
        clip2 = GES.TitleClip()
        clip2.set_start(100)
        clip2.set_duration(10)
        layer.add_clip(clip2)
        group = GES.Container.group([clip1, clip2])

    if saved:
        uri = "file://%s" % tempfile.NamedTemporaryFile(suffix=".xges").name
        project.save(timeline, uri, None, overwrite=True)

    return timeline
예제 #21
0
    def test_update_clips_asset(self):
        timeline_container = common.create_timeline_container()
        mainloop = common.create_main_loop()
        mainloop.run(until_empty=True)
        ges_timeline = timeline_container.ges_timeline
        layer, = ges_timeline.get_layers()
        title_clip = GES.TitleClip()
        title_clip.props.duration = 100
        layer.add_clip(title_clip)
        self.assertListEqual(list(timeline_container.timeline.clips()),
                             [title_clip])

        # Check the title clips are ignored.
        timeline_container.update_clips_asset(mock.Mock())
예제 #22
0
    def test_add_clip(self):
        clip1 = GES.TitleClip()
        with self.action_log.started("add clip"):
            self.layer.add_clip(clip1)

        stack, = self.action_log.undo_stacks
        self.assertEqual(len(stack.done_actions), 2, stack.done_actions)
        self.assertTrue(isinstance(stack.done_actions[0], ClipAdded))
        self.assertTrue(clip1 in self.getTimelineClips())

        self.action_log.undo()
        self.assertFalse(clip1 in self.getTimelineClips())

        self.action_log.redo()
        self.assertTrue(clip1 in self.getTimelineClips())
예제 #23
0
 def test_switch_context_tab(self):
     """Checks tab switches."""
     app = common.create_pitivi_mock()
     editorperspective = EditorPerspective(app)
     editorperspective.setup_ui()
     for expected_tab, b_element in [(2, GES.TitleClip()),
                                     (0, GES.SourceClip()),
                                     (1, GES.TransitionClip())]:
         editorperspective.switchContextTab(b_element)
         self.assertEqual(editorperspective.context_tabs.get_current_page(),
                          expected_tab, b_element)
         # Make sure the tab does not change when using an invalid argument.
         editorperspective.switchContextTab("invalid")
         self.assertEqual(editorperspective.context_tabs.get_current_page(),
                          expected_tab)
예제 #24
0
 def _createCb(self, unused_button):
     """
     The user clicked the "Create and insert" button, initialize the UI
     """
     source = GES.TitleClip()
     source.set_text("")
     source.set_duration(long(Gst.SECOND * 5))
     self.set_source(source, True)
     # TODO: insert on the current layer at the playhead position.
     # If no space is available, create a new layer to insert to on top.
     self.app.gui.timeline_ui.insertEnd([self.source])
     self.app.gui.timeline_ui.timeline.selection.setToObj(
         self.source, SELECT)
     #After insertion consider as not created
     self.created = False
예제 #25
0
 def _createCb(self, unused_button):
     clip = GES.TitleClip()
     clip.set_duration(int(Gst.SECOND * 5))
     self.app.gui.timeline_ui.insertClips([clip])
     # Now that the clip is inserted in the timeline, it has a source which
     # can be used to set its properties.
     source = clip.get_children(False)[0]
     assert source.set_child_property("text", "")
     assert source.set_child_property("foreground-color",
                                      BACKGROUND_DEFAULT_COLOR)
     assert source.set_child_property("color", FOREGROUND_DEFAULT_COLOR)
     assert source.set_child_property("font-desc", DEFAULT_FONT_DESCRIPTION)
     assert source.set_child_property("valignment", DEFAULT_VALIGNMENT)
     assert source.set_child_property("halignment", DEFAULT_HALIGNMENT)
     # Select it so the Title editor becomes active.
     self._selection.setSelection([clip], SELECT)
예제 #26
0
    def test_switch_context_tab(self):
        """Checks tab switches."""
        app = common.create_pitivi_mock()
        mainwindow = MainWindow(app)
        for expected_tab, b_element in [(2, GES.TitleClip()),
                                        (0, GES.SourceClip()),
                                        (1, GES.TransitionClip())]:
            mainwindow.switchContextTab(b_element)
            self.assertEqual(mainwindow.context_tabs.get_current_page(),
                             expected_tab, b_element)
            # Make sure the tab does not change when using an invalid argument.
            mainwindow.switchContextTab("invalid")
            self.assertEqual(mainwindow.context_tabs.get_current_page(),
                             expected_tab)

        mainwindow.destroy()
예제 #27
0
    def test_effect_toggling(self):
        clip1 = GES.TitleClip()
        self.layer.add_clip(clip1)

        effect1 = GES.Effect.new("agingtv")
        with self.action_log.started("add effect"):
            clip1.add(effect1)
        self.assertTrue(effect1.props.active)
        self.assert_effect_count(clip1, 1)

        with self.action_log.started("toggle effect"):
            effect1.props.active = False
        self.assertFalse(effect1.props.active)

        with self.action_log.started("remove effect"):
            clip1.remove(effect1)
        self.assert_effect_count(clip1, 0)

        # Undo effect removing.
        self.action_log.undo()
        self.assert_effect_count(clip1, 1)

        # Undo effect toggling.
        self.action_log.undo()
        self.assertTrue(effect1.props.active)

        # Redo effect toggling.
        self.action_log.redo()
        self.assertFalse(effect1.props.active)

        # Undo effect toggling.
        self.action_log.undo()
        self.assertTrue(effect1.props.active)

        # Undo effect add.
        self.action_log.undo()
        self.assertFalse(effect1 in clip1.get_children(True))

        # Redo effect add.
        self.action_log.redo()
        self.assertTrue(effect1 in clip1.get_children(True))
        self.assertTrue(effect1.props.active)

        # Redo effect toggling.
        self.action_log.redo()
        self.assertFalse(effect1.props.active)
예제 #28
0
 def _createCb(self, unused_button):
     title_clip = GES.TitleClip()
     duration = self.app.settings.titleClipLength * Gst.MSECOND
     title_clip.set_duration(duration)
     self.app.gui.editor.timeline_ui.insert_clips_on_first_layer([title_clip])
     # Now that the clip is inserted in the timeline, it has a source which
     # can be used to set its properties.
     source = title_clip.get_children(False)[0]
     assert source.set_child_property("text", "")
     assert source.set_child_property("foreground-color", BACKGROUND_DEFAULT_COLOR)
     assert source.set_child_property("color", FOREGROUND_DEFAULT_COLOR)
     assert source.set_child_property("font-desc", DEFAULT_FONT_DESCRIPTION)
     assert source.set_child_property("valignment", DEFAULT_VALIGNMENT)
     assert source.set_child_property("halignment", DEFAULT_HALIGNMENT)
     # Select it so the Title editor becomes active.
     self._selection.setSelection([title_clip], SELECT)
     self.app.gui.editor.timeline_ui.timeline.resetSelectionGroup()
     self.app.gui.editor.timeline_ui.timeline.current_group.add(title_clip)
예제 #29
0
    def testGetSingleClip(self):
        selection = Selection()
        clip1 = GES.UriClip()
        clip2 = GES.TitleClip()

        # Selection empty.
        self.assertFalse(selection.getSingleClip(GES.TitleClip))

        # Selection contains only a non-requested-type clip.
        selection.setSelection([clip1], SELECT)
        self.assertFalse(selection.getSingleClip(GES.TitleClip))

        # Selection contains only requested-type clip.
        selection.setSelection([clip2], SELECT)
        self.assertEqual(clip2, selection.getSingleClip(GES.TitleClip))

        # Selection contains more than one clip.
        selection.setSelection([clip1, clip2], SELECT)
        self.assertFalse(selection.getSingleClip(GES.UriClip))
예제 #30
0
    def test_property_change(self):
        action_log = UndoableActionLog()
        action_log.begin("complex stuff")
        stack, = action_log.stacks

        clip = GES.TitleClip()
        unused_observer = GObjectObserver(clip, ["start"], action_log)

        self.assertEqual(len(stack.done_actions), 0)
        clip.props.start = 2
        self.assertEqual(len(stack.done_actions), 1)

        clip.props.start = 2
        self.assertEqual(len(stack.done_actions), 1)

        clip.props.start = 4
        self.assertEqual(len(stack.done_actions), 2)
        action = stack.done_actions[-1]
        self.assertEqual(action.old_value, 2)
        self.assertEqual(action.new_value, 4)