commit-gnue
[Top][All Lists]
Advanced

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

[gnue] r9231 - in trunk/gnue-forms/src: GFObjects input/displayHandlers


From: reinhard
Subject: [gnue] r9231 - in trunk/gnue-forms/src: GFObjects input/displayHandlers uidrivers/curses/widgets uidrivers/gtk2/widgets uidrivers/qt3/widgets uidrivers/win32/widgets uidrivers/wx/widgets uidrivers/wx26/widgets
Date: Mon, 8 Jan 2007 17:13:42 -0600 (CST)

Author: reinhard
Date: 2007-01-08 17:13:36 -0600 (Mon, 08 Jan 2007)
New Revision: 9231

Modified:
   trunk/gnue-forms/src/GFObjects/GFBlock.py
   trunk/gnue-forms/src/GFObjects/GFField.py
   trunk/gnue-forms/src/GFObjects/GFTabStop.py
   trunk/gnue-forms/src/input/displayHandlers/Checkbox.py
   trunk/gnue-forms/src/input/displayHandlers/Cursor.py
   trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py
   trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py
   trunk/gnue-forms/src/uidrivers/qt3/widgets/entry.py
   trunk/gnue-forms/src/uidrivers/win32/widgets/entry.py
   trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py
   trunk/gnue-forms/src/uidrivers/wx26/widgets/entry.py
   trunk/gnue-forms/src/uidrivers/wx26/widgets/image.py
Log:
(Re-)implemented editable Y/N/new/update/null feature.


Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py   2007-01-08 18:59:17 UTC (rev 
9230)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py   2007-01-08 23:13:36 UTC (rev 
9231)
@@ -803,7 +803,7 @@
     # Status information
     # -------------------------------------------------------------------------
 
-    def get_record_status(self):
+    def get_record_status(self, offset=0):
         """
         Find out about the status of the record.
 
@@ -814,9 +814,12 @@
         if self.__resultset is None:
             return None
 
-        rec = self.__resultset.current
-        if rec is None:
+        record_number = self.__resultset.getRecordNumber() + offset
+        if record_number < 0 or \
+                record_number >= self.__resultset.getRecordCount():
             return None
+        else:
+            rec = self.__resultset[record_number]
 
         # try functions that do not depend on detail records first, because
         # they are faster

Modified: trunk/gnue-forms/src/GFObjects/GFField.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFField.py   2007-01-08 18:59:17 UTC (rev 
9230)
+++ trunk/gnue-forms/src/GFObjects/GFField.py   2007-01-08 23:13:36 UTC (rev 
9231)
@@ -215,23 +215,38 @@
     # Determine wether a field is editable or not
     # -------------------------------------------------------------------------
 
-    def isEditable(self):
+    def is_editable(self, offset):
 
-        mode = self._form.getCurrentMode()
-
-        if mode == 'query':
+        if self._block.mode == 'query':
             return self._block.queryable
 
         elif self._form.readonly:
             return False
         else:
-            return (mode == 'new' and self.editable in ('Y', 'new', 'null') \
-                    and self._block.editable in ('Y', 'new')) or \
-                   (mode == 'edit' and self._block.editable in ('Y', 'update')\
-                    and (self.editable in ('Y','update') or \
-                        (self.editable == 'null' and self.isEmpty())))
+            if self._block.editable == 'N':
+                return False
+            if self.editable == 'N':
+                return False
 
+            new = (self._block.get_record_status(offset) \
+                    in ['empty', 'inserted', 'void'])
 
+            if self._block.editable == 'new' and not new:
+                return False
+            if self.editable == 'new' and not new:
+                return False
+
+            if self._block.editable == 'update' and new:
+                return False
+            if self.editable == 'update' and new:
+                return False
+
+            if self.editable == 'null' and self.__get_value(offset) is not 
None:
+                return False
+
+            return True
+
+
     # -------------------------------------------------------------------------
     # Autocomplete a value for this field
     # -------------------------------------------------------------------------

Modified: trunk/gnue-forms/src/GFObjects/GFTabStop.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFTabStop.py 2007-01-08 18:59:17 UTC (rev 
9230)
+++ trunk/gnue-forms/src/GFObjects/GFTabStop.py 2007-01-08 23:13:36 UTC (rev 
9231)
@@ -258,6 +258,12 @@
                 if isinstance(self, GFFieldBound) and refresh_start is not 
None:
                     self.refresh_ui(refresh_start, self._rows - 1)
 
+                    # Set widgets to editable or non-editable
+                    for index in range(refresh_start, last_enabled_row + 1):
+                        offset = index - self._visibleIndex
+                        self.uiWidget._ui_set_editable_(index,
+                                self._field.is_editable(offset))
+
         finally:
             # If this was the currently focused widget, move the focus along
             if self._form.get_focus_object() is self:

Modified: trunk/gnue-forms/src/input/displayHandlers/Checkbox.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/Checkbox.py      2007-01-08 
18:59:17 UTC (rev 9230)
+++ trunk/gnue-forms/src/input/displayHandlers/Checkbox.py      2007-01-08 
23:13:36 UTC (rev 9231)
@@ -86,6 +86,10 @@
   # Set checkbox to boolean value
   def __set (self, value):
     if value != self.display:
+      # Don't allow any changes if we aren't editing.
+      if not self.editing:
+          self.generateRefreshEvent()   # Reset old value on UI
+          return
       self.display = value
       self.modified = True
       self.generateRefreshEvent()
@@ -104,8 +108,6 @@
 
   # Handle requestTOGGLECHKBOX event
   def handleToggleChkbox (self, event):
-    if not self.editing:
-      return
     if event.data == None:
       self.__toggle()
     else:
@@ -114,7 +116,7 @@
 
   def beginEdit(self):
 
-    self.editing = self.field.isEditable()
+    self.editing = self.field.is_editable(0)
     self.display = self.build_display(self.field.get_value(), self.editing)
     self.modified = False
     self._cursor = 0

Modified: trunk/gnue-forms/src/input/displayHandlers/Cursor.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/Cursor.py        2007-01-08 
18:59:17 UTC (rev 9230)
+++ trunk/gnue-forms/src/input/displayHandlers/Cursor.py        2007-01-08 
23:13:36 UTC (rev 9231)
@@ -156,7 +156,7 @@
         with this display handler, and creates the string to display in the
         form.
         """
