Update docs.
authorRadek Brich <radek.brich@devl.cz>
Mon, 17 Dec 2012 00:24:34 +0100
changeset 36 caf927c3f10b
parent 35 f62c8269ded6
child 37 54dd866b8951
Update docs.
docs/events.rst
docs/focus.rst
docs/index.rst
tuikit/application.py
tuikit/container.py
tuikit/widget.py
--- a/docs/events.rst	Sun Dec 16 21:04:03 2012 +0100
+++ b/docs/events.rst	Mon Dec 17 00:24:34 2012 +0100
@@ -1,16 +1,46 @@
 Event handling
 ==============
 
-Keyboard event propagation
---------------------------
+Draw event
+----------
+
+Draw event is generating for all widgets in top down order - top window is drawn first, then its children etc.
+See TopWindow.draw(), Container.draw(), Widget.draw() - these methods control the draw event propagation.
+Normal widgets should implement only on_draw() method, which is called from draw().
+
 
-top widget -> focuswidget -> focuswidget's parent -> focuswidget's parent's parent -> ...and so forth
+Keypress event, focus
+---------------------
+
+Keyboard events go in top down order, from top window to focused widget in each level. When implementing on_keypress method,
+add super().on_keypress(). Anything before that will be executed in top down walk, anything after in bottom up. Return True if you want to stop
+the walk.
+
+::
 
-1 top window
-4   window
-3     container
-2       edit box
+  before  after
+  1       7      top window
+  2       6        window
+  3       5          container
+  4       4            edit box
+
+Each container maintains its focus child and allows to cycle focus between children (See Container.focusnext). Focus cycling works throughout
+container levels - if focus was on last child and would go to the first, 'tab' key is not handled thus allowing parent level to cycle focus.
+
+When focus changes, two events are generated: focus on new widget, unfocus on previous one.
+Mousedown causes focus change when allowed (Widget.allow_focus).
+
+ * tab key - change focus to next widget
+ * shift-tab - previous widget (FIXME: not implemented)
+
+Hide on focused widget causes focus change like if tab key was pressed.
+
+See Container.trapfocus, Widget.canfocus(), Widget.hasfocus(), Widget.setfocus() for more information.
 
 
 Other event propagation
 -----------------------
+
+Normal events are propagated in top down order, to all children in each level, in order of child addition.
+Some events choose one or more of children for event propagation. In case of mouse events, child is chosen based on mouse cursor position.
+
--- a/docs/focus.rst	Sun Dec 16 21:04:03 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-Focus
-=====
-
-Only one widget can have focus at the time.
-Top widget has link to currently focused widget in 'focuswidget'.
-
-Events emitted on change: focus, unfocus
-
-mousedown - focus widget under mouse
-
-tab - focus next child in container (depends on canfocus())
-shift-tab - previous child
-
-hide() -> unfocus
-
-tab/shift-tab into / out off containers?
-trapfocus # if True, tab cycles inside container
-
-widget.hasfocus()
--- a/docs/index.rst	Sun Dec 16 21:04:03 2012 +0100
+++ b/docs/index.rst	Mon Dec 17 00:24:34 2012 +0100
@@ -14,7 +14,6 @@
    application
    emitter
    events
-   focus
    redraw
    colors
    tableview
--- a/tuikit/application.py	Sun Dec 16 21:04:03 2012 +0100
+++ b/tuikit/application.py	Mon Dec 17 00:24:34 2012 +0100
@@ -20,12 +20,15 @@
         self.timeout = []
         self.timelast = None
 
+    def draw(self, screen, x=0, y=0):
+        """Draw the top window and its children.
 
-    def draw(self, screen, x=0, y=0):
+        This is entry point for full screen redraw.
+
+        """
         screen.erase()
         super().draw(screen, x, y)
 
-
     def add_timeout(self, s, func):
         if not len(self.timeout):
             self.timelast = time.time()
--- a/tuikit/container.py	Sun Dec 16 21:04:03 2012 +0100
+++ b/tuikit/container.py	Mon Dec 17 00:24:34 2012 +0100
@@ -82,7 +82,6 @@
         if keyname == 'tab':
             return self.focusnext()
 
-
     def on_resize(self):
         super().on_resize()
         for child in self.children:
@@ -90,6 +89,12 @@
 
 
     def draw(self, driver, x, y):
+        """Draw the container and its children.
+
+        This method should not be overriden by subclasses,
+        use on_draw instead.
+
+        """
         if self.hidden:
             return True
 
--- a/tuikit/widget.py	Sun Dec 16 21:04:03 2012 +0100
+++ b/tuikit/widget.py	Mon Dec 17 00:24:34 2012 +0100
@@ -116,6 +116,12 @@
             self.parent._redraw = True
 
     def draw(self, driver, x, y):
+        """Draw the widget.
+
+        This method should not be overriden by subclasses,
+        use on_draw instead.
+
+        """
         if self.hidden:
             return True
 
@@ -188,6 +194,8 @@
     def hide(self):
         '''Hide widget. Convenience method.'''
         self.hidden = True
+        if self.hasfocus():
+            self.parent.focusnext()
         self.redraw()