diff browser_side/base_widget.py @ 320:a0ded7df30f7

browser_side: based on LiberviaWidget.getWidgetsPanel, add a generic method to retrieve the first ancestor of any class
author souliane <souliane@mailoo.org>
date Fri, 03 Jan 2014 21:48:49 +0100
parents 05e264e96a1c
children 0b7934e75e76
line wrap: on
line diff
--- a/browser_side/base_widget.py	Fri Jan 03 16:06:00 2014 +0100
+++ b/browser_side/base_widget.py	Fri Jan 03 21:48:49 2014 +0100
@@ -31,11 +31,13 @@
 from pyjamas.ui.Label import Label
 from pyjamas.ui.Button import Button
 from pyjamas.ui.Image import Image
+from pyjamas.ui.Widget import Widget
 from pyjamas.ui.DropWidget import DropWidget
 from pyjamas.ui.ClickListener import ClickHandler
 from pyjamas.ui import HasAlignment
 from pyjamas import DOM
 import dialog
+import logging
 from tools import LiberviaDragWidget
 from pyjamas import Window
 from __pyjamas__ import doc
@@ -197,12 +199,22 @@
         return "%s (%s)" % (self, self.__title.getText())
 
     def getWidgetsPanel(self, verbose=True):
-        # current = self was not reassuring for the code analyzer
-        current = self.getParent()
-        while current is not None and not isinstance(current, WidgetsPanel):
-            current = current.getParent()
+        return self.getParent(WidgetsPanel, verbose)
+
+    def getParent(self, class_=None, verbose=True):
+        """
+        Note: this method overrides pyjamas.ui.Widget.getParent
+        @param class_: class of the ancestor to look for or None to return the first parent
+        @param verbose: set to True to log error messages
+        @return: the parent/ancestor or None if it has not been found
+        """
+        current = Widget.getParent(self)
+        if class_ is None:
+            return current  # this is the default behavior
+        while current is not None and not isinstance(current, class_):
+            current = Widget.getParent(current)
         if current is None and verbose:
-            print "Error: can't find WidgetsPanel"
+            logging.error("Can't find parent %s for %s" % (class_, self))
         return current
 
     def onClick(self, sender):