[pitivi] layer: Prevent deletion of the single remaining layer



commit f56d59ca73a3efa959cca299aa4a8c28a00d4f5d
Author: Alexandru Băluț <alexandru balut gmail com>
Date:   Fri Oct 2 14:41:55 2015 +0200

    layer: Prevent deletion of the single remaining layer
    
    Summary: Depends on D282
    
    Reviewers: thiblahute
    
    Reviewed By: thiblahute
    
    Differential Revision: https://phabricator.freedesktop.org/D283

 pitivi/timeline/layer.py |   26 ++++++++++++++++++++++----
 1 files changed, 22 insertions(+), 4 deletions(-)
---
diff --git a/pitivi/timeline/layer.py b/pitivi/timeline/layer.py
index c554dbb..e48ce6a 100644
--- a/pitivi/timeline/layer.py
+++ b/pitivi/timeline/layer.py
@@ -264,6 +264,7 @@ class LayerControls(Gtk.EventBox, Loggable):
         Loggable.__init__(self)
 
         self.bLayer = bLayer
+        self.bTimeline = self.bLayer.get_timeline()
         self.app = app
 
         self.props.width_request = ui.CONTROL_WIDTH
@@ -310,7 +311,9 @@ class LayerControls(Gtk.EventBox, Loggable):
         content.attach(sep, 2, 0, 1, 4)
 
         self.bLayer.connect("notify::priority", self.__layerPriorityChangedCb)
-        self.__layerPriorityChangedCb(self.bLayer, None)
+        self.bTimeline.connect("layer-added", self.__timelineLayerAddedCb)
+        self.bTimeline.connect("layer-removed", self.__timelineLayerRemovedCb)
+        self.__updateActions()
 
         # When the window property is set, specify the mouse cursor.
         self.connect("notify::window", self.__windowSetCb)
@@ -320,12 +323,26 @@ class LayerControls(Gtk.EventBox, Loggable):
 
     def __del__(self):
         self.bLayer.disconnect_by_func(self.__layerPriorityChangedCb)
+        self.bTimeline.disconnect_by_func(self.__timelineLayerAddedCb)
+        self.bTimeline.disconnect_by_func(self.__timelineLayerRemovedCb)
         super(LayerControls, self).__del__()
 
-    def __layerPriorityChangedCb(self, bLayer, pspec):
-        first = bLayer.get_priority() == 0
+    def __layerPriorityChangedCb(self, unused_bLayer, unused_pspec):
+        self.__updateActions()
+
+    def __timelineLayerAddedCb(self, unused_timeline, unused_bLayer):
+        self.__updateActions()
+
+    def __timelineLayerRemovedCb(self, unused_timeline, unused_bLayer):
+        self.__updateActions()
+
+    def __updateActions(self):
+        priority = self.bLayer.get_priority()
+        first = priority == 0
         self.__move_layer_up_action.props.enabled = not first
         self.__move_layer_top_action.props.enabled = not first
+        layers_count = len(self.bTimeline.get_layers())
+        self.__delete_layer_action.props.enabled = layers_count > 1
 
     def __createMenuModel(self):
         action_group = Gio.SimpleActionGroup()
@@ -353,7 +370,8 @@ class LayerControls(Gtk.EventBox, Loggable):
         action_group.insert(action)
         menu_model.append(_("Move layer to bottom"), "layer.%s" % action.get_name().replace(" ", "."))
 
-        action = Gio.SimpleAction.new("delete_layer", None)
+        self.__delete_layer_action = Gio.SimpleAction.new("delete_layer", None)
+        action = self.__delete_layer_action
         action.connect("activate", self._deleteLayerCb)
         action_group.insert(action)
         menu_model.append(_("Delete layer"), "layer.%s" % action.get_name())


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