pitivi r1142 - in branches/SOC_2008_BLEWIS: . pitivi/ui



Author: blewis
Date: Sat Jun  7 23:47:36 2008
New Revision: 1142
URL: http://svn.gnome.org/viewvc/pitivi?rev=1142&view=rev

Log:
reviewed by: <delete if not using a buddy>
* pitivi/ui/complextimeline.py:
screwed up hadjustment code, so scrollong no longer works. Necessary
changes due to refactoring TimelineWidget.
* pitivi/ui/mainwindow.py:
Removed references to _displayTimeline which have become somewhat.
* pitivi/ui/timeline.py:
eliminated SimpleTimelineContentWidget, which has become redundant.
Informational messages will be displayed directly within
SimpleTimelineCanvas.
* pitivi/ui/timelineobjects.py:
Added SimpleTimelineWidget class which wraps SimpleTimeline in a
scrolled window. Renamed SimpleTimeline to SimpleTimelineCanvas.
moved editing mode code to SimpleTimelineWidget, so editing widget is
not contained within scrolled window or canvas. SimpleTimelineCanvas
passes new emits "edit-me" signal when it receives "edit-me" signal
from TimelineList.


Modified:
   branches/SOC_2008_BLEWIS/ChangeLog
   branches/SOC_2008_BLEWIS/pitivi/ui/complextimeline.py
   branches/SOC_2008_BLEWIS/pitivi/ui/mainwindow.py
   branches/SOC_2008_BLEWIS/pitivi/ui/timeline.py
   branches/SOC_2008_BLEWIS/pitivi/ui/timelineobjects.py

Modified: branches/SOC_2008_BLEWIS/pitivi/ui/complextimeline.py
==============================================================================
--- branches/SOC_2008_BLEWIS/pitivi/ui/complextimeline.py	(original)
+++ branches/SOC_2008_BLEWIS/pitivi/ui/complextimeline.py	Sat Jun  7 23:47:36 2008
@@ -117,14 +117,14 @@
 
 class ComplexTimelineWidget(gtk.VBox, ZoomableWidgetInterface):
 
-    def __init__(self, topwidget):
+    def __init__(self):
         gst.log("Creating ComplexTimelineWidget")
         gtk.VBox.__init__(self)
 
         self.zoomratio = 10.0
 
-        self.hadj = topwidget.hadjustment
-        self.vadj = topwidget.vadjustment
+        self.hadj = gtk.Adjustment()
+        self.vadj = gtk.Adjustment()
 
         # common LayerInfoList
         self.layerInfoList = LayerInfoList(instance.PiTiVi.current.timeline)
@@ -152,8 +152,8 @@
                                                    self.hadj, self.layerInfoList)
 
         # ... in a scrolled window
-        self.scrolledWindow = gtk.ScrolledWindow()
-        self.scrolledWindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+        self.scrolledWindow = gtk.ScrolledWindow(self.hadj, self.vadj)
+        self.scrolledWindow.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_AUTOMATIC)
         self.scrolledWindow.add_with_viewport(self.compositionLayers)
         self.pack_start(self.scrolledWindow, expand=True)
 

Modified: branches/SOC_2008_BLEWIS/pitivi/ui/mainwindow.py
==============================================================================
--- branches/SOC_2008_BLEWIS/pitivi/ui/mainwindow.py	(original)
+++ branches/SOC_2008_BLEWIS/pitivi/ui/mainwindow.py	Sat Jun  7 23:47:36 2008
@@ -109,8 +109,6 @@
         if not isinstance(instance.PiTiVi.playground.current, SmartTimelineBin):
             return
         self.render_button.set_sensitive((duration > 0) and True or False)
-        if duration > 0 :
-            gobject.idle_add(self.timeline.simpleview._displayTimeline)
 
     def _currentPlaygroundChangedCb(self, playground, smartbin):
         if smartbin == playground.default:
@@ -123,7 +121,6 @@
                                                             self._timelineDurationChangedCb)
                 if smartbin.project.timeline.videocomp.duration > 0:
                     self.render_button.set_sensitive(True)
-                    gobject.idle_add(self.timeline.simpleview._displayTimeline)
                 else:
                     self.render_button.set_sensitive(False)
             else:
@@ -294,9 +291,9 @@
     ## Project source list callbacks
 
     def _sourcesFileAddedCb(self, unused_sources, unused_factory):
