Author: reinhard Date: 2009-12-09 15:06:51 -0600 (Wed, 09 Dec 2009) New Revision: 10108
Modified: trunk/gnue-forms/src/GFObjects/GFButton.py trunk/gnue-forms/src/GFObjects/GFContainer.py trunk/gnue-forms/src/GFObjects/GFEntry.py trunk/gnue-forms/src/GFObjects/GFGridLine.py trunk/gnue-forms/src/GFObjects/GFPage.py trunk/gnue-forms/src/GFObjects/GFTabStop.py trunk/gnue-forms/src/uidrivers/curses/UIdriver.py trunk/gnue-forms/src/uidrivers/curses/widgets/_base.py trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py trunk/gnue-forms/src/uidrivers/qt3/widgets/_base.py trunk/gnue-forms/src/uidrivers/qt3/widgets/entry.py trunk/gnue-forms/src/uidrivers/qt4/widgets/_base.py trunk/gnue-forms/src/uidrivers/qt4/widgets/entry.py trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py Log: Disable labels for disabled controls, and disable boxes which only contain disabled children. Modified: trunk/gnue-forms/src/GFObjects/GFButton.py =================================================================== --- trunk/gnue-forms/src/GFObjects/GFButton.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/GFObjects/GFButton.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -83,7 +83,7 @@ # Determine whether this widget is enabled or disabled # ------------------------------------------------------------------------- - def _is_enabled_(self, index): + def _is_enabled_(self, index=None): """ Return True if the widget should be enabled, False if it should be disabled. Modified: trunk/gnue-forms/src/GFObjects/GFContainer.py =================================================================== --- trunk/gnue-forms/src/GFObjects/GFContainer.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/GFObjects/GFContainer.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -36,6 +36,8 @@ A base class for all GFObjects that can be containers """ + ui_enabled = True + # ------------------------------------------------------------------------- # Determine the focus order of a given list of entries # ------------------------------------------------------------------------- @@ -102,3 +104,33 @@ returnValue.extend(tabStop) return returnValue + + + # ------------------------------------------------------------------------- + # Determine whether this container is enabled or disabled + # ------------------------------------------------------------------------- + + def update_status(self): + """ + Update the enabled/disabled status for this widget. + """ + + # This is never called for GFBlock objects. + + for child in self._children: + # Safety check for comments + if hasattr(child, '_is_enabled_'): + if child._is_enabled_(): + new_ui_enabled = True + break + if hasattr(child, 'ui_enabled'): + if child.ui_enabled: + new_ui_enabled = True + break + else: + new_ui_enabled = False + + if new_ui_enabled != self.ui_enabled: + self.ui_enabled = new_ui_enabled + self.uiWidget._ui_set_enabled_(self.ui_enabled) + self.getParent().update_status() Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py =================================================================== --- trunk/gnue-forms/src/GFObjects/GFEntry.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/GFObjects/GFEntry.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -109,7 +109,7 @@ # Determine whether this widget is enabled or disabled # ------------------------------------------------------------------------- - def _is_enabled_(self, index): + def _is_enabled_(self, index=None): """ Return True if the widget should be enabled, False if it should be disabled. Modified: trunk/gnue-forms/src/GFObjects/GFGridLine.py =================================================================== --- trunk/gnue-forms/src/GFObjects/GFGridLine.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/GFObjects/GFGridLine.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -47,6 +47,7 @@ def __init__(self, parent=None): GFContainer.__init__(self, parent, "GFGridLine") + # ------------------------------------------------------------------------- # Number of rows has changed # ------------------------------------------------------------------------- @@ -54,3 +55,17 @@ def rows_changed(self, new_rows): self._rows = new_rows + + + # ------------------------------------------------------------------------- + # Determine whether this container is enabled or disabled + # ------------------------------------------------------------------------- + + def update_status(self): + """ + Update the enabled/disabled status for this widget. + """ + + # We never consider grids disabled, because they are at least useful to + # scroll to a different record. + pass Modified: trunk/gnue-forms/src/GFObjects/GFPage.py =================================================================== --- trunk/gnue-forms/src/GFObjects/GFPage.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/GFObjects/GFPage.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -167,3 +167,16 @@ """ self.processTrigger('POST-FOCUSOUT') + + + # ------------------------------------------------------------------------- + # Determine whether this container is enabled or disabled + # ------------------------------------------------------------------------- + + def update_status(self): + """ + Update the enabled/disabled status for this widget. + """ + + # We never disable whole pages. + pass Modified: trunk/gnue-forms/src/GFObjects/GFTabStop.py =================================================================== --- trunk/gnue-forms/src/GFObjects/GFTabStop.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/GFObjects/GFTabStop.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -348,13 +348,14 @@ for index in range(refresh_start, self.__last_enabled_row + 1): self.uiWidget._ui_set_enabled_(index, self._is_enabled_(index)) + self.getParent().update_status() # ------------------------------------------------------------------------- # Determine whether this widget is enabled or disabled # ------------------------------------------------------------------------- - def _is_enabled_(self, index): + def _is_enabled_(self, index=None): """ Return True if the widget should be enabled, False if it should be disabled. @@ -384,7 +385,7 @@ return False # Attached field is not editable in current mode: not navigable. - if isinstance(self, GFFieldBound) and not self._field.is_editable(): + if isinstance(self, GFFieldBound) and not self._field.is_editable(0): return False # Control not navigable in query mode. @@ -574,7 +575,7 @@ # Determine whether this widget is enabled or disabled # ------------------------------------------------------------------------- - def _is_enabled_(self, index): + def _is_enabled_(self, index=None): """ Return True if the widget should be enabled, False if it should be disabled. @@ -583,7 +584,10 @@ if not GFTabStop._is_enabled_(self, index): return False else: - offset = index - self._visibleIndex + if index is None: + offset = 0 + else: + offset = index - self._visibleIndex return self._field.is_editable(offset) Modified: trunk/gnue-forms/src/uidrivers/curses/UIdriver.py =================================================================== --- trunk/gnue-forms/src/uidrivers/curses/UIdriver.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/uidrivers/curses/UIdriver.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -70,20 +70,21 @@ curses.init_pair(9, curses.COLOR_WHITE, curses.COLOR_RED) self.attr = {} - self.attr['title'] = curses.color_pair(1) - self.attr['page'] = curses.color_pair(2) - self.attr['currentpage'] = curses.color_pair(3) - self.attr['background'] = curses.color_pair(4) - self.attr['entry'] = curses.color_pair(5) - self.attr['focusentry'] = curses.color_pair(6) + curses.A_BOLD - self.attr['disabled'] = curses.color_pair(5) + curses.A_BOLD - self.attr['status'] = curses.color_pair(7) - self.attr['fkeys'] = curses.color_pair(4) - self.attr['infomsg'] = curses.color_pair(8) + curses.A_BOLD - self.attr['warnmsg'] = curses.color_pair(9) + curses.A_BOLD - self.attr['errormsg'] = curses.color_pair(9) + curses.A_BOLD \ - + curses.A_BLINK - self.attr['window 1'] = curses.color_pair(5) + self.attr['title'] = curses.color_pair(1) + self.attr['page'] = curses.color_pair(2) + self.attr['currentpage'] = curses.color_pair(3) + self.attr['background'] = curses.color_pair(4) + self.attr['backdisabled'] = curses.color_pair(4) + curses.A_BOLD + self.attr['entry'] = curses.color_pair(5) + self.attr['focusentry'] = curses.color_pair(6) + curses.A_BOLD + self.attr['disabled'] = curses.color_pair(5) + curses.A_BOLD + self.attr['status'] = curses.color_pair(7) + self.attr['fkeys'] = curses.color_pair(4) + self.attr['infomsg'] = curses.color_pair(8) + curses.A_BOLD + self.attr['warnmsg'] = curses.color_pair(9) + curses.A_BOLD + self.attr['errormsg'] = curses.color_pair(9) + curses.A_BOLD \ + + curses.A_BLINK + self.attr['window 1'] = curses.color_pair(5) self.attr['focusdisabled'] = curses.color_pair(6) self.__current_form = None Modified: trunk/gnue-forms/src/uidrivers/curses/widgets/_base.py =================================================================== --- trunk/gnue-forms/src/uidrivers/curses/widgets/_base.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/uidrivers/curses/widgets/_base.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -277,6 +277,16 @@ _hints_ = {} # ------------------------------------------------------------------------- + # Set enabled/disabled status for this box + # ------------------------------------------------------------------------- + + def _ui_set_enabled_(self, value): + + # Nothing to do for a box + pass + + + # ------------------------------------------------------------------------- # Order the size hints according to their proportion # ------------------------------------------------------------------------- Modified: trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py =================================================================== --- trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -336,6 +336,20 @@ attribute = property(__get_attr, None, None, """ The current attribute to use for this widget """) + # ------------------------------------------------------------------------- + + def __get_background_attribute(self): + + if not self.enabled: + attr = 'backdisabled' + else: + attr = 'background' + + return self.entry._uiDriver.attr[attr] + + background_attribute = property(__get_background_attribute, None, None, + """ The current attribute to use for this widget """) + # ============================================================================= # Static Text style entry # ============================================================================= @@ -354,7 +368,7 @@ text = ("%s" % self.value)[:self.width] text += ' ' * (self.width - len(text)) self.entry._parent.write(self.left, self.top, text, - self.entry._uiDriver.attr['background']) + self.background_attribute) @@ -752,7 +766,7 @@ text = label[:self.width] text += ' ' * (self.width - len(text)) self.entry._parent.write(self.left, self.top, text, - self.entry._uiDriver.attr['background']) + self.background_attribute) if self.value is None: text = '[-]' Modified: trunk/gnue-forms/src/uidrivers/qt3/widgets/_base.py =================================================================== --- trunk/gnue-forms/src/uidrivers/qt3/widgets/_base.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/uidrivers/qt3/widgets/_base.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -135,6 +135,15 @@ # ------------------------------------------------------------------------- + # Enable/disable this box + # ------------------------------------------------------------------------- + + def _ui_set_enabled_(self, value): + + self._container.setEnabled(value) + + + # ------------------------------------------------------------------------- # Does this box need both columns or rows ? # ------------------------------------------------------------------------- Modified: trunk/gnue-forms/src/uidrivers/qt3/widgets/entry.py =================================================================== --- trunk/gnue-forms/src/uidrivers/qt3/widgets/entry.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/uidrivers/qt3/widgets/entry.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -147,7 +147,10 @@ # ------------------------------------------------------------------------- def _ui_set_enabled_(self, index, value): + self.widgets[index].setEnabled(value) + if not self.in_grid and self.label is not None: + self.label.setEnabled(value) # ------------------------------------------------------------------------- Modified: trunk/gnue-forms/src/uidrivers/qt4/widgets/_base.py =================================================================== --- trunk/gnue-forms/src/uidrivers/qt4/widgets/_base.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/uidrivers/qt4/widgets/_base.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -137,6 +137,15 @@ # ------------------------------------------------------------------------- + # Enable/disable this box + # ------------------------------------------------------------------------- + + def _ui_set_enabled_(self, value): + + self._container.setEnabled(value) + + + # ------------------------------------------------------------------------- # Does this box need both columns or rows ? # ------------------------------------------------------------------------- Modified: trunk/gnue-forms/src/uidrivers/qt4/widgets/entry.py =================================================================== --- trunk/gnue-forms/src/uidrivers/qt4/widgets/entry.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/uidrivers/qt4/widgets/entry.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -139,7 +139,10 @@ # ------------------------------------------------------------------------- def _ui_set_enabled_(self, index, value): + self.widgets[index].setEnabled(value) + if not self.in_grid and self.label is not None: + self.label.setEnabled(value) # ------------------------------------------------------------------------- Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py =================================================================== --- trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/uidrivers/wx/widgets/_base.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -335,19 +335,20 @@ # If a label is requested for the box, we have to wrap the container # with a StaticBoxSizer. if self._gfObject.label is not None and not self._gfObject.has_label: - box_title = wx.StaticBox(self._container, -1, self._gfObject.label) - box = wx.StaticBoxSizer(box_title, wx.VERTICAL) + self.box = wx.StaticBox(self._container, -1, self._gfObject.label) + box_sizer = wx.StaticBoxSizer(self.box, wx.VERTICAL) # Border inside the box is 6 pixel according to GNOME Human # Interface Guidlines. - box.Add(self._sizer, 1, wx.EXPAND | wx.ALL, 6) + box_sizer.Add(self._sizer, 1, wx.EXPAND | wx.ALL, 6) - add = box + add = box_sizer # Add another 6 pixel above and below the box (additionally to the # 6 pixel horizontal gap that exist anyway) according to GNOME # Human Interface Guidlines. border = 6 else: + self.box = None if self._gfObject.label is not None: self.label = wx.StaticText(parent, -1, self._gfObject.label) add = self._sizer @@ -364,6 +365,18 @@ # ------------------------------------------------------------------------- + # Enable/disable this box + # ------------------------------------------------------------------------- + + def _ui_set_enabled_(self, value): + + if self.label: + self.label.Enable(value) + elif self.box: + self.box.Enable(value) + + + # ------------------------------------------------------------------------- # Do we need both rows/columns # ------------------------------------------------------------------------- Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py =================================================================== --- trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py 2009-12-09 17:27:09 UTC (rev 10107) +++ trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py 2009-12-09 21:06:51 UTC (rev 10108) @@ -449,7 +449,10 @@ # ------------------------------------------------------------------------- def _ui_set_enabled_(self, index, value): + self.widgets[index].Enable(value) + if not self.in_grid and self.label is not None: + self.label.Enable(value) # ------------------------------------------------------------------------- _______________________________________________ commit-gnue mailing list commit-gnue@gnu.org http://lists.gnu.org/mailman/listinfo/commit-gnue