[pitivi] Make layers selectable by clicking into canvas
- From: Jean-FranÃois Fortin Tam <jfft src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] Make layers selectable by clicking into canvas
- Date: Sat, 21 Jul 2012 20:00:32 +0000 (UTC)
commit 7736f363bf4b9dceab6ef15b5aae25bb4a0aa693
Author: Paul Lange <palango gmx de>
Date: Thu Jul 5 18:34:25 2012 +0200
Make layers selectable by clicking into canvas
pitivi/timeline/layer.py | 2 +-
pitivi/timeline/timeline.py | 34 +++++++++++++++++++++++++++++-----
2 files changed, 30 insertions(+), 6 deletions(-)
---
diff --git a/pitivi/timeline/layer.py b/pitivi/timeline/layer.py
index 2949f7a..c4d46e6 100644
--- a/pitivi/timeline/layer.py
+++ b/pitivi/timeline/layer.py
@@ -154,7 +154,7 @@ class BaseLayerControl(gtk.EventBox, Loggable):
"""
Send TimelineControls the changed selection
"""
- self._app.gui.timeline_ui.controls.selectLayerControl(self._layer, self)
+ self._app.gui.timeline_ui.controls.selectLayerControl(self)
def _selectionChangedCb(self):
"""
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 1ed940b..4e44266 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -223,7 +223,7 @@ class TimelineCanvas(goocanvas.Canvas, Zoomable, Loggable):
root.connect("motion-notify-event", self._selectionDrag)
root.connect("button-press-event", self._selectionStart)
root.connect("button-release-event", self._selectionEnd)
- self.connect("button-release-event", self._snapEndedCb)
+ self.connect("button-release-event", self._buttonReleasedCb)
# add some padding for the horizontal scrollbar
self.set_size_request(-1, self.height)
@@ -397,7 +397,12 @@ class TimelineCanvas(goocanvas.Canvas, Zoomable, Loggable):
self._snap_indicator.props.height = self.height
self._snap_indicator.props.visibility = goocanvas.ITEM_VISIBLE
- def _snapEndedCb(self, *args):
+ def _buttonReleasedCb(self, canvas, event):
+ # select clicked layer, if any
+ x, y = self.from_event(event) + self._get_adjustment(True, True)
+ self.app.gui.timeline_ui.controls.selectLayerControlForY(y)
+
+ # also hide snap indicator
self._snap_indicator.props.visibility = goocanvas.ITEM_INVISIBLE
## settings callbacks
@@ -420,7 +425,7 @@ class TimelineCanvas(goocanvas.Canvas, Zoomable, Loggable):
self._timeline.disconnect_by_func(self._trackAddedCb)
self._timeline.disconnect_by_func(self._trackRemovedCb)
self._timeline.disconnect_by_func(self._snapCb)
- self._timeline.disconnect_by_func(self._snapEndedCb)
+ self._timeline.disconnect_by_func(self._buttonReleasedCb)
self._timeline = timeline
if self._timeline is not None:
@@ -430,7 +435,7 @@ class TimelineCanvas(goocanvas.Canvas, Zoomable, Loggable):
self._timeline.connect("track-added", self._trackAddedCb)
self._timeline.connect("track-removed", self._trackRemovedCb)
self._timeline.connect("snapping-started", self._snapCb)
- self._timeline.connect("snapping-ended", self._snapEndedCb)
+ self._timeline.connect("snapping-ended", self._buttonReleasedCb)
self.zoomChanged()
@@ -615,10 +620,11 @@ class TimelineControls(gtk.VBox, Loggable):
controls[ges.TRACK_TYPE_VIDEO].setSoloState(key == layer)
controls[ges.TRACK_TYPE_AUDIO].setSoloState(key == layer)
- def selectLayerControl(self, layer, layer_control):
+ def selectLayerControl(self, layer_control):
"""
Select layer_control and unselect all other controls
"""
+ layer = layer_control._layer
# if selected layer changed
if self._selected_layer != layer:
self._selected_layer = layer
@@ -641,6 +647,24 @@ class TimelineControls(gtk.VBox, Loggable):
def getSelectedLayer(self):
return self._selected_layer
+ def selectLayerControlForY(self, y):
+ """
+ Check if y is in the bounds of a layer control
+ """
+ current_y = 0
+ # count height
+ for child in self.get_children():
+ # calculate upper bound
+ next_y = current_y + child.getHeight()
+
+ # if y is in bounds, activate control and terminate
+ if y >= current_y and y <= next_y:
+ self.selectLayerControl(child)
+ return
+ # else check next control
+ else:
+ current_y = next_y + LAYER_SPACING
+
class InfoStub(gtk.HBox, Loggable):
"""
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]