-        if len(self.sourcefactories.sourcelist.storemodel) == 1 and not len(instance.PiTiVi.current.timeline.videocomp):
-            self.timeline.simpleview._displayTimeline(False)
-
+        #if (len(self.sourcefactories.sourcelist.storemodel) == 1 
+        #    and not len(instance.PiTiVi.current.timeline.videocomp):
+        pass
 
     ## UI Callbacks
 

Modified: branches/SOC_2008_BLEWIS/pitivi/ui/timeline.py
==============================================================================
--- branches/SOC_2008_BLEWIS/pitivi/ui/timeline.py	(original)
+++ branches/SOC_2008_BLEWIS/pitivi/ui/timeline.py	Sat Jun  7 23:47:36 2008
@@ -34,7 +34,7 @@
 import pitivi.instance as instance
 import pitivi.dnd as dnd
 
-from timelineobjects import SimpleTimeline
+from timelineobjects import SimpleTimelineWidget
 from complextimeline import ComplexTimelineWidget
 
 class TimelineWidget(gtk.VBox):
@@ -47,17 +47,8 @@
 
     def _createUi(self):
         """ draw the GUI """
-        self.hadjustment = gtk.Adjustment()
-        self.vadjustment = gtk.Adjustment()
-
-        self.simpleview = SimpleTimelineContentWidget(self)
-        self.complexview = ComplexTimelineWidget(self)
-
-        self.simpleview.connect("scroll-event", self._simpleScrollCb)
-        self.complexview.connect("scroll-event", self._simpleScrollCb)
-
-        self.hscroll = gtk.HScrollbar(self.hadjustment)
-        self.pack_end(self.hscroll, expand=False)
+        self.simpleview = SimpleTimelineWidget()
+        self.complexview = ComplexTimelineWidget()
 
     def showSimpleView(self):
         """ Show the simple timeline """
@@ -79,94 +70,3 @@
         gst.debug("state:%s" % event.state)
         self.hscroll.emit("scroll-event", event)
 
-class SimpleTimelineContentWidget(gtk.HBox):
-    """ Widget for Simple Timeline content display """
-    def __init__(self, twidget):
-        """ init """
-        self.twidget = twidget
-        gtk.HBox.__init__(self)
-        self._createUi()
-        self.show_all()
-
-    def _createUi(self):
-        """ draw the GUI """
-
-        # (A) real simple timeline
-        self.timeline = SimpleTimeline(hadjustment = self.twidget.hadjustment)
-        self.layoutframe = gtk.Frame()
-        self.layoutframe.add(self.timeline)
-
-
-        # (B) Explanatory message label
-        self.messageframe = gtk.Frame()
-        self.messageframe.set_shadow_type(gtk.SHADOW_ETCHED_IN)
-        self.messageframe.show()
-
-        self.textbox = gtk.EventBox()
-        self.textbox.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('white'))
-        self.textbox.add_events(gtk.gdk.ENTER_NOTIFY_MASK)
-        self.textbox.show()
-        self.messageframe.add(self.textbox)
-
-        txtlabel = gtk.Label()
-        txtlabel.set_padding(10, 10)
-        txtlabel.set_line_wrap(True)
-        txtlabel.set_line_wrap_mode(pango.WRAP_WORD)
-        txtlabel.set_justify(gtk.JUSTIFY_CENTER)
-        txtlabel.set_markup(
-            _("<span size='x-large'>Add clips to the timeline by dragging them here.</span>"))
-        self.textbox.add(txtlabel)
-        self.txtlabel = txtlabel
-
-        self.pack_start(self.messageframe, expand=True, fill=True)
-        self.reorder_child(self.messageframe, 0)
-        self.motionSigId = self.textbox.connect("drag-motion", self._dragMotionCb)
-        self.textbox.drag_dest_set(gtk.DEST_DEFAULT_DROP | gtk.DEST_DEFAULT_MOTION,
-                                   [dnd.URI_TUPLE, dnd.FILE_TUPLE],
-                                   gtk.gdk.ACTION_COPY)
-
-        self.showingTimeline = False
-        self._displayTimeline()
-
-    def _dragMotionCb(self, unused_layout, unused_context, unused_x, unused_y,
-                      unused_timestamp):
-        gst.log("motion...")
-        self.showingTimeline = False
-        gobject.idle_add(self._displayTimeline)
-
-    def _dragLeaveCb(self, unused_layout, unused_context, unused_timestamp):
-        gst.log("leave...")
-        if len(instance.PiTiVi.current.timeline.videocomp):
-            return
-        self.showingTimeline = True
-        gobject.idle_add(self._displayTimeline, False)
-
-    def _displayTimeline(self, displayed=True):
-        if displayed:
-            if self.showingTimeline:
-                return
-            gst.debug("displaying timeline")
-            self.remove(self.messageframe)
-            self.txtlabel.hide()
-            self.textbox.disconnect(self.motionSigId)
-            self.motionSigId = None
-            self.pack_start(self.layoutframe)
-            self.reorder_child(self.layoutframe, 0)
-            self.layoutframe.show_all()
-            self.dragLeaveSigId = self.timeline.connect("drag-leave", self._dragLeaveCb)
-            self.showingTimeline = True
-        else:
-            if not self.showingTimeline:
-                return
-            # only hide if there's nothing left in the timeline
-            if not len(instance.PiTiVi.current.timeline.videocomp):
-                gst.debug("hiding timeline")
-                self.timeline.disconnect(self.dragLeaveSigId)
-                self.dragLeaveSigId = None
-                self.remove(self.layoutframe)
-                self.layoutframe.hide()
-                self.pack_start(self.messageframe)
-                self.reorder_child(self.messageframe, 0)
-                self.txtlabel.show()
-                self.motionSigId = self.textbox.connect("drag-motion", self._dragMotionCb)
-                self.showingTimeline = False

