# HG changeset patch # User Radek Brich # Date 1315474647 -7200 # Node ID 19ebde2fd594a932257a4594ec1f8869c2d36dc5 # Parent bb7d41be0c4406795f9b4dd656dcad9b9f86e02f Add more generated documentation. diff -r bb7d41be0c44 -r 19ebde2fd594 docs/application.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/application.rst Thu Sep 08 11:37:27 2011 +0200 @@ -0,0 +1,11 @@ +Application +=========== + +.. toctree:: + :maxdepth: 3 + :titlesonly: + +.. automodule:: tuikit.application + :members: + :show-inheritance: + diff -r bb7d41be0c44 -r 19ebde2fd594 docs/button.rst --- a/docs/button.rst Thu Sep 08 10:13:55 2011 +0200 +++ b/docs/button.rst Thu Sep 08 11:37:27 2011 +0200 @@ -1,2 +1,13 @@ Button ====== + +.. toctree:: + :maxdepth: 3 + :titlesonly: + + window + +.. automodule:: tuikit.container + :members: + :show-inheritance: + diff -r bb7d41be0c44 -r 19ebde2fd594 docs/conf.py --- a/docs/conf.py Thu Sep 08 10:13:55 2011 +0200 +++ b/docs/conf.py Thu Sep 08 11:37:27 2011 +0200 @@ -192,3 +192,6 @@ # If false, no module index is generated. #latex_use_modindex = True + + +autodoc_member_order = 'bysource' diff -r bb7d41be0c44 -r 19ebde2fd594 docs/container.rst --- a/docs/container.rst Thu Sep 08 10:13:55 2011 +0200 +++ b/docs/container.rst Thu Sep 08 11:37:27 2011 +0200 @@ -2,6 +2,12 @@ ========= .. toctree:: - :maxdepth: 2 + :maxdepth: 3 + :titlesonly: window + +.. automodule:: tuikit.container + :members: + :show-inheritance: + diff -r bb7d41be0c44 -r 19ebde2fd594 docs/eventsource.rst --- a/docs/eventsource.rst Thu Sep 08 10:13:55 2011 +0200 +++ b/docs/eventsource.rst Thu Sep 08 11:37:27 2011 +0200 @@ -2,7 +2,8 @@ =========== .. toctree:: - :maxdepth: 2 + :maxdepth: 3 + :titlesonly: widget diff -r bb7d41be0c44 -r 19ebde2fd594 docs/index.rst --- a/docs/index.rst Thu Sep 08 10:13:55 2011 +0200 +++ b/docs/index.rst Thu Sep 08 11:37:27 2011 +0200 @@ -6,6 +6,7 @@ .. toctree:: :maxdepth: 3 + application eventsource events focus diff -r bb7d41be0c44 -r 19ebde2fd594 docs/widget.rst --- a/docs/widget.rst Thu Sep 08 10:13:55 2011 +0200 +++ b/docs/widget.rst Thu Sep 08 11:37:27 2011 +0200 @@ -2,69 +2,23 @@ ====== .. toctree:: - :maxdepth: 2 + :maxdepth: 3 + :titlesonly: container button -.. py:module:: tuikit.widget - - -Class attributes ----------------- - -.. attribute:: Widget.parent - - Parrent widget. - - -.. attribute:: Widget.top - - Top widget (same for every widget in one application). - - -.. attribute:: Widget.x - Widget.y - - Position inside parent widget. Modified by layout manager. - - -.. attribute:: Widget.width - Widget.height - - Actual size. Modified by layout manager. - - -.. attribute:: Widget.sizemin +.. autoclass:: tuikit.widget.Widget + :members: + :show-inheritance: - Minimal size of widget. Under normal circumstances, widget will never be sized smaller than this. - Tuple (w, h). Both must be integers >= 1. - - -.. attribute:: Widget.sizemax - - Maximum size of widget. Widget will never be sized bigger than this. - Tuple (w, h). Integers >= 1 or None (meaning no maximum size or infinite). - - -.. attribute:: Widget.sizereq - - Size request. This is default size of the widget. Will be fulfilled if possible. - Tuple (w, h). Integers >= 1 or None (meaning use minumal size). - + .. attribute:: x + y + + Position inside parent widget. Modified by layout manager. + + .. attribute:: width + height + + Actual size. Modified by layout manager. -.. attribute:: Widget.hidden - - Hidden widget does not affect layout. - - -.. attribute:: Widget.allowlayout - - When false, the widget is not considered in layout. - - -.. attribute:: Widget.layouthints - - Dictionary containing optional parameters for layout managers. - - diff -r bb7d41be0c44 -r 19ebde2fd594 docs/window.rst --- a/docs/window.rst Thu Sep 08 10:13:55 2011 +0200 +++ b/docs/window.rst Thu Sep 08 11:37:27 2011 +0200 @@ -1,2 +1,11 @@ Window ====== + +.. toctree:: + :maxdepth: 3 + :titlesonly: + +.. automodule:: tuikit.window + :members: + :show-inheritance: + diff -r bb7d41be0c44 -r 19ebde2fd594 tuikit/application.py --- a/tuikit/application.py Thu Sep 08 10:13:55 2011 +0200 +++ b/tuikit/application.py Thu Sep 08 11:37:27 2011 +0200 @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -import curses import curses.wrapper import logging import time @@ -11,7 +10,11 @@ class TopWindow(Container): + + '''Top window of an application. Covers entire screen.''' + def __init__(self): + '''Create top window.''' Container.__init__(self) self.focuswidget = None @@ -70,9 +73,17 @@ class Application: + + '''Application class. Defines main loop.''' + def __init__(self): + '''Create application.''' + + '''Top window.''' self.top = TopWindow() self.quit = False + + '''Renderer class, i.e. BackendCurses.''' self.screen = None self.log = logging.getLogger('tuikit') @@ -85,14 +96,17 @@ def start(self): + '''Start application. Runs main loop.''' curses.wrapper(self.mainloop) def terminate(self): + '''Terminate application.''' self.quit = True def mainloop(self, screen): + '''The main loop.''' self.screen = BackendCurses(screen) self.applytheme() self.top.width, self.top.height = self.screen.width, self.screen.height @@ -129,3 +143,4 @@ screen.setcolor('button-active', 'black on cyan') screen.setcolor('menu', 'black on cyan') screen.setcolor('menu-active', 'white on cyan, bold') + diff -r bb7d41be0c44 -r 19ebde2fd594 tuikit/button.py --- a/tuikit/button.py Thu Sep 08 10:13:55 2011 +0200 +++ b/tuikit/button.py Thu Sep 08 11:37:27 2011 +0200 @@ -1,21 +1,25 @@ # -*- coding: utf-8 -*- -import curses -import locale - from .widget import Widget class Button(Widget): + + '''Clickable button.''' + def __init__(self, label=''): + '''Create button with given label, size according to label.''' Widget.__init__(self, len(label) + 4, 1) + #: Button label. self.label = label self.bg = 'button' self.bghi = 'button-active' self.highlight = False + #: Left bracket graphic character. self.lbracket = '<' + #: Right bracket graphic character. self.rbracket = '>' self.connect('draw', self.on_draw) diff -r bb7d41be0c44 -r 19ebde2fd594 tuikit/container.py --- a/tuikit/container.py Thu Sep 08 10:13:55 2011 +0200 +++ b/tuikit/container.py Thu Sep 08 11:37:27 2011 +0200 @@ -3,14 +3,24 @@ from .widget import Widget import logging + class Container(Widget): + + '''Container widget. Base for any widget which can contain other widgets.''' + def __init__(self, width = 10, height = 10): + '''Create container of requested size.''' Widget.__init__(self, width, height) + #: List of child widgets. self.children = [] + self.mousechild = None - self.borders = (0, 0, 0, 0) # left, top, right, bottom + #: Width of borders (left, top, right, bottom). + #: Child widgets are placed within borders. + self.borders = (0, 0, 0, 0) + self.widthrequest = (None, None) self.heightrequest = (None, None) @@ -20,6 +30,7 @@ def add(self, widget, **kw): + '''Add widget into this container.''' self.children.append(widget) widget.parent = self widget.settop(self.top) @@ -27,12 +38,14 @@ def layout(self, layout): + '''Set layout manager for placing child widgets.''' self.layout = layout layout.container = self self.connect('resize', layout.resize) def settop(self, top): + '''Set top widget.''' self.top = top for child in self.children: child.settop(top) diff -r bb7d41be0c44 -r 19ebde2fd594 tuikit/eventsource.py --- a/tuikit/eventsource.py Thu Sep 08 10:13:55 2011 +0200 +++ b/tuikit/eventsource.py Thu Sep 08 11:37:27 2011 +0200 @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- class EventSource: - '''Event source mixin.''' + + '''Event source base class.''' def __init__(self): self.event = dict() diff -r bb7d41be0c44 -r 19ebde2fd594 tuikit/widget.py --- a/tuikit/widget.py Thu Sep 08 10:13:55 2011 +0200 +++ b/tuikit/widget.py Thu Sep 08 11:37:27 2011 +0200 @@ -1,35 +1,58 @@ # -*- coding: utf-8 -*- -import curses - from .eventsource import EventSource class Widget(EventSource): - """Base class for all widgets.""" + '''Base class for all widgets.''' def __init__(self, width = 10, height = 10): + '''Blah.''' EventSource.__init__(self) + #: Parent widget. self.parent = None + + #: Top widget (same for every widget in one application). self.top = None - # placing - set by parent widget's layout manager + + # Position inside parent widget. Modified by layout manager. self.x = 0 self.y = 0 - # size + + # Actual size. Modified by layout manager. self._width = width self._height = height + + #: Minimal size of widget. Under normal circumstances + #: widget will never be sized smaller than this. + #: Tuple (w, h). Both must be integers >= 1. self.sizemin = (1,1) + + #: Maximum size of widget. Widget will never be sized bigger than this. + #: Tuple (w, h). Integers >= 1 or None (meaning no maximum size or infinite). self.sizemax = (None, None) + + #: Size request. This is default size of the widget. Will be fulfilled if possible. + #: Tuple (w, h). Integers >= 1 or None (meaning use minumal size). self.sizereq = (10,10) + + #: When false, the widget is not considered in layout. self.allowlayout = True + + #: Dictionary containing optional parameters for layout managers. self.layouthints = {} + + #: Hidden widget does not affect layout. + self.hidden = False + # cursor self.cursor = None + # redraw request self._redraw = True - self.hidden = False + # event handlers self.addevents( 'resize', @@ -93,6 +116,29 @@ screen.hidecursor() + def keypress(self, keyname, char): + handled = self.handle('keypress', keyname, char) + if not handled and self.parent and self.parent != self.top: + self.parent.emit('keypress', keyname, char) + + + def mousedown(self, ev): + self.setfocus() + self.handle('mousedown', ev) + + + def mouseup(self, ev): + self.handle('mouseup', ev) + + + def mousemove(self, ev): + self.handle('mousemove', ev) + + + def mousewheel(self, ev): + self.handle('mousewheel', ev) + + ### focus @@ -130,32 +176,6 @@ self.handle('unfocus', newfocus) - ### events - - - def keypress(self, keyname, char): - handled = self.handle('keypress', keyname, char) - if not handled and self.parent and self.parent != self.top: - self.parent.emit('keypress', keyname, char) - - - def mousedown(self, ev): - self.setfocus() - self.handle('mousedown', ev) - - - def mouseup(self, ev): - self.handle('mouseup', ev) - - - def mousemove(self, ev): - self.handle('mousemove', ev) - - - def mousewheel(self, ev): - self.handle('mousewheel', ev) - - ### @@ -183,11 +203,13 @@ def hide(self): + '''Hide widget. Convenience method.''' self.hidden = True self.redraw() def show(self): + '''Show widget. Convenience method.''' self.hidden = False self.redraw() diff -r bb7d41be0c44 -r 19ebde2fd594 tuikit/window.py --- a/tuikit/window.py Thu Sep 08 10:13:55 2011 +0200 +++ b/tuikit/window.py Thu Sep 08 11:37:27 2011 +0200 @@ -5,7 +5,14 @@ class Window(Container): + + '''Window widget. + + It represents part of screen with border, close button and contents. + Window can be moved, resized or closed by user.''' + def __init__(self, width=40, height=10): + '''Create window of requested size.''' Container.__init__(self, width, height) self.connect('draw', self.on_draw) @@ -14,9 +21,15 @@ self.connect('mousemove', self.on_mousemove) self.connect('resize', self.on_resize) + #: Window title. self.title = '' + self._closebutton = True + + #: Allow user to resize window. self.resizable = True + + #: Allow user to move window. self.movable = True self.resizing = False @@ -37,6 +50,7 @@ @property def closebutton(self): + '''Show/hide close button.''' return self._closebutton @closebutton.setter