Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerick <erick@sugar-dev-erick.(none)>2009-12-05 20:42:38 (GMT)
committer erick <erick@sugar-dev-erick.(none)>2009-12-05 20:42:38 (GMT)
commitda7f320dc609e744817c311652d82f5ae1113736 (patch)
treece0d79001db066f3e494a4906ac03ccd10abff44
parentdbf88e0f12fe015467ecf89d95a2ba4303d9f73a (diff)
First version of FrameProbe
-rw-r--r--addons/changecolor.py7
-rw-r--r--addons/gtkwidgeteventfilter.py9
-rw-r--r--tutorius/TProbe.py107
-rw-r--r--tutorius/editor.py54
4 files changed, 159 insertions, 18 deletions
diff --git a/addons/changecolor.py b/addons/changecolor.py
index 460da32..eac891a 100644
--- a/addons/changecolor.py
+++ b/addons/changecolor.py
@@ -63,9 +63,14 @@ class ChangeColor(Action):
if not "activity" in kwargs:
raise TypeError("activity argument is Mandatory")
+ activity = kwargs["activity"]
+
+ if not "probe" in kwargs:
+ raise TypeError("probe argument is Mandatory")
+ probe = kwargs["probe"]
# get widget instance
- self.wid = find_widget(kwargs["activity"], self.widaddr, ignore_errors=False)
+ self.wid = probe.find_widget(activity, self.widaddr, ignore_errors=False)
if not self.wid:
raise NameError("widget not found")
diff --git a/addons/gtkwidgeteventfilter.py b/addons/gtkwidgeteventfilter.py
index ac14399..f6ecf86 100644
--- a/addons/gtkwidgeteventfilter.py
+++ b/addons/gtkwidgeteventfilter.py
@@ -45,9 +45,14 @@ class GtkWidgetEventFilter(EventFilter):
super(GtkWidgetEventFilter, self).install_handlers(callback, **kwargs)
if not "activity" in kwargs:
raise TypeError("activity argument is Mandatory")
-
+ activity = kwargs["activity"]
+
+ if not "probe" in kwargs:
+ raise TypeError("probe argument is Mandatory")
+ probe = kwargs["probe"]
+
#find the widget and connect to its event
- self._widget = find_widget(kwargs["activity"], self.object_id)
+ self._widget = probe.find_widget(activity, self.object_id)
self._handler_id = self._widget.connect( \
self.event_name, self.do_callback )
diff --git a/tutorius/TProbe.py b/tutorius/TProbe.py
index eea0465..3966f57 100644
--- a/tutorius/TProbe.py
+++ b/tutorius/TProbe.py
@@ -33,6 +33,7 @@ from . import properties
from .services import ObjectStore
from .dbustools import save_args, ignore, logError
+from .gtkutils import find_widget, raddr_lookup
import copy
"""
@@ -151,7 +152,7 @@ class TProbe(dbus.service.Object):
action._props.update(loaded_action._props)
if not is_editing:
- action.do(activity=self._activity)
+ action.do(activity=self._activity, probe=self)
else:
action.enter_editmode()
action.set_notification_cb(partial(self.update_action, address))
@@ -231,7 +232,7 @@ class TProbe(dbus.service.Object):
def callback(*args):
self.notify(eventfilter)
- eventfilter.install_handlers(callback, activity=self._activity)
+ eventfilter.install_handlers(callback, activity=self._activity, probe=self)
name = self._generate_event_reference(eventfilter)
self._subscribedEvents[name] = eventfilter
@@ -307,6 +308,108 @@ class TProbe(dbus.service.Object):
return name + str(suffix)
+ # ------------------ Helper functions specific to a component --------------
+ def find_widget(self, base, path, ignore_errors=True):
+ """
+ Finds a widget from a base object. Symmetric with retrieve_path
+
+ @param base the parent widget
+ @param path fqdn-style target object name
+
+ @return widget found
+ """
+ return find_widget(base, path, ignore_errors)
+
+ def retrieve_path(self, widget):
+ """
+ Retrieve the path to access a specific widget.
+ Symmetric with find_widget.
+
+ @param widget the widget to find a path for
+
+ @return path to the widget
+ """
+ return raddr_lookup(widget)
+
+class FrameProbe(TProbe):
+ """
+ Identical to the base probe except that helper functions are redefined
+ to handle the four windows that are part of the Frame.
+ """
+ # ------------------ Helper functions specific to a component --------------
+ def find_widget(self, base, path, ignore_errors=True):
+ """
+ Finds a widget from a base object. Symmetric with retrieve_path
+
+ format for the path for the frame should be:
+
+ frame://<panel>/<path>
+ where panel: top | bottom | left | right
+ path: number[.number]*
+
+ @param base the parent widget
+ @param path fqdn-style target object name
+
+ @return widget found
+ """
+ protocol, p = path.split("://")
+ assert protocol == "frame"
+
+ window, object_id = p.split("/")
+ if window == "top":
+ return find_widget(base._top_panel, object_id, ignore_errors)
+ elif window == "bottom":
+ return find_widget(base._bottom_panel, object_id, ignore_errors)
+ elif window == "left":
+ return find_widget(base._left_panel, object_id, ignore_errors)
+ elif window == "right":
+ return find_widget(base._right_panel, object_id, ignore_errors)
+ else:
+ raise RuntimeWarning("Invalid frame panel: '%s'"%window)
+
+ return find_widget(base, path, ignore_errors)
+
+ def retrieve_path(self, widget):
+ """
+ Retrieve the path to access a specific widget.
+ Symmetric with find_widget.
+
+ format for the path for the frame should be:
+
+ frame://<panel>/<path>
+ where panel: top | bottom | left | right
+ path: number[.number]*
+
+ @param widget the widget to find a path for
+
+ @return path to the widget
+ """
+ name = []
+ child = widget
+ parent = widget.parent
+ while parent:
+ name.append(str(parent.get_children().index(child)))
+ child = parent
+ parent = child.parent
+
+ name.append("0") # root object itself
+ name.reverse()
+
+ window = ""
+ if parent._position == gtk.POS_TOP:
+ window = "top"
+ elif parent._position == gtk.POS_BOTTOM:
+ window = "bottom"
+ elif parent._position == gtk.POS_LEFT:
+ window = "left"
+ elif parent._position == gtk.POS_RIGHT:
+ window = "right"
+ else:
+ raise RuntimeWarning("Invalid root panel in frame: %s"%str(parent))
+
+ return "frame://"+window+"/"+(".".join(name))
+
+
class ProbeProxy:
"""
ProbeProxy is a Proxy class for connecting to a remote TProbe.
diff --git a/tutorius/editor.py b/tutorius/editor.py
index 9d2effe..7f2cc8e 100644
--- a/tutorius/editor.py
+++ b/tutorius/editor.py
@@ -23,9 +23,11 @@ import gobject
#import gconf
from gettext import gettext as _
+from sugar.graphics.window import Window
from .gtkutils import register_signals_numbered, get_children
+
class WidgetIdentifier(gtk.Window):
"""
Tool that allows identifying widgets.
@@ -126,12 +128,26 @@ class WidgetIdentifier(gtk.Window):
typecol = gtk.TreeViewColumn(_("Widget"), typerendr, text=1, background=1, foreground=1)
explorer.append_column(typecol)
- self.__populate_treestore(
- tree, #tree
- tree.append(None, ["0",self._activity.get_name()]), #parent
- self._activity, #widget
- "0" #path
- )
+
+ if isinstance(self._activity, Window):
+ self.__populate_treestore(
+ tree, #tree
+ tree.append(None, ["0",str(self._activity)]), #parent
+ self._activity, #widget
+ "0" #path
+ )
+ else:
+ # Assume it is the frame
+ for win in [self._activity._left_panel,\
+ self._activity._right_panel,\
+ self._activity._top_panel,\
+ self._activity._bottom_panel]:
+ self.__populate_treestore(
+ tree, #tree
+ tree.append(None, ["0",str(self._activity)]), #parent
+ win, #widget
+ "0" #path
+ )
explorer.set_expander_column(typecol)
@@ -158,13 +174,25 @@ class WidgetIdentifier(gtk.Window):
typecol2 = gtk.TreeViewColumn(_("Widget"), typerendr2, text=1, background=1, foreground=1)
explorer2.append_column(typecol2)
- self.__populate_gobject_treestore(
- tree2, #tree
- tree2.append(None, ["activity",self._activity.get_name()]), #parent
- self._activity, #widget
- "activity" #path
- )
-
+ if isinstance(self._activity, Window):
+ self.__populate_gobject_treestore(
+ tree2, #tree
+ tree2.append(None, ["activity",str(self._activity)]), #parent
+ self._activity, #widget
+ "activity" #path
+ )
+ else:
+ # Assume it is the frame
+ for win in [self._activity._left_panel,\
+ self._activity._right_panel,\
+ self._activity._top_panel,\
+ self._activity._bottom_panel]:
+ self.__populate_gobject_treestore(
+ tree2, #tree
+ tree2.append(None, ["activity",str(self._activity)]), #parent
+ win, #widget
+ "activity" #path
+ )
explorer2.set_expander_column(typecol2)
swd3 = gtk.ScrolledWindow()