Modified: branches/SOC_2008_BLEWIS/pitivi/ui/timelineobjects.py
==============================================================================
--- branches/SOC_2008_BLEWIS/pitivi/ui/timelineobjects.py	(original)
+++ branches/SOC_2008_BLEWIS/pitivi/ui/timelineobjects.py	Sat Jun  7 23:47:36 2008
@@ -72,7 +72,101 @@
     hours = mins / 60
     return "%02d:%02d:%02d.%03d" % (hours, mins, sec, ms)
 
+class SimpleTimelineWidget(gtk.HBox):
+    """Contains the editing widget as well as a gtk.ScrolledWindow containing
+    the simple timeline canvas. Handles showing/hiding the editing widget and
+    canvas."""
+
+    __gtype_name__ = 'SimpleTimelineWidget'
+
+    def __init__(self, *args, **kwargs):
+        gtk.HBox.__init__(self, *args, **kwargs)
+        timeline = SimpleTimelineCanvas()
+        timeline.connect("edit-me", self._editMeCb)
+
+        self.content = gtk.ScrolledWindow()
+        self.content.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_NEVER)
+        self.content.add(timeline)
+        #add other objects here
+        self.add(self.content)
+
+        # edit-mode
+        # True when in editing mode
+        self._editingMode = False
+        self.editingWidget = SimpleEditingWidget()
+        self.editingWidget.connect("hide-me", self._editingWidgetHideMeCb)
+
+        instance.PiTiVi.connect("project-closed", self._projectClosedCb)
+        instance.PiTiVi.connect("new-project-failed",
+            self._newProjectFailedCb)
+
+    def _editMeCb(self, unused_timeline, element):
+        self._switchEditingMode(element)
+
+    def _editingWidgetHideMeCb(self, unused_widget):
+        self.switchToNormalMode()
+        # switch back to timeline in playground !
+        instance.PiTiVi.playground.switchToTimeline()
+
+    def _newProjectFailedCb(self, unused_inst, unused_reason, unused_uri):
+        self.switchToNormalMode()
+
+    def _projectClosedCb(self, unused_pitivi, unused_project):
+        self.switchToNormalMode()
+
+    def _switchEditingMode(self, source, mode=True):
+        """ Switch editing mode for the given TimelineSource """
+        gst.log("source:%s , mode:%s" % (source, mode))
+
+        if self._editingMode == mode:
+            gst.warning("We were already in correct editing mode : %s" % 
+                mode)
+            return
+
+        if mode and not source:
+            gst.warning("You need to specify a valid TimelineSource")
+            return
+
+        if mode:
+            # switching TO editing mode
+            gst.log("Switching TO editing mode")
+
+            # 1. Hide all sources
+            self.remove(self.content)
+            self.content.hide()
+            self._editingMode = mode
+
+            # 2. Show editing widget
+            self.editingWidget.setSource(source)
+            self.add(self.editingWidget)
+            self.editingWidget.show_all()
+
+        else:
+            gst.log("Switching back to normal mode")
+            # switching FROM editing mode
+
+            # 1. Hide editing widget
+            self.remove(self.editingWidget)
+            self.editingWidget.hide()
+            self._editingMode = mode
+
+            # 2. Show all sources
+            self.add(self.content)
+            self.content.show_all()
+
+    def switchToEditingMode(self, source):
+        """ Switch to Editing mode for the given TimelineSource """
+        self._switchEditingMode(source)
+
+    def switchToNormalMode(self):
+        """ Switch back to normal timeline mode """
+        self._switchEditingMode(None, False)
+
+
 class TimelineList(HList):
