[kupfer: 4/38] commatrick: Selection is not directly the objects used for commands
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [kupfer: 4/38] commatrick: Selection is not directly the objects used for commands
- Date: Sat, 16 Jan 2010 17:12:08 +0000 (UTC)
commit 17d0f80394e79d531e879b88d53e1f7060c6305a
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date: Thu Jan 14 22:49:37 2010 +0100
commatrick: Selection is not directly the objects used for commands
kupfer/core/data.py | 36 +++++++++++++++++++++++++++++++-----
1 files changed, 31 insertions(+), 5 deletions(-)
---
diff --git a/kupfer/core/data.py b/kupfer/core/data.py
index 48fd2c4..d3f6e6a 100644
--- a/kupfer/core/data.py
+++ b/kupfer/core/data.py
@@ -653,7 +653,8 @@ class DataController (gobject.GObject, pretty.OutputMixin):
assert not item or isinstance(item, base.Leaf), \
"Selection in Source pane is not a Leaf!"
# populate actions
- self.action_pane.set_item(item)
+ citem = self._get_pane_object_composed(self.source_pane)
+ self.action_pane.set_item(citem)
self.search(ActionPane, interactive=True)
elif pane is ActionPane:
assert not item or isinstance(item, base.Action), \
@@ -718,9 +719,7 @@ class DataController (gobject.GObject, pretty.OutputMixin):
"""
Activate current selection
"""
- action = self.action_pane.get_selection()
- leaf = self.source_pane.get_selection()
- sobject = self.object_pane.get_selection()
+ leaf, action, sobject = self._get_current_command_objects()
mode = self.mode
try:
ctx = self._execution_context
@@ -775,6 +774,34 @@ class DataController (gobject.GObject, pretty.OutputMixin):
obj = compose.ComposedLeaf(leaf, action, iobj)
self._insert_object(SourcePane, obj)
+ def _get_pane_object_composed(self, pane):
+ objects = list(pane.object_stack)
+ sel = pane.get_selection()
+ if sel and sel not in objects:
+ objects.append(sel)
+ if not objects:
+ return None
+ elif len(objects) == 1:
+ return objects[0]
+ else:
+ return compose.MultipleLeaf(objects)
+
+ def _get_current_command_objects(self):
+ """
+ Return a tuple of current (obj, action, iobj)
+ """
+ objects = self._get_pane_object_composed(self.source_pane)
+ action = self.action_pane.get_selection()
+ if objects is None or action is None:
+ return (None, None, None)
+ iobjects = self._get_pane_object_composed(self.object_pane)
+ if self.mode == SourceActionObjectMode:
+ if not iobjects:
+ return (None, None, None)
+ else:
+ iobjects = None
+ return (objects, action, iobjects)
+
def object_stack_push(self, object_):
"""
Push @object_ onto the stack
@@ -782,7 +809,6 @@ class DataController (gobject.GObject, pretty.OutputMixin):
self.source_pane.object_stack_push(object_)
self.emit("object-stack-changed", SourcePane)
-
def object_stack_pop(self):
obj = self.source_pane.object_stack_pop()
self._insert_object(SourcePane, obj)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]