[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r8158 - trunk/gnue-forms/src/uidrivers/wx26
From: |
johannes |
Subject: |
[gnue] r8158 - trunk/gnue-forms/src/uidrivers/wx26 |
Date: |
Fri, 10 Feb 2006 05:28:33 -0600 (CST) |
Author: johannes
Date: 2006-02-10 05:28:33 -0600 (Fri, 10 Feb 2006)
New Revision: 8158
Modified:
trunk/gnue-forms/src/uidrivers/wx26/dialogs.py
Log:
Fixed the InputDialog to behave the same way on wxMSW, wxGTK and wxMac
Modified: trunk/gnue-forms/src/uidrivers/wx26/dialogs.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx26/dialogs.py 2006-02-10 07:57:47 UTC
(rev 8157)
+++ trunk/gnue-forms/src/uidrivers/wx26/dialogs.py 2006-02-10 11:28:33 UTC
(rev 8158)
@@ -67,7 +67,7 @@
bold.SetWeight (wx.FONTWEIGHT_BOLD)
# On Windows the SMALL_FONT is really too small
- if '__WXMSW__' in wx.PlatformInfo:
+ if 'wxMSW' in wx.PlatformInfo:
small = wx.NORMAL_FONT
else:
small = wx.SMALL_FONT
@@ -179,7 +179,6 @@
self.inputData = {}
self.__dropdowns = {}
- self.__controls = []
self.__lastEntry = None
row = 0
@@ -187,27 +186,24 @@
ftp = fieldtype.lower ()
if ftp in ['label', 'warning']:
- self.__add_text (row, label, ftp == 'warning')
+ self.__addText (row, label, ftp == 'warning')
elif ftp == 'image':
self.__addImage (row, name)
- elif ftp == 'string':
- self.__add_string (row, label, name, default, elements)
+ elif ftp in ['string', 'password']:
+ self.__addString (row, label, name, default, elements, ftp != 'string')
- elif ftp == 'password':
- self.__add_string (row, label, name, default, elements, True)
-
elif ftp == 'dropdown':
- self.__add_dropdown (row, label, name, default, master, elements)
+ self.__addChoice (row, label, name, default, master, elements)
- gbs.AddGrowableCol (1)
row += 1
+ gbs.AddGrowableCol (1)
topSizer.Add (gbs, 1, wx.EXPAND | wx.ALL, 6)
- topSizer.Add (wx.StaticLine (self, wx.ID_STATIC, wx.DefaultPosition,
- wx.DefaultSize, wx.LI_HORIZONTAL), 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 8)
+ topSizer.Add (wx.StaticLine (self, wx.ID_STATIC, style = wx.LI_HORIZONTAL),
+ 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 8)
buttonSizer = self.CreateButtonSizer (wx.OK | (cancel and wx.CANCEL or 0) |
wx.NO_DEFAULT)
@@ -215,18 +211,14 @@
self.SetSizerAndFit (topSizer)
- if self.__controls:
- self.__controls [0].SetFocus ()
-
self.CenterOnScreen ()
-
# ---------------------------------------------------------------------------
# Add a centered, static label or warning
# ---------------------------------------------------------------------------
- def __add_text (self, row, label, warning = False):
+ def __addText (self, row, label, warning = False):
text = wx.StaticText (self, -1, label, style = wx.ALIGN_CENTRE)
@@ -237,42 +229,39 @@
wx.ALIGN_CENTER_HORIZONTAL)
-
# ---------------------------------------------------------------------------
# Add a text control for a string or a password
# ---------------------------------------------------------------------------
- def __add_string (self, row, label, name, default, elements, pwd = False):
+ def __addString (self, row, label, name, default, elements, pwd = False):
text = wx.StaticText (self, wx.ID_ANY, label)
self.gbs.Add (text, (row, 0), flag = wx.ALIGN_CENTER_VERTICAL)
+ self.inputData [name] = default or ''
+
eStyle = wx.TE_PROCESS_ENTER
if pwd:
eStyle |= wx.TE_PASSWORD
- self.inputData [name] = default or ''
-
entry = wx.TextCtrl (self, wx.ID_ANY, default or '', style = eStyle)
entry._field = name
if elements and elements [0][0]:
entry.SetToolTip (wx.ToolTip (elements [0][0]))
- wx.EVT_TEXT (entry, -1, self.__entryChanged)
- wx.EVT_TEXT_ENTER (entry, -1, self.__enterPressed)
+ self.Bind (wx.EVT_TEXT, self.OnEntryChanged, entry)
+ self.Bind (wx.EVT_TEXT_ENTER, self.OnEnter, entry)
self.gbs.Add (entry, (row, 1), flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
+ self.__lastEntry = entry
- self.__addToControls (entry)
-
-
# ---------------------------------------------------------------------------
# Add a series of dropdowns into a single row
# ---------------------------------------------------------------------------
- def __add_dropdown (self, row, label, name, default, master, elements):
+ def __addChoice (self, row, label, name, default, master, elements):
self.gbs.Add (wx.StaticText (self, wx.ID_ANY, label), (row, 0),
flag = wx.ALIGN_CENTER_VERTICAL)
@@ -280,38 +269,28 @@
rowSizer = wx.BoxSizer (wx.HORIZONTAL)
perMaster = self.__dropdowns.setdefault (master, {})
- drops = perMaster.setdefault (name, [])
+ perRow = perMaster.setdefault (name, [])
border = 0
for (tip, allowedValues) in elements:
- (keys, data, defItem) = self.__getModel (master, allowedValues, default)
+ widget = wx.Choice (self, -1)
+ widget._master = master
+ widget._name = name
+ widget._allowed = allowedValues
+ widget._default = default
- data = [str (d) for d in data]
- combo = wx.ComboBox (self, -1, defItem or '', choices = data,
- style = wx.CB_READONLY)
+ self.__updateWidget (widget)
- combo._keys = keys
- combo._data = data
- combo._default = default
- combo._field = name
- combo._master = master
- combo._allowedValues = allowedValues
-
if tip:
- combo.SetToolTip (wx.ToolTip (tip))
+ widget.SetToolTip (wx.ToolTip (tip))
- drops.append (combo)
- wx.EVT_COMBOBOX (combo, -1, self.__comboChanged)
- wx.EVT_TEXT_ENTER (combo, -1, self.__enterPressed)
+ self.Bind (wx.EVT_CHOICE, self.OnChoiceChanged, widget)
+ perRow.append (widget)
- if defItem:
- self.inputData [name] = default
-
- rowSizer.Add (combo, 1, wx.EXPAND | wx.LEFT, border)
+ rowSizer.Add (widget, 1, wx.EXPAND | wx.LEFT, border)
border = 4
+ self.__lastEntry = widget
- self.__addToControls (combo)
-
self.gbs.Add (rowSizer, (row, 1), flag =
wx.EXPAND|wx.ALIGN_CENTER_VERTICAL)
@@ -336,7 +315,7 @@
# Whenever an entry will be changed, keep inputData in snyc
# ---------------------------------------------------------------------------
- def __entryChanged (self, event):
+ def OnEntryChanged (self, event):
entry = event.GetEventObject ()
self.inputData [entry._field] = entry.GetValue ()
@@ -346,123 +325,84 @@
# If <Enter> is pressed within a text control, move the focus
# ---------------------------------------------------------------------------
- def __enterPressed (self, event):
+ def OnEnter (self, event):
entry = event.GetEventObject ()
+
if entry == self.__lastEntry:
self.EndModal (wx.ID_OK)
+ else:
+ entry.Navigate (wx.NavigationKeyEvent.IsForward)
- for item in self.__controls:
- if item._index == entry._index + 1:
- item.SetFocus ()
-
# ---------------------------------------------------------------------------
- # On change of a combo, make sure to keep all others and depending in sync
+ # After the selection of a choice has change, keep all others in sync
# ---------------------------------------------------------------------------
-
- def __comboChanged (self, event):
- combo = event.GetEventObject ()
- value = combo.GetStringSelection ()
- newKey = combo._keys [combo._data.index (value)]
+ def OnChoiceChanged (self, event):
- self.inputData [combo._field] = newKey
- self.__updateDeps (combo, combo._master, combo._field, newKey)
+ widget = event.GetEventObject ()
+ newKey = widget.GetClientData (event.GetSelection ())
+ self.inputData [widget._name] = newKey
+ # Make sure all controls stay in sync
+ for item in self.__dropdowns [widget._master][widget._name]:
+ item.SetSelection (event.GetSelection ())
- # ---------------------------------------------------------------------------
- # Get the data model for a given master from a data dictionary
- # ---------------------------------------------------------------------------
+ # Keep all depending controls in sync
+ self.__updateDepending (widget._name)
- def __getModel (self, master, dataDict, default = None):
- defaultItem = None
-
- if master:
- values = dataDict.get (self.inputData.get (master), {})
- else:
- values = dataDict
-
- if values:
- (keys, data) = (values.keys (), values.values ())
- if default and default in keys:
- defaultItem = data [keys.index (default)]
- else:
- keys = data = []
-
- return (keys, data, defaultItem)
-
-
# ---------------------------------------------------------------------------
- # Keep all combos in sync and make sure to have depending combos up to date
+ # Update all depending choice widgets
# ---------------------------------------------------------------------------
- def __updateDeps (self, combo, master, element, newKey):
-
- drops = self.__dropdowns [master] [element]
+ def __updateDepending (self, master):
- # First synchronize all dropdowns of the same element
- if len (drops) > 1:
- for item in drops:
- item.SetValue (item._data [item._keys.index (newKey)])
+ if master in self.__dropdowns:
+ for name in self.__dropdowns [master].keys ():
+ drops = self.__dropdowns [master] [name]
+ for i in drops:
+ self.__updateWidget (i)
- # If this dropdown is master of others, make sure to keep them in sync too
- if self.__dropdowns.has_key (element):
- self.__updateDepending (element, newKey)
+ self.__updateDepending (name)
# ---------------------------------------------------------------------------
- # Update all depending combos of a given master
+ # Update the choices of a given choice widget
# ---------------------------------------------------------------------------
+
+ def __updateWidget (self, widget):
- def __updateDepending (self, master, masterKey):
+ widget.Freeze ()
+ widget.Clear ()
- drops = self.__dropdowns [master]
+ if widget._master:
+ values = widget._allowed.get (self.inputData.get (widget._master), {})
+ else:
+ values = widget._allowed
- for (datakey, combos) in drops.items ():
- for combo in combos:
- (keys, data, defItem) = self.__getModel (master, combo._allowedValues,
- combo._default)
- data = [str(d) for d in data]
- if keys or combo._keys:
- combo.Enable (True)
- combo.Clear ()
- for description in data:
- combo.Append (str(description))
+ if values:
+ for (k, v) in values.items ():
+ widget.Append (v, k)
- combo._keys = keys
- combo._data = data
+ if widget._default in values:
+ widget.SetStringSelection (values [widget._default])
+ self.inputData [widget._name] = widget._default
+ else:
+ self.inputData [widget._name] = widget.GetClientData (0)
+ widget.SetSelection (0)
- if not keys:
- combo.SetValue ('')
- combo.Disable ()
- if datakey in self.inputData:
- del self.inputData [datakey]
- else:
- if defItem is not None:
- combo.SetValue (defItem)
- self.inputData [datakey] = combo._default
+ else:
+ if widget._name in self.inputData:
+ del self.inputData [widget._name]
- else:
- ckey = combo._keys [combo._data.index (combo.GetValue ())]
- self.inputData [datakey] = ckey
+ widget.Enable (len (values))
+ widget.Thaw ()
+ widget.Refresh ()
# ---------------------------------------------------------------------------
- # Add a widget to the list of controls, and give it an index
- # ---------------------------------------------------------------------------
-
- def __addToControls (self, widget):
-
- self.__controls.append (widget)
- widget._index = len (self.__controls)
-
- if not isinstance (widget, wx.Button):
- self.__lastEntry = widget
-
-
- # ---------------------------------------------------------------------------
# Show the modal dialog and clear inputData on cancelling
# ---------------------------------------------------------------------------
@@ -619,7 +559,7 @@
# ---------------------------------------------------------------------------
cname = {'c1': 'demoa', 'c2': 'demob'}
- ckey = {'c1': 'ck-A', 'c2': 'ck-B'}
+ ckey = {'c1': 'ck-A' , 'c2': 'ck-B'}
wija = {'c1': {'04': '2004', '05': '2005'},
'c2': {'24': '2024', '25': '2025', '26': '2026'}}
@@ -639,6 +579,7 @@
('sepp', {'50': 'se 50', '100': 'se 100', '9': 'se 9'})]),
('Noe', '_depp', 'label', 'furz', None, []),
('Das ist jetzt ein Fehler', None, 'warning', None, None, []),
+
('Firma', 'company', 'dropdown', 'c1', None,
[('Name', cname), ('Code', ckey)]),
('Wirtschaftsjahr', 'wija', 'dropdown', '05', 'company',
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r8158 - trunk/gnue-forms/src/uidrivers/wx26,
johannes <=