-        self.editing = self.field.isEditable()
+        self.editing = self.field.is_editable(0)
         self.modified = False
         self.display = self.build_display(self.field.get_value(), True)
         self._cursor = len(self.display)
@@ -196,9 +196,6 @@
 
     def _addText(self, event):
 
-        if not self.editing:
-            return
-
         if self._selection1 is not None:
             # If text is selected, then we will replace
             (start, end) = self.getSelectionArea()
@@ -212,9 +209,6 @@
 
     def _replace_text(self, event):
 
-        if not self.editing:
-            return
-
         if hasattr(event, 'position'):
             new_cursor = event.position
         else:
@@ -226,9 +220,6 @@
 
     def _insertTextAt(self, event):
 
-        if not self.editing:
-            return
-
         self.__change_text(event.position, event.position, event.text,
                 event.position)
 
@@ -236,9 +227,6 @@
 
     def _deleteRange(self, event):
 
-        if not self.editing:
-            return
-
         self.__change_text(event.start_pos, event.end_pos, u"",
                 event.start_pos)
 
@@ -257,9 +245,6 @@
 
     def _backspace(self, event):
 
-        if not self.editing:
-            return
-
         # If there is a selection, delete the selected portion.
         if self._selection1 is not None:
             (start, end) = self.getSelectionArea()
@@ -284,9 +269,6 @@
 
     def _delete(self, event):
 
-        if not self.editing:
-            return
-
         # If there is a selection, delete the selected portion.
         if self._selection1 is not None:
             (start, end) = self.getSelectionArea()
@@ -310,6 +292,11 @@
 
     def __change_text(self, start, end, text, new_cursor):
 
+        # Don't accept any changes if we aren't editing.
+        if not self.editing:
+            self.generateRefreshEvent() # reset the UI to old state.
+            return
+
         # Get the text to be added forcing to specific case if necessary.
         if self.field._lowercase:
             text = text.lower()

Modified: trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py      2007-01-08 
18:59:17 UTC (rev 9230)
+++ trunk/gnue-forms/src/uidrivers/curses/widgets/entry.py      2007-01-08 
23:13:36 UTC (rev 9231)
@@ -114,6 +114,16 @@
 
 
     # -------------------------------------------------------------------------
+    # Set "editable" status for this widget
+    # -------------------------------------------------------------------------
+
+    def _ui_set_editable_(self, index, editable):
+
+        # Not much we can do here.
+        pass
+
+
+    # -------------------------------------------------------------------------
     # Set value for entry
     # -------------------------------------------------------------------------
 

Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py        2007-01-08 
18:59:17 UTC (rev 9230)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py        2007-01-08 
23:13:36 UTC (rev 9231)
@@ -223,6 +223,16 @@
 
 
   # ---------------------------------------------------------------------------