+    """A dynamically re-orderable group of items which knows about pitivi
+    timeline objects. Connects only to the video composition of the
+    timeline"""
     __gtype_name__ = 'TimelineList'
 
     __gsignals__ = {
@@ -160,10 +254,22 @@
     def _sourceEditMeCb(self, unused_widget, element):
         self.emit("edit-me", element)
 
-class SimpleTimeline(goocanvas.Canvas):
+class SimpleTimelineCanvas(goocanvas.Canvas):
+    """goocanvas.Canvas derivative which contains all the widgets used in the
+    simple timeline that should be scrolled together. It handles application event
+    like loading/saving, and external drag-and-drop events for adding objects 
+    to the canvas"""
+
     __gtype_name__ = 'SimpleTimeline'
 
-    def __init__(self, hadjustment=None, vadjustment=None, *args, **kwargs):
+    __gsignals__ = {
+        'edit-me' : (gobject.SIGNAL_RUN_LAST,
+                     gobject.TYPE_NONE,
+                     (gobject.TYPE_PYOBJECT,))
+        }
+
+
+    def __init__(self, *args, **kwargs):
         goocanvas.Canvas.__init__(self, *args, **kwargs)
         self.props.automatic_bounds = False
 
@@ -188,13 +294,6 @@
         self.scale = 1.0
         self.set_size_request(int(MINIMUM_WIDTH), int(MINIMUM_HEIGHT))
 
-        # edit-mode
-        # True when in editing mode
-        self._editingMode = False
-        self.editingWidget = SimpleEditingWidget()
-        self.editingCanvasItem = goocanvas.Widget(widget=self.editingWidget)
-        self.editingWidget.connect("hide-me", self._editingWidgetHideMeCb)
-
         instance.PiTiVi.connect("new-project-loaded",
             self._newProjectLoadedCb)
         instance.PiTiVi.connect("project-closed", self._projectClosedCb)
@@ -224,8 +323,6 @@
         if height > 0:
             self.scale = allocation.height / height
             self.set_scale(self.scale)
-        self.editingCanvasItem.props.width = allocation.width
-        self.editingCanvasItem.props.height = allocation.height
         return True
 
 ## Project callbacks
@@ -247,7 +344,6 @@
         self._clearTimeline()
 
     def _clearTimeline(self):
-        self.switchToNormalMode()
         self.items.set_timeline(None)
         self.items.remove_all()
 
@@ -309,59 +405,8 @@
 
 ## Editing mode
 
-
     def _editMeCb(self, timeline, element):
-        self._switchEditingMode(element)
-
-    def _editingWidgetHideMeCb(self, unused_widget):
-        self.switchToNormalMode()
-        # switch back to timeline in playground !
-        instance.PiTiVi.playground.switchToTimeline()
-
-    def _switchEditingMode(self, source, mode=True):
-        """ Switch editing mode for the given TimelineSource """
-        gst.log("source:%s , mode:%s" % (source, mode))
-
-        if self._editingMode == mode:
-            gst.warning("We were already in correct editing mode : %s" % 
-                mode)
-            return
-
-        if mode and not source:
-            gst.warning("You need to specify a valid TimelineSource")
-            return
-
-        if mode:
-            # switching TO editing mode
-            gst.log("Switching TO editing mode")
-
-            # 1. Hide all sources
-            self.items.remove()
-            self._editingMode = mode
-
-            # 2. Show editing widget
-            self.editingWidget.setSource(source)
-            self.root.add_child(self.editingCanvasItem)
-
-        else:
-            gst.log("Switching back to normal mode")
-            # switching FROM editing mode
-
-            # 1. Hide editing widget
-            self.editingCanvasItem.remove()
-            self._editingMode = mode
-
-            # 2. Show all sources
-            self.root.add_child(self.items)
-
-    def switchToEditingMode(self, source):
-        """ Switch to Editing mode for the given TimelineSource """
-        self._switchEditingMode(source)
-
-    def switchToNormalMode(self):
-        """ Switch back to normal timeline mode """
-        self._switchEditingMode(None, False)
-
+        self.emit("edit-me", element)
 
 class SimpleEditingWidget(gtk.EventBox):
     """



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]