[pitivi/ges: 183/287] timeline: remove timelinecontrols, and mobe its content around



commit 0b50a18262588e0cdb892de6c824f14acdcf0a17
Author: Thibault Saunier <thibault saunier collabora com>
Date:   Tue Jan 10 16:26:18 2012 -0300

    timeline: remove timelinecontrols, and mobe its content around

 pitivi/timeline/Makefile.am         |    1 -
 pitivi/timeline/timeline.py         |   49 ++++++++++++++++-
 pitivi/timeline/timelinecontrols.py |  102 -----------------------------------
 pitivi/timeline/track.py            |   56 +++++++++++++++++++
 po/POTFILES.in                      |    1 -
 5 files changed, 103 insertions(+), 106 deletions(-)
---
diff --git a/pitivi/timeline/Makefile.am b/pitivi/timeline/Makefile.am
index 51c97a7..7c1b087 100644
--- a/pitivi/timeline/Makefile.am
+++ b/pitivi/timeline/Makefile.am
@@ -3,7 +3,6 @@ timelinedir = $(libdir)/pitivi/python/pitivi/timeline
 timeline_PYTHON =			\
 	__init__.py		\
 	timelinecanvas.py	\
-	timelinecontrols.py	\
 	timeline.py		\
 	trackobject.py		\
 	track.py	\
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 9c3ba4b..2e1bf80 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -20,7 +20,7 @@
 # Boston, MA 02110-1301, USA.
 
 """
-Timeline widgets for the complex view
+    Main Timeline widgets
 """
 
 import gtk
@@ -35,7 +35,7 @@ from pitivi.check import soft_deps
 from pitivi.effects import AUDIO_EFFECT, VIDEO_EFFECT
 
 from timelinecanvas import TimelineCanvas
-from timelinecontrols import TimelineControls
+from track import TrackControls, TRACK_CONTROL_WIDTH
 
 from pitivi.ui.depsmanager import DepsManager
 from pitivi.ui.filelisterrordialog import FileListErrorDialog
@@ -121,6 +121,51 @@ ui = '''
 '''
 
 
+class TimelineControls(gtk.VBox, Loggable):
+    """Contains the timeline track names."""
+
+    def __init__(self):
+        gtk.VBox.__init__(self)
+        Loggable.__init__(self)
+        self._tracks = []
+        self._timeline = None
+        self.set_spacing(LAYER_SPACING)
+        self.set_size_request(TRACK_CONTROL_WIDTH, -1)
+
+## Timeline callbacks
+
+    def getTimeline(self):
+        return self._timeline
+
+    def setTimeline(self, timeline):
+        self.debug("Setting timeline %s", timeline)
+
+        while self._tracks:
+            self._trackRemovedCb(None, 0)
+
+        if self._timeline:
+            for track in self._timeline.get_tracks():
+                self._trackAddedCb(None, track)
+
+            self._timeline.connect("track-added", self._trackAddedCb)
+            self._timeline.connect("track-removed", self._trackRemovedCb)
+
+    timeline = property(getTimeline, setTimeline, None, "The timeline property")
+
+    def _trackAddedCb(self, timeline, track):
+        track = TrackControls(track)
+        self._tracks.append(track)
+        self.pack_start(track, False, False)
+        track.show()
+
+    def _trackRemovedCb(self, unused_timeline, position):
+        self.timeline.disconnect_by_function(self._trackAddedCb)
+        self.timeline.disconnect_by_function(self._trackRemovedCb)
+        track = self._tracks[position]
+        del self._tracks[position]
+        self.remove(track)
+
+
 class InfoStub(gtk.HBox, Loggable):
     """
     Box used to display information on the current state of the timeline
diff --git a/pitivi/timeline/track.py b/pitivi/timeline/track.py
index bdf33ed..8e2ed0e 100644
--- a/pitivi/timeline/track.py
+++ b/pitivi/timeline/track.py
@@ -23,6 +23,9 @@
 import goocanvas
 import ges
 import gobject
+import gtk
+
+from gettext import gettext as _
 
 from pitivi.utils.loggable import Loggable
 from pitivi.utils.timeline import Zoomable
@@ -32,6 +35,59 @@ from pitivi.utils.ui import LAYER_HEIGHT_EXPANDED,\
 
 from pitivi.timeline.trackobject import TrackObject
 
+TRACK_CONTROL_WIDTH = 75
+
+
+class TrackControls(gtk.Label, Loggable):
+    """Contains a timeline track name.
+
+    @ivar track: The track for which to display the name.
+    @type track: An L{pitivi.timeline.track.Track} object
+    """
+
+    __gtype_name__ = 'TrackControls'
+
+    def __init__(self, track):
+        gtk.Label.__init__(self)
+        Loggable.__init__(self)
+        # Center the label horizontally.
+        self.set_alignment(0.5, 0)
+        # The value below is arbitrarily chosen so the text appears
+        # centered vertically when the represented track has a single layer.
+        self.set_padding(0, LAYER_SPACING * 2)
+        self.set_markup(self._getTrackName(track))
+        self.track = track
+        self._setSize(layers_count=1)
+
+    def _setTrack(self):
+        if self.track:
+            self._maxPriorityChanged(None, self.track.max_priority)
+
+    # FIXME Stop using the receiver
+    #
+    # TODO implement in GES
+    #track = receiver(_setTrack)
+    # handler(track, "max-priority-changed")
+    #def _maxPriorityChanged(self, track, max_priority):
+    #    self._setSize(max_priority + 1)
+
+    def _setSize(self, layers_count):
+        assert layers_count >= 1
+        height = layers_count * (LAYER_HEIGHT_EXPANDED + LAYER_SPACING)
+        self.set_size_request(TRACK_CONTROL_WIDTH, height)
+
+    @staticmethod
+    def _getTrackName(track):
+        track_name = ""
+        #FIXME check that it is the best way to check the type
+        if track.props.track_type.first_value_name == 'GES_TRACK_TYPE_AUDIO':
+            track_name = _("Audio:")
+        elif track.props.track_type.first_value_name == 'GES_TRACK_TYPE_VIDEO':
+            track_name = _("Video:")
+        elif track.props.track_type.first_value_name == 'GES_TRACK_TYPE_TEXT':
+            track_name = _("Text:")
+        return "<b>%s</b>" % track_name
+
 
 class Transition(goocanvas.Rect, Zoomable):
 
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ca00d2f..f5a4f25 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -22,7 +22,6 @@ pitivi/settings.py
 pitivi/medialibrary.py
 
 pitivi/timeline/timelinecanvas.py
-pitivi/timeline/timelinecontrols.py
 pitivi/timeline/timeline.py
 pitivi/timeline/trackobject.py
 



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