[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r8529 - in trunk/gnue-forms/src/uidrivers: _base _base/widgets _c
From: |
johannes |
Subject: |
[gnue] r8529 - in trunk/gnue-forms/src/uidrivers: _base _base/widgets _commonGuiToolkit curses/widgets gtk2/widgets gtk2/widgets/form html/widgets html/widgets/form qt/widgets qt/widgets/form win32/widgets win32/widgets/form wx/widgets wx/widgets/form wx26/widgets |
Date: |
Thu, 6 Jul 2006 09:31:30 -0500 (CDT) |
Author: johannes
Date: 2006-07-06 09:31:28 -0500 (Thu, 06 Jul 2006)
New Revision: 8529
Modified:
trunk/gnue-forms/src/uidrivers/_base/UIdriver.py
trunk/gnue-forms/src/uidrivers/_base/widgets/_base.py
trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/UIdriver.py
trunk/gnue-forms/src/uidrivers/curses/widgets/form.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/widget.py
trunk/gnue-forms/src/uidrivers/html/widgets/_base.py
trunk/gnue-forms/src/uidrivers/html/widgets/form/widget.py
trunk/gnue-forms/src/uidrivers/qt/widgets/_base.py
trunk/gnue-forms/src/uidrivers/qt/widgets/form/widget.py
trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py
trunk/gnue-forms/src/uidrivers/win32/widgets/form/widget.py
trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py
trunk/gnue-forms/src/uidrivers/wx/widgets/form/widget.py
trunk/gnue-forms/src/uidrivers/wx26/widgets/_base.py
trunk/gnue-forms/src/uidrivers/wx26/widgets/form.py
Log:
More Pep8-ifying and reorganisation of the wx26 driver
issue87 in-progress
Modified: trunk/gnue-forms/src/uidrivers/_base/UIdriver.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/_base/UIdriver.py 2006-07-06 13:02:22 UTC
(rev 8528)
+++ trunk/gnue-forms/src/uidrivers/_base/UIdriver.py 2006-07-06 14:31:28 UTC
(rev 8529)
@@ -189,7 +189,7 @@
'gotoENTRY' : self.switchFocus,
'updateENTRY' : self.updateEntry,
'updateEntryEditor': self.updateEntryEditor,
- 'gotoPAGE' : self.gotoPage,
+ 'gotoPAGE' : self.goto_page,
'exitApplication' : self.exitApplication,
'setTitle' : self.setTitle,
@@ -618,14 +618,14 @@
# ---------------------------------------------------------------------------
- # gotoPage
+ # goto_page
# ---------------------------------------------------------------------------
- def gotoPage (self, event):
+ def goto_page (self, event):
uiForm = self._gfObjToUIWidget [event._form]._uiForm
uiPage = self._gfObjToUIWidget [event.data]
- uiForm.gotoPage (uiPage)
+ uiForm._ui_goto_page_(uiPage)
#############################################################################
Modified: trunk/gnue-forms/src/uidrivers/_base/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/_base/widgets/_base.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/_base/widgets/_base.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -213,7 +213,7 @@
def lose_focus(self, index):
pass
- def showModal(self):
+ def show_modal(self):
pass
def destroy(self):
Modified: trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/UIdriver.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/UIdriver.py
2006-07-06 13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/UIdriver.py
2006-07-06 14:31:28 UTC (rev 8529)
@@ -62,7 +62,7 @@
def _activateForm (self, form, modal):
if modal:
- form.showModal()
+ form.show_modal()
else:
form.show()
Modified: trunk/gnue-forms/src/uidrivers/curses/widgets/form.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/curses/widgets/form.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/curses/widgets/form.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -135,7 +135,7 @@
# Go to a specific page
# ---------------------------------------------------------------------------
- def gotoPage (self, page):
+ def _ui_goto_page_(self, page):
self.__currentPage = page
self.__updatePageList ()
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -178,8 +178,8 @@
widget.hide ()
- def showModal (self):
- assert gDebug (1, "showModal not implemented for gtk2 driver")
+ def show_modal (self):
+ assert gDebug (1, "show_modal not implemented for gtk2 driver")
def destroy (self):
assert gDebug (1, "destroy not implemented for gtk2 driver")
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/widget.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/widget.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/widget.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -211,7 +211,7 @@
# Show the current form modal
# ---------------------------------------------------------------------------
- def showModal (self):
+ def show_modal (self):
# show_all moves the focus, so we have to remember where it was before and
# restore it
@@ -243,7 +243,7 @@
# Makes the requested page visible while hiding the others
# ---------------------------------------------------------------------------
- def gotoPage (self, page):
+ def _ui_goto_page_ (self, page):
self._wrapper.setPage (page.widgets [0])
Modified: trunk/gnue-forms/src/uidrivers/html/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/html/widgets/_base.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/html/widgets/_base.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -105,7 +105,7 @@
widget.Hide()
- def showModal(self):
+ def show_modal(self):
for widget in self.widgets:
widget.Show()
Modified: trunk/gnue-forms/src/uidrivers/html/widgets/form/widget.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/html/widgets/form/widget.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/html/widgets/form/widget.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -76,7 +76,7 @@
self._containerToolkitWidget = newWidget
return newWidget
- def gotoPage(self,event):
+ def _ui_goto_page_(self,event):
pass
def _ui_update_status_(self,tip, statusValue, insertValue, currentRecord,
maxRecord, currentPage, maxPage):
@@ -85,6 +85,6 @@
def show(self):
self.mainWindow.Show()
- def showModal(self):
+ def show_modal(self):
self.mainWindow.Show()
Modified: trunk/gnue-forms/src/uidrivers/qt/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/qt/widgets/_base.py 2006-07-06 13:02:22 UTC
(rev 8528)
+++ trunk/gnue-forms/src/uidrivers/qt/widgets/_base.py 2006-07-06 14:31:28 UTC
(rev 8529)
@@ -87,7 +87,7 @@
for widget in self.widgets:
widget.show(0)
- def showModal(self):
+ def show_modal(self):
self.setModal(1)
def destroy(self):
Modified: trunk/gnue-forms/src/uidrivers/qt/widgets/form/widget.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/qt/widgets/form/widget.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/qt/widgets/form/widget.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -115,7 +115,7 @@
#self.containerFrame.Show()
self.mainWindow.show()
- def showModal(self):
+ def show_modal(self):
#self.containerFrame.Show()
self.mainWindow.exec_loop()
@@ -140,11 +140,11 @@
#
- # gotoPage
+ # _ui_goto_page_
#
# Makes the requested page visible while hiding the others
#
- def gotoPage(self,page):
+ def _ui_goto_page_(self,page):
self._wrapper.setPage(page.widgets[0])
## if not self._notebook:
Modified: trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -686,7 +686,7 @@
widget.Hide()
- def showModal(self):
+ def show_modal(self):
for widget in self.widgets:
widget.Show()
Modified: trunk/gnue-forms/src/uidrivers/win32/widgets/form/widget.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/win32/widgets/form/widget.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/win32/widgets/form/widget.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -136,11 +136,11 @@
return newWidget
#
- # gotoPage
+ # _ui_goto_page_
#
# Makes the requested page visible while hiding the others
#
- def gotoPage(self,page):
+ def _ui_goto_page_(self,page):
self._wrapper.setPage(page.widgets[0])
def show(self):
@@ -149,7 +149,7 @@
win32gui.PumpMessages()
- def showModal(self):
+ def show_modal(self):
self.mainWindow.Show()
for key in self._uiDriver._formNameToUIForm.keys():
Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py 2006-07-06 13:02:22 UTC
(rev 8528)
+++ trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py 2006-07-06 14:31:28 UTC
(rev 8529)
@@ -104,7 +104,7 @@
for widget in self.widgets:
widget.Show(0)
- def showModal(self):
+ def show_modal(self):
for widget in self.widgets:
widget.ShowModal()
Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/form/widget.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/widgets/form/widget.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/wx/widgets/form/widget.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -136,7 +136,7 @@
# ---------------------------------------------------------------------------
# Show the form modal mode
# ---------------------------------------------------------------------------
- def showModal(self):
+ def show_modal(self):
"""
Display the form in modal windowing mode.
"""
@@ -168,7 +168,7 @@
# --------------------------------------------------------------------------
# Makes the requested page visible while hiding the others
# --------------------------------------------------------------------------
- def gotoPage(self, page):
+ def _ui_goto_page_(self, page):
"""
Make the requested page visible, hide others.
"""
Modified: trunk/gnue-forms/src/uidrivers/wx26/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx26/widgets/_base.py 2006-07-06
13:02:22 UTC (rev 8528)
+++ trunk/gnue-forms/src/uidrivers/wx26/widgets/_base.py 2006-07-06
14:31:28 UTC (rev 8529)
@@ -29,7 +29,7 @@
import os
from gnue.common.definitions import GParser
-from gnue.forms.GFForm import *
+from gnue.forms.GFObjects import GFTabStop, GFBox, GFScrollBar, GFLabel
from gnue.forms.uidrivers._base.widgets._base import UIWidget
__all__ = ['InvalidBoundingBoxError', 'UIHelper']
Modified: trunk/gnue-forms/src/uidrivers/wx26/widgets/form.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx26/widgets/form.py 2006-07-06 13:02:22 UTC
(rev 8528)
+++ trunk/gnue-forms/src/uidrivers/wx26/widgets/form.py 2006-07-06 14:31:28 UTC
(rev 8529)
@@ -20,6 +20,9 @@
# - Suite 330, Boston, MA 02111-1307, USA.
#
# $Id$
+"""
+Implementation of the UI layer for the <form> and <dialog> tag.
+"""
import wx
import os.path
@@ -35,9 +38,21 @@
# Interface implementation of a form widget
# =============================================================================
-class UIForm (UIHelper):
+class UIForm(UIHelper):
"""
Interface implementation of form widgets (forms and dialogs)
+
+ @ivar pages: list of page panels, one per <page> tag. The page panel is a
+ wx.Panel instance which is the parent of all wx widgets for that given
+ page.
+ @ivar sizing_enabled: if True, handling of wx.EVT_SIZE event of <grid> tags
+ is activated. In that case newly available space will be used to
+ create/show new grid-rows, and less available space will cause
+ grid-rows to be hidden. On some platforms it is neccessary to disable
+ the wx.EVT_SIZE event before closing the application in order to avoid
+ core dumps.
+ @ivar main_window: the wx.Frame or wx.Dialog instance representing this
+ form.
"""
_TAB_STYLE = {'left': wx.NB_LEFT,
@@ -51,22 +66,36 @@
def __init__(self, event):
- self.statusBar = None
-
UIHelper.__init__(self, event)
self.pages = []
+ self.sizing_enabled = False
- self.sizing_enabled = False
self._inits.extend([self.__update_sizer])
+ self.main_window = None
+ self._form = None
+ self.__status_bar = None
+ self.__master_sizer = None
+
+
# -------------------------------------------------------------------------
# Create a new wx frame widget
# -------------------------------------------------------------------------
- def _create_widget_ (self, event, spacer):
+ def _create_widget_(self, event, spacer):
+ """
+ Create the real wx.Frame or wx.Dialog. The spacer is ignored for form
+ tags.
+ @param event: the creation-event instance carrying information like
+ container (parent-widget)
+ @param spacer: not used for forms and dialogs
+
+ @returns: the wx.Frame or wx.Dialog instance for this form
+ """
+
if self._form.style != 'dialog':
self.main_window = self._uiDriver._parentContainer
if not self.main_window:
@@ -78,42 +107,41 @@
self.main_window.SetIcons(self.__load_icons())
self.main_window.Bind(wx.EVT_CLOSE, self.__on_close, self.main_window)
- self.master_sizer = wx.BoxSizer(wx.VERTICAL)
+ self.__master_sizer = wx.BoxSizer(wx.VERTICAL)
# The base panel is needed on wxMSW to get a uniform background of the
# frame.
- self.base_panel = wx.Panel(self.main_window, -1)
- self.base_sizer = wx.BoxSizer(wx.VERTICAL)
- self.base_panel.SetSizer(self.base_sizer)
+ base_panel = wx.Panel(self.main_window, -1)
+ base_sizer = wx.BoxSizer(wx.VERTICAL)
+ base_panel.SetSizer(base_sizer)
- self.master_sizer.Add(self.base_panel, 1, wx.EXPAND)
+ self.__master_sizer.Add(base_panel, 1, wx.EXPAND)
# Add Statusbar, Toolbar and Menubar as requested and/or allowed
if self._form.style != 'dialog':
- if not self._form._features ['GUI:STATUSBAR:SUPPRESS']:
- self.statusBar = self.main_window.CreateStatusBar ()
- self.statusBar.SetFieldsCount (5)
- self.statusBar.SetStatusWidths ([-1, 50, 50, 75, 75])
+ if not self._form._features['GUI:STATUSBAR:SUPPRESS']:
+ self.__status_bar = self.main_window.CreateStatusBar()
+ self.__status_bar.SetFieldsCount(5)
+ self.__status_bar.SetStatusWidths([-1, 50, 50, 75, 75])
- if not self._form._features.get ('GUI:MENUBAR:SUPPRESS'):
- mb = MenuBar (self._uiDriver, self.main_window, self._form)
- self.menuBar = mb.menubar
+ if not self._form._features.get('GUI:MENUBAR:SUPPRESS'):
+ MenuBar(self._uiDriver, self.main_window, self._form)
if not self._form._features.get ('GUI:TOOLBAR:SUPPRESS'):
- tlb = ToolBar (self._uiDriver, self.base_panel, self._form)
- self.base_sizer.Add (tlb.toolbar, 0, wx.EXPAND)
+ tlb = ToolBar(self._uiDriver, base_panel, self._form)
+ base_sizer.Add(tlb.toolbar, 0, wx.EXPAND)
- # Now create the page container
+ # Now create the page container depending on the tabbed attribute
if self._form._layout.tabbed != 'none':
style = self._TAB_STYLE[self._form._layout.tabbed]
- container = wx.Notebook(self.base_panel, -1, style = style)
+ container = wx.Notebook(base_panel, -1, style = style)
else:
- container = wx.Panel(self.base_panel, -1)
+ container = wx.Panel(base_panel, -1)
cont_sizer = wx.BoxSizer(wx.VERTICAL)
container.SetSizer(cont_sizer)
- self.base_sizer.Add(container, 1, wx.EXPAND | wx.ALL, 6)
-
+ # and add it to the base sizer
+ base_sizer.Add(container, 1, wx.EXPAND | wx.ALL, 6)
self._containerToolkitWidget = container
return self.main_window
@@ -125,21 +153,21 @@
def __load_icons(self):
- idir = GConfig.getInstalledBase('forms_images', 'common_images')
- iconBundle = wx.IconBundle()
+ idir = GConfig.getInstalledBase('forms_images', 'common_images')
+ iconBundle = wx.IconBundle()
- for sz in [16, 32, 64]:
- fn = os.path.join(idir, 'forms', 'default',
- 'gnue-%sx%s.png' % (sz, sz))
- if os.path.exists(fn):
- # On wxMSW loading an icon directly from a file doesn't work, so
- # we need to copy the icons from a bitmap on the fly
- icon = wx.Icon(fn, wx.BITMAP_TYPE_PNG)
- icon.CopyFromBitmap(wx.Image(fn).ConvertToBitmap())
+ for size in [16, 32, 64]:
+ fname = os.path.join(idir, 'forms', 'default',
+ 'gnue-%sx%s.png' % (size, size))
+ if os.path.exists(fname):
+ # On wxMSW loading an icon directly from a file doesn't work,
so
+ # we need to copy the icons from a bitmap on the fly
+ icon = wx.Icon(fname, wx.BITMAP_TYPE_PNG)
+ icon.CopyFromBitmap(wx.Image(fname).ConvertToBitmap())
- iconBundle.AddIcon(icon)
+ iconBundle.AddIcon(icon)
- return iconBundle
+ return iconBundle
# -------------------------------------------------------------------------
@@ -152,7 +180,7 @@
self._containerToolkitWidget.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
self.__on_page_changed, self._containerToolkitWidget)
- self.main_window.SetSizerAndFit(self.master_sizer)
+ self.main_window.SetSizerAndFit(self.__master_sizer)
self.main_window.CenterOnScreen ()
@@ -161,6 +189,11 @@
# -------------------------------------------------------------------------
def show (self):
+ """
+ Show the form or dialog non-modal. This function raises the Frame or
+ Dialog into the front, enables processing of wx.EVT_SIZE events and
+ shows the window.
+ """
self.main_window.Raise ()
@@ -172,7 +205,12 @@
# Show the form/dialog modal
# -------------------------------------------------------------------------
- def showModal(self):
+ def show_modal(self):
+ """
+ Show the form or dialog modal. This function raises the Frame or
+ Dialog into the front, enables processing of wx.EVT_SIZE events and
+ shows the window.
+ """
self.main_window.Raise()
self.sizing_enabled = True
@@ -189,32 +227,16 @@
# -------------------------------------------------------------------------
- # Close the form
- # -------------------------------------------------------------------------
-
- def __on_close(self, event):
-
- if event.CanVeto():
- self._request('EXIT')
- event.Veto()
- else:
- self.sizing_enabled = False
- event.GetEventObject().Destroy()
-
- # -------------------------------------------------------------------------
-
- def __on_page_changed(self, event):
-
- self._request('PAGE', data=event.GetSelection())
- event.Skip()
-
-
- # -------------------------------------------------------------------------
# Show the requested page
# -------------------------------------------------------------------------
def show_page(self, page_index):
+ """
+ Show a given <page> in the current container.
+ @param page_index: the zero-based index of the page to show
+ """
+
container = self._containerToolkitWidget
if isinstance (container, wx.Notebook):
container.SetSelection(page_index)
@@ -227,57 +249,99 @@
# -------------------------------------------------------------------------
- # Change to the requested page
+ # Event-handler
# -------------------------------------------------------------------------
- def gotoPage (self, page):
+ def __on_close(self, event):
+ if event.CanVeto():
+ self._request('EXIT')
+ event.Veto()
+ else:
+ self.sizing_enabled = False
+ event.GetEventObject().Destroy()
- self.show_page(page._pageIndex)
+ # -------------------------------------------------------------------------
+ def __on_page_changed(self, event):
+ self._request('PAGE', data=event.GetSelection())
+ event.Skip()
+
# -------------------------------------------------------------------------
# User feedback functions
# -------------------------------------------------------------------------
def _ui_begin_wait_(self):
+ """
+ Display the hourglass cursor on all windows of the application.
+ """
wx.BeginBusyCursor()
# -------------------------------------------------------------------------
def _ui_end_wait_(self):
+ """
+ Display the normal mouse cursor on all windows of the application.
+ """
wx.EndBusyCursor()
# -------------------------------------------------------------------------
def _ui_beep_(self):
+ """
+ Ring the system bell.
+ """
wx.Bell()
# -------------------------------------------------------------------------
def _ui_update_status_(self, tip, record_status, insert_status,
record_number, record_count, page_number, page_count):
+ """
+ Update the apropriate section of the status bar with the given
+ information.
- if not self.statusBar:
+ @param tip: message to be shown in the first section
+ @param record_status: message for the second section
+ @param insert_status: message for the third section
+ @param record_number: number of the current record
+ @param record_count: number of available records. Together with
+ record_number this will be set into the 4th section
+ @param page_number: number of the current page
+ @param page_count: number of available pages. Together with the
+ page_number this will be set into the 5th section
+ """
+ if not self.__status_bar:
return
if tip is not None:
- self.statusBar.SetStatusText(tip, 0)
+ self.__status_bar.SetStatusText(tip, 0)
if record_status is not None:
- self.statusBar.SetStatusText(record_status, 1)
+ self.__status_bar.SetStatusText(record_status, 1)
if insert_status is not None:
- self.statusBar.SetStatusText(insert_status, 2)
+ self.__status_bar.SetStatusText(insert_status, 2)
if record_number and record_count:
- self.statusBar.SetStatusText(
+ self.__status_bar.SetStatusText(
"%s/%s" % (record_number, record_count), 3)
if page_number and page_count:
- self.statusBar.SetStatusText(
+ self.__status_bar.SetStatusText(
"%s/%s" % (page_number, page_count), 4)
+ # -------------------------------------------------------------------------
+ def _ui_goto_page_(self, page):
+ """
+ Change the page shown in the form.
+
+ @param page: UIPage instance of the page to be displayed
+ """
+ self.show_page(page._pageIndex)
+
+
# =============================================================================
# Widget configuration
# =============================================================================
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r8529 - in trunk/gnue-forms/src/uidrivers: _base _base/widgets _commonGuiToolkit curses/widgets gtk2/widgets gtk2/widgets/form html/widgets html/widgets/form qt/widgets qt/widgets/form win32/widgets win32/widgets/form wx/widgets wx/widgets/form wx26/widgets,
johannes <=