commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

r5807 - in trunk/gnue-forms/src: . GFObjects uidrivers/wx uidrivers/wx/w


From: btami
Subject: r5807 - in trunk/gnue-forms/src: . GFObjects uidrivers/wx uidrivers/wx/widgets
Date: Wed, 12 May 2004 06:28:44 -0500 (CDT)

Author: btami
Date: 2004-05-12 06:28:43 -0500 (Wed, 12 May 2004)
New Revision: 5807

Modified:
   trunk/gnue-forms/src/GFDisplayHandler.py
   trunk/gnue-forms/src/GFObjects/GFEntry.py
   trunk/gnue-forms/src/GFParser.py
   trunk/gnue-forms/src/uidrivers/wx/common.py
   trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py
   trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py
Log:
implemented listbox widget as a new entry style

Modified: trunk/gnue-forms/src/GFDisplayHandler.py
===================================================================
--- trunk/gnue-forms/src/GFDisplayHandler.py    2004-05-12 01:59:38 UTC (rev 
5806)
+++ trunk/gnue-forms/src/GFDisplayHandler.py    2004-05-12 11:28:43 UTC (rev 
5807)
@@ -852,7 +852,93 @@
     return True
 
 
+#############################################################################
+#
+# Handler for Listbox types
+#
+class ListboxDisplayHandler(FieldDisplayHandler):
 
+  def __init__(self, *args, **params):
+
+    FieldDisplayHandler.__init__(self, *args, **params)
+
+    # My events...
+    self.subevents.registerEventListeners( {
+           'requestREPLACEVALUE' : self.replaceText } )
+
+
+  def beginEdit(self, event):
+    if self.editing == True and self.modified == False:
+      return
+
+    if not self._loadedAllowedValues and not 
hasattr(self.field,'_allowedValues'):
+      self.field.allowedValues()
+      self._loadedAllowedValues = True
+
+    self.editing = True
+    self.modified = False
+
+    # TODO: Replace with formatter
+    self.setValue(self.field.getValue())
+
+    if self.value == None:
+      self.work = ""
+    else:
+      try:
+        self.work = self.field._allowedValues ["%s" % self.value]
+      except KeyError:
+        self.work = ""
+        event.__error__ = True
+        event.__errortext__ = _("Invalid value '%s' for keyed pull-down 
field") % self.value
+
+    self._buildDisplay()
+
+    self.cursor = len(self.display)
+
+  # TODO: Replace with format mask
+  def _buildDisplayHelper(self, value, editing):
+    if value in (None,""):
+      return ""
+
+    if editing:
+      val = string.lower(value)
+      for disp in self.field._allowedValuesDescr:
+        if string.lower(disp[:len(val)]) == val:
+          display = 
self.field._allowedValues[self.field._allowedValuesReverse[disp]]
+          return display
+      return value
+
+    if self.field._allowedValues.has_key ("%s" % value):
+      return self.field._allowedValues ["%s" % value]
+    else:
+      return ""
+
+  def _buildDisplay(self):
+    if self.editing:
+      self.display = self._buildDisplayHelper(self.work, True)
+      if self.cursor > len(self.work):
+        self.work = self.display
+    else:
+      self.display = self._buildDisplayHelper(self.value, False)
+
+
+  def replaceText(self, event):
+    self.selection1 = 0
+    self.selection2 = len(self.display)
+    self.addText(event)
+
+
+  def _buildValue(self):
+    if self.work == "":
+      self.value = '' # None
+    else:
+      try:
+        self.value = self.field._allowedValuesReverse[self.display]
+      except KeyError:
+        return False
+    return True
+
+
 #############################################################################
 #
 # Handler for Checkbox types

Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFEntry.py   2004-05-12 01:59:38 UTC (rev 
5806)
+++ trunk/gnue-forms/src/GFObjects/GFEntry.py   2004-05-12 11:28:43 UTC (rev 
5807)
@@ -132,6 +132,9 @@
     elif self.style == 'dropdown':
       self._displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,
                self._form._instance.eventController)
+    elif self.style == 'listbox':
+      self._displayHandler = GFDisplayHandler.ListboxDisplayHandler(self,
+               self._form._instance.eventController)
     elif self.style == 'password':
       self._displayHandler = GFDisplayHandler.PasswordDisplayHandler(self,
                self._form._instance.eventController,

Modified: trunk/gnue-forms/src/GFParser.py
===================================================================
--- trunk/gnue-forms/src/GFParser.py    2004-05-12 01:59:38 UTC (rev 5806)
+++ trunk/gnue-forms/src/GFParser.py    2004-05-12 11:28:43 UTC (rev 5807)
@@ -563,6 +563,7 @@
                   'default': {'Label': _('Default')},
                   'password': {'Label': _('Password/Hidden')},
                   'dropdown': {'Label': _('Dropdown/Combo box')},
+                  'listbox': {'Label': _('Listbox')},
                   'checkbox': {'Label': _('Checkbox')},
                   'label': {'Label': _('Label (non-editable)')} },
                'Default': 'default',

Modified: trunk/gnue-forms/src/uidrivers/wx/common.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/common.py 2004-05-12 01:59:38 UTC (rev 
5806)
+++ trunk/gnue-forms/src/uidrivers/wx/common.py 2004-05-12 11:28:43 UTC (rev 
5807)
@@ -241,7 +241,11 @@
                      code=10)
 
     elif command:
-      action = events.Event('request%s' % command)
+      # let listbox handle PgUp,PgDn,Up,Down keys
+      if object.style == 'listbox' and object._type == 'GFEntry' and (keycode 
in (312,313,317,319)):
+        event.Skip()
+      else:
+        action = events.Event('request%s' % command)
 
     elif object._type == 'GFButton':
       action = events.Event('buttonActivated',object)

Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py  2004-05-12 01:59:38 UTC 
(rev 5806)
+++ trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py  2004-05-12 11:28:43 UTC 
(rev 5807)
@@ -105,7 +105,7 @@
     # Check if foreign key changed
     object = self._uiDriver._IdToGFObj[widget.GetId()]
     try:
-      if object.style == "dropdown" and \
+      if (object.style == "dropdown" or object.style == "listbox") and \
           not object._field._allowedValues == widget._origAllowedValues:
         try:
           # Not in wx 2.2.x

Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py  2004-05-12 01:59:38 UTC 
(rev 5806)
+++ trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py  2004-05-12 11:28:43 UTC 
(rev 5807)
@@ -88,7 +88,29 @@
                                     # For some strange reason it is best to 
initialize it True as if
                                     # the list would be dropped down at 
startup, though it is not...
 
+    elif style == 'listbox':
+      if event.initialize:
+        choices = []
+        for val in object._field.allowedValues()[1]:
+          choices.append(wxEncode(val))          
+      else:
+        choices = [""]
 
+#      choices.sort()
+
+      newWidget = wxListBox(event.container, -1, defaultPoint,
+                              wxSize(self.itemWidth,self.itemHeight),
+                             choices, wxLB_SINGLE)
+
+      newWidget.SetValue = lambda v: newWidget.SetStringSelection(v, True)
+
+      if event.initialize:
+        newWidget._origAllowedValues = object._field._allowedValues
+        newWidget.SetValue("")
+        newWidget_Id = newWidget.GetId()
+        EVT_LISTBOX(newWidget, newWidget_Id, self.listboxHandler)
+        EVT_LISTBOX_DCLICK(event.container, newWidget_Id, self.listboxHandler)
+
     elif style == 'label':
       newWidget = wxStaticText(event.container, -1, 
"",defaultPoint,defaultSize,
                                wxST_NO_AUTORESIZE)
@@ -178,6 +200,26 @@
 
     self._eventHandler(action)
     #event.Skip()   #Is it needed here?
+
+
+  def listboxHandler(self, event):
+    """
+    Handles listbox events
+    """
+    action = None
+    eventType = event.GetEventType()    
+    if eventType in [wxEVT_COMMAND_LISTBOX_SELECTED, 
+                     wxEVT_COMMAND_LISTBOX_DOUBLECLICKED]:
+
+      object = _eventObjTowxWindow(event)
+      gfObject = self._uiDriver._IdToGFObj[object.GetId()]
+      selection = event.GetSelection()
+
+      action = events.Event('requestREPLACEVALUE',object=gfObject,
+                            index=selection, text=wxDecode(event.GetString()),
+                          _form=gfObject._form)
+
+    self._eventHandler(action)
     
 
   def checkboxHandler(self,event):





reply via email to

[Prev in Thread] Current Thread [Next in Thread]