+  # Set "editable" status for this widget
+  # ---------------------------------------------------------------------------
+
+  def _ui_set_editable_(self, index, editable):
+
+    # FIXME: grey out entry, disallow changes if possible
+    pass
+
+
+  # ---------------------------------------------------------------------------
   # Set the cursor position in a widget to position
   # ---------------------------------------------------------------------------
 

Modified: trunk/gnue-forms/src/uidrivers/qt3/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/qt3/widgets/entry.py 2007-01-08 18:59:17 UTC 
(rev 9230)
+++ trunk/gnue-forms/src/uidrivers/qt3/widgets/entry.py 2007-01-08 23:13:36 UTC 
(rev 9231)
@@ -146,8 +146,21 @@
     def _ui_disable_(self, index):
         self.widgets[index].setEnabled(False)
 
+
     # -------------------------------------------------------------------------
+    # Set "editable" status for this widget
+    # -------------------------------------------------------------------------
 
+    def _ui_set_editable_(self, index, editable):
+
+        # TODO: grey out entry, disallow changes if possible.
+        pass
+
+
+    # -------------------------------------------------------------------------
+    # Set value and cursor position
+    # -------------------------------------------------------------------------
+
     def _ui_set_value_(self, index, value):
         """
         This function sets the value of a widget.

Modified: trunk/gnue-forms/src/uidrivers/win32/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/win32/widgets/entry.py       2007-01-08 
18:59:17 UTC (rev 9230)
+++ trunk/gnue-forms/src/uidrivers/win32/widgets/entry.py       2007-01-08 
23:13:36 UTC (rev 9231)
@@ -111,6 +111,16 @@
         self.widgets[index].Enable(False)
 
 
+    # -------------------------------------------------------------------------
+    # Set "editable" status for this widget
+    # -------------------------------------------------------------------------
+
+    def _ui_set_editable_(self, index, editable):
+
+        # TODO: grey out entry, disallow changes if possible.
+        pass
+
+
     # 
---------------------------------------------------------------------------
     # Clipboard and selection
     # 
---------------------------------------------------------------------------

Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py  2007-01-08 18:59:17 UTC 
(rev 9230)
+++ trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py  2007-01-08 23:13:36 UTC 
(rev 9231)
@@ -200,6 +200,16 @@
     self.widgets[index].Enable(False)
 
 
+  # ---------------------------------------------------------------------------
+  # Set "editable" status for this widget
+  # ---------------------------------------------------------------------------
+
+  def _ui_set_editable_(self, index, editable):
+
+    # TODO: grey out entry, disallow changes if possible.
+    pass
+
+
   # -------------------------------------------------------------------------
   # Clipboard and selection
   # -------------------------------------------------------------------------

Modified: trunk/gnue-forms/src/uidrivers/wx26/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx26/widgets/entry.py        2007-01-08 
18:59:17 UTC (rev 9230)
+++ trunk/gnue-forms/src/uidrivers/wx26/widgets/entry.py        2007-01-08 
23:13:36 UTC (rev 9231)
@@ -389,6 +389,26 @@
 
 
     # -------------------------------------------------------------------------
+    # Set "editable" status for this widget
+    # -------------------------------------------------------------------------
+
+    def _ui_set_editable_(self, index, editable):
+
+        # Simple text controls can be explicitly set to non-editable, so they
+        # don't accept keyboard input.
+        if isinstance(self.widgets[index], wx.TextCtrl):
+            self.widgets[index].SetEditable(editable)
+
+        # We set the background color to grey for all kinds of widgets if they
+        # are not editable, so the user can see some difference.
+        if editable:
+            colour = wx.NullColour
+        else:
+            colour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE)
+        self.widgets[index].SetBackgroundColour(colour)
+
+
+    # -------------------------------------------------------------------------
     # Set the value of a widget
     # -------------------------------------------------------------------------
 

Modified: trunk/gnue-forms/src/uidrivers/wx26/widgets/image.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx26/widgets/image.py        2007-01-08 
18:59:17 UTC (rev 9230)
+++ trunk/gnue-forms/src/uidrivers/wx26/widgets/image.py        2007-01-08 
23:13:36 UTC (rev 9231)
@@ -101,6 +101,15 @@
         return (width, height)
 
 
+    # -------------------------------------------------------------------------
+    # Set "editable" status for this widget
+    # -------------------------------------------------------------------------
+
+    def _ui_set_editable_(self, index, editable):
+
+        pass
+
+
     # ------------------------------------------------------------------------
     # Set the widget's PIL
     # ------------------------------------------------------------------------





reply via email to

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