2
from pitivi.receiver import receiver, handler
3
import pitivi.stream as stream
4
from gettext import gettext as _
5
from common import LAYER_HEIGHT_EXPANDED, LAYER_SPACING
7
TRACK_CONTROL_WIDTH = 75
10
class TrackControls(gtk.Label):
11
"""Contains a timeline track name.
13
@ivar track: The track for which to display the name.
14
@type track: An L{pitivi.timeline.track.Track} object
17
__gtype_name__ = 'TrackControls'
19
def __init__(self, track):
20
gtk.Label.__init__(self)
21
# Center the label horizontally.
22
self.set_alignment(0.5, 0)
23
# The value below is arbitrarily chosen so the text appears
24
# centered vertically when the represented track has a single layer.
25
self.set_padding(0, LAYER_SPACING * 2)
26
self.set_markup(self._getTrackName(track))
28
self._setSize(layers_count=1)
32
self._maxPriorityChanged(None, self.track.max_priority)
34
track = receiver(_setTrack)
36
@handler(track, "max-priority-changed")
37
def _maxPriorityChanged(self, track, max_priority):
38
self._setSize(max_priority + 1)
40
def _setSize(self, layers_count):
41
assert layers_count >= 1
42
height = layers_count * (LAYER_HEIGHT_EXPANDED + LAYER_SPACING)
43
self.set_size_request(TRACK_CONTROL_WIDTH, height)
46
def _getTrackName(track):
47
stream_type = type(track.stream)
48
if stream_type == stream.AudioStream:
49
track_name = _("Audio:")
50
elif stream_type == stream.VideoStream:
51
track_name = _("Video:")
52
elif stream_type == stream.TextStream:
53
track_name = _("Text:")
54
return "<b>%s</b>" % track_name
57
class TimelineControls(gtk.VBox):
58
"""Contains the timeline track names."""
61
gtk.VBox.__init__(self)
63
self.set_spacing(LAYER_SPACING)
64
self.set_size_request(TRACK_CONTROL_WIDTH, -1)
68
def _set_timeline(self):
70
self._trackRemoved(None, 0)
72
for track in self.timeline.tracks:
73
self._trackAdded(None, track)
75
timeline = receiver(_set_timeline)
77
@handler(timeline, "track-added")
78
def _trackAdded(self, timeline, track):
79
track = TrackControls(track)
80
self._tracks.append(track)
81
self.pack_start(track, False, False)
84
@handler(timeline, "track-removed")
85
def _trackRemoved(self, unused_timeline, position):
86
track = self._tracks[position]
87
del self._tracks[position]