commit-gnue
[Top][All Lists]
Advanced

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

r5792 - in trunk/gnue-forms/src: . GFObjects


From: jcater
Subject: r5792 - in trunk/gnue-forms/src: . GFObjects
Date: Sat, 8 May 2004 16:46:59 -0500 (CDT)

Author: jcater
Date: 2004-05-08 16:46:58 -0500 (Sat, 08 May 2004)
New Revision: 5792

Modified:
   trunk/gnue-forms/src/GFDisplayHandler.py
   trunk/gnue-forms/src/GFForm.py
   trunk/gnue-forms/src/GFInstance.py
   trunk/gnue-forms/src/GFObjects/GFBlock.py
   trunk/gnue-forms/src/GFObjects/GFEntry.py
   trunk/gnue-forms/src/GFObjects/GFField.py
   trunk/gnue-forms/src/GFParser.py
Log:
* Implemented field.editable, queryable xml attributes (editable can be Y, N, 
null (only when null), new (only on new record), and update (only when editing 
existing records). 
* Implemented block.editable, deletable, queryable xml attributes (editable can 
be Y, N, new, and update)
* Added many new settable properties to trigger namespace, such as 
field.editable, field.maxLength, field.minLength, field.case, etc.
* Added field.value and entry.value to trigger namespaces as alternative to 
field.get() and field.set()
* Improved GFParser self-documentation to make GNUe Designer's Property Editor 
a little clearer
* Misc other cleanup


Modified: trunk/gnue-forms/src/GFDisplayHandler.py
===================================================================
--- trunk/gnue-forms/src/GFDisplayHandler.py    2004-05-08 21:27:37 UTC (rev 
5791)
+++ trunk/gnue-forms/src/GFDisplayHandler.py    2004-05-08 21:46:58 UTC (rev 
5792)
@@ -121,7 +121,7 @@
     """
     Called when a widget first gets focus.
     """
-    self.editing = True
+    self.editing = self.field.isEditable(event._form.getCurrentMode())
     self.modified = False
 
     # TODO: Replace with formatter
@@ -184,20 +184,11 @@
 
   def addText(self, event):
 
+    if not self.editing:
+      return
+
     value = event.text
 
-    if (self.field.readonly and not self.field._block.mode=='query'):
-      event.__error__ = True
-      event.__errortext__ = _("Cannot modify field.  Form is read only")
-      return
-    elif self.field.editOnNull and \
-         self.value != None and \
-         self.value != "" and \
-         not self.field._block._resultSet.current.isPending():
-      event.__error__ = True
-      event.__errortext__ = _("Cannot modify field after initial creation.")
-      return
-
     # Do some appropriate checks on the text
     # TODO: This will be moved to the mask system!!
 
@@ -206,8 +197,8 @@
     if self.field._uppercase:
       value = string.upper(event.text)
 
-    if hasattr(self.field,'max_length') and \
-       len(self.work)  + len(value) > self.field.max_length:
+    if hasattr(self.field,'maxLength') and \
+       len(self.work)  + len(value) > self.field.maxLength:
       return
 
     if ( self.field._numeric and \
@@ -254,6 +245,9 @@
 
   # Insert text at defined position
   def insertTextAt(self, event):
+    if not self.editing:
+      return
+
     # set cursor position
     self.cursor = event.position
 
@@ -262,6 +256,9 @@
 
   # Delete Text Range
   def deleteRange(self, event):
+    if not self.editing:
+      return
+
     self.selection1 = event.start_pos
     self.selection2 = event.end_pos
     self.cursor = event.position
@@ -269,7 +266,10 @@
 
   # Delete backwards one character
   def backspace(self, event):
+    if not self.editing:
+      return
 
+
     # If we have a "selection",
     # then act like a "delete"
     if self.selection1 != None:
@@ -287,6 +287,9 @@
 
   # Delete forward one character
   def delete(self, event):
+    if not self.editing:
+      return
+
     event.overstrike = True
     event.text = ""
 
@@ -435,12 +438,18 @@
 
 
   def clipboardCut(self, event):
+    if not self.editing:
+      return self.clipboardCopy(event)
+
     self.clipboardCopy(event)
     edevent = events.Event("requestKEYPRESS", text="", _form=event._form)
     self.dispatchEvent(edevent)
 
 
   def clipboardPaste(self, event):
+    if not self.editing:
+      return
+
     event.text = self.dispatchEvent(events.Event('getCLIPBOARD'))
     if event.text != None:
       self.addText(event)
@@ -551,7 +560,7 @@
     """
     Called when a widget first gets focus.
     """
-    self.editing = True
+    self.editing = self.field.isEditable(event._form.getCurrentMode())
     self.modified = False
 
     # TODO: Replace with formatter
@@ -765,7 +774,7 @@
       self.field.allowedValues()
       self._loadedAllowedValues = True
 
-    self.editing = True
+    self.editing = self.field.isEditable(event._form.getCurrentMode())
     self.modified = False
 
     # TODO: Replace with formatter
@@ -814,6 +823,9 @@
 
 
   def replaceText(self, event):
+    if not self.editing:
+      return
+
     self.selection1 = 0
     self.selection2 = len(self.display)
     self.addText(event)
@@ -892,6 +904,9 @@
 
 
   def toggle(self, event):
+    if not self.editing:
+      return
+
     if event.data == None:
       # saving our checkboxes from Python 2.3 boolean type (it kills sql 
update)
       self.work = int(not self.work)
@@ -904,7 +919,7 @@
 
   def beginEdit(self, event):
 
-    self.editing = True
+    self.editing = self.field.isEditable(event._form.getCurrentMode())
     self.modified = False
 
     self.setValue(self.field.getValue())
@@ -1000,6 +1015,9 @@
 
 
   def clipboardPaste(self, event):
+    if not self.editing:
+      return
+
     event.text = self.dispatchEvent(events.Event('getClipboard'))
     if event.text != None:
       self.work = self._sanitizeValue(event.data)

Modified: trunk/gnue-forms/src/GFForm.py
===================================================================
--- trunk/gnue-forms/src/GFForm.py      2004-05-08 21:27:37 UTC (rev 5791)
+++ trunk/gnue-forms/src/GFForm.py      2004-05-08 21:46:58 UTC (rev 5792)
@@ -324,9 +324,9 @@
 
         if self._currentEntry._type != 'GFButton':
           val = self._currentEntry.getValue()
-          if self._currentEntry._field.min_length and val is not None and 
len(str(val)):
-            if len(str(val)) < self._currentEntry._field.min_length:
-              message = _("Minimum required length %d" % 
self._currentEntry._field.min_length )
+          if self._currentEntry._field.minLength and val is not None and 
len(str(val)):
+            if len(str(val)) < self._currentEntry._field.minLength:
+              message = _("Minimum required length %d" % 
self._currentEntry._field.minLength )
               # Piggybacking off the triggers message box code
               self.triggerShowMessageBox(message)
               return
@@ -619,14 +619,15 @@
     mode = self.getCurrentMode()
 
 
-    if currentBlock.transparent and not (
-          onlyInBlock or
-          currentBlock.autoNextRecord and not (
+    if currentBlock.transparent and not ( \
+          onlyInBlock or \
+          currentBlock.autoNextRecord and not ( \
               currentBlock.isEmpty() or \
               (not reverse and currentBlock.isLastRecord() and \
-                   not currentBlock.autoCreate) or \
-              (reverse and currentBlock.isFirstRecord())
-          )):
+                   not (currentBlock.autoCreate and \
+                        currentBlock.editable in ('Y','new')) or \
+              (reverse and currentBlock.isFirstRecord()) \
+          ))):
       source = self._currentEntry._page.getFocusOrder()
       stayInBlock = False
     else:

Modified: trunk/gnue-forms/src/GFInstance.py
===================================================================
--- trunk/gnue-forms/src/GFInstance.py  2004-05-08 21:27:37 UTC (rev 5791)
+++ trunk/gnue-forms/src/GFInstance.py  2004-05-08 21:46:58 UTC (rev 5792)
@@ -763,7 +763,7 @@
   def deleteRecord(self, event):
     if event._form.readonly:
       self.dispatchEvent('formALERT',_('Form is readonly'),_form=event._form)
-    elif event._form._currentBlock.restrictDelete:
+    elif not event._form._currentBlock.deletable:
       self.dispatchEvent('formALERT',_('Block does not allow 
delete'),_form=event._form)
     else:
       event._form.deleteRecord()
@@ -779,7 +779,7 @@
       return
     if event._form.readonly:
       self.dispatchEvent('formALERT',_('Form is readonly'),_form=event._form)
-    elif event._form._currentBlock.restrictInsert:
+    elif event._form._currentBlock.editable not in ('Y','new'):
       self.dispatchEvent('formALERT',_('Block does not allow 
insert'),_form=event._form)
     else:
       event._form.newRecord()
@@ -892,25 +892,23 @@
   #
   def changeFocus(self, event):
     if not event._form.endEditing():
-      return
+      return False
     if event.data._type=='GFEntry' or event.data._type=='GFImage':
-      if not event.data._navigable:
-        # is it possible ever to get into non-navigable field?
-        return
-      if (event.data.readonly and event._form._currentBlock.mode!='query'):
-        GDebug.printMesg(2,"You can focus readonly field, but you won't be 
able to change it.")
+      if not event.data.isNavigable(event._form.getCurrentMode()):
+        return False
 
       newEntry = event.data
       message = event._form.changeFocus(newEntry)
       if message:
         self.displayMessageBox( message)
+        return False
 
-        return
-
       self.dispatchEvent('gotoENTRY',object=event._form._currentEntry, 
_form=event._form)
       self.updateRecordStatus(event._form)
       self.updateTip(event._form)
 
+    return True
+
   #
   # requestQuery
   #

Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py   2004-05-08 21:27:37 UTC (rev 
5791)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py   2004-05-08 21:46:58 UTC (rev 
5792)
@@ -103,43 +103,60 @@
 
 
     self._triggerGlobal = 1
-    self._triggerFunctions={'clear':{'function':self.processClear,
-                                     'description':''},
-                            'commit':{'function':self.commit,
-                                      'description':''},
-                            'deleteRecord':{'function':self.deleteRecord,
-                                            'description':''},
-                            'gotoRecord':{'function':self.jumpRecord,
-                                          'description':''},
-                            'firstRecord':{'function':self.firstRecord,
-                                           'description':'Navigates the block 
to the first record it contains.'},
-                            'isEmpty':{'function':self.isEmpty,
-                                       'description':'Returns True if block is 
empty.'},
-                            'isSaved':{'function':self.isSaved,
-                                       'description':'Returns True if block 
contains no modified records.'},
-                            'lastRecord':{'function':self.lastRecord,
-                                      'description':'Navigates the block to 
the last record it contains.'},
-                            'newRecord':{'function':self.newRecord,
-                                         'description':''},
-                            'nextRecord':{'function':self.nextRecord,
-                                          'description':'Navigates the block 
to the next record in sequence.'},
-                            'prevRecord':{'function':self.prevRecord,
-                                          'description':'Navigates the block 
to the previous record in sequence.'},
-                            'jumpRecords':{'function':self.jumpRecords,
-                                          'description':'Navigates the 
specified number of records.'},
-                            'rollback':{'function':self.processRollback,
-                                        'description':'Clears all records 
regardless of state from the block'},
-                            'initQuery':{'function':self.initQuery,
-                                        'description':'Prepares the block for 
query input.'},
-                            'copyQuery':{'function':self.copyQuery,
-                                        'description':'Prepares the block for 
query input.'},
-                            'cancelQuery':{'function':self.cancelQuery,
-                                        'description':'Cancels query input.'},
-                            'executeQuery':{'function':self.processQuery,
-                                            'description':'Executes the 
current query.'},
-                            }
+    self._triggerFunctions={
+        'clear':{'function':self.processClear,
+                  'description':''},
+        'commit':{'function':self.commit,
+                  'description':''},
+        'deleteRecord':{'function':self.deleteRecord,
+                        'description':''},
+        'gotoRecord':{'function':self.jumpRecord,
+                      'description':''},
+        'firstRecord':{'function':self.firstRecord,
+                        'description':'Navigates the block to the first record 
it contains.'},
+        'isEmpty':{'function':self.isEmpty,
+                    'description':'Returns True if block is empty.'},
+        'isSaved':{'function':self.isSaved,
+                    'description':'Returns True if block contains no modified 
records.'},
+        'lastRecord':{'function':self.lastRecord,
+                  'description':'Navigates the block to the last record it 
contains.'},
+        'newRecord':{'function':self.newRecord,
+                      'description':''},
+        'nextRecord':{'function':self.nextRecord,
+                      'description':'Navigates the block to the next record in 
sequence.'},
+        'prevRecord':{'function':self.prevRecord,
+                      'description':'Navigates the block to the previous 
record in sequence.'},
+        'jumpRecords':{'function':self.jumpRecords,
+                      'description':'Navigates the specified number of 
records.'},
+        'rollback':{'function':self.processRollback,
+                    'description':'Clears all records regardless of state from 
the block'},
+        'initQuery':{'function':self.initQuery,
+                    'description':'Prepares the block for query input.'},
+        'copyQuery':{'function':self.copyQuery,
+                    'description':'Prepares the block for query input.'},
+        'cancelQuery':{'function':self.cancelQuery,
+                    'description':'Cancels query input.'},
+        'executeQuery':{'function':self.processQuery,
+                        'description':'Executes the current query.'},
+        }
 
-    self._triggerProperties={'parent':  {'get':self.getParent}}
+    self._triggerProperties={
+          'parent':        {'get':self.getParent},
+          'autoCommit':    {'set':self.triggerSetAutoCommit,
+                            'get':self.triggerGetAutoCommit },
+          'queryable':     {'set':self.triggerSetQueryable,
+                            'get':self.triggerGetQueryable },
+          'editable':      {'set':self.triggerSetEditable,
+                            'get':self.triggerGetEditable },
+          'autoCreate':    {'set':self.triggerSetAutoCreate,
+                            'get':self.triggerGetAutoCreate },
+          'deletable':     {'set':self.triggerSetDeletable,
+                            'get':self.triggerGetDeletable },
+          'transparent':   {'set':self.triggerSetTransparent,
+                            'get':self.triggerGetTransparent },
+          'autoNextRecord':{'set':self.triggerSetAutoNextRecord,
+                            'get':self.triggerGetAutoNextRecord },
+       }
 
 
   # Iterator support (Python 2.2+)
@@ -163,6 +180,14 @@
     if hasattr(self, 'rowSpacer'):
       self._gap = self.rowSpacer
 
+    if hasattr(self, 'restrictDelete') and self.restrictDelete:
+      self.deletable = False
+      del self.__dict__['restrictDelete']
+
+    if hasattr(self, 'restrictInsert') and self.restrictInsert:
+      self.editable = 'update'
+      del self.__dict__['restrictInsert']
+
     if hasattr(self,'datasource'):
       self.datasource = string.lower(self.datasource)
 
@@ -597,6 +622,55 @@
   def registerScrollbar(self, sb):
     self._scrollbars.append(sb)
 
+
+  ###################################################################
+  #
+  # Trigger settable stuff
+  #
+  def triggerSetAutoCommit(self, value):
+    self.autoCommit = not not value # Force boolean
+
+  def triggerGetAutoCommit(self):
+    return self.autoCommit
+
+  def triggerSetQueryable(self, value):
+    self.queryable = not not value # Force boolean
+
+  def triggerGetQueryable(self):
+    return self.queryable
+
+  def triggerSetEditable(self, value):
+    assert (value in ('Y','new','update','N'))
+    self.editable = value
+
+  def triggerGetEditable(self):
+    return self.editable
+
+  def triggerSetAutoCreate(self, value):
+    self.autoCreate = not not value # Force boolean
+
+  def triggerGetAutoCreate(self):
+    return self.autoCreate
+
+  def triggerSetDeletable(self, value):
+    self.deletable = not not value # Force boolean
+
+  def triggerGetDeletable(self):
+    return self.deletable
+
+  def triggerSetTransparent(self, value):
+    self.transparent = not not value # Force boolean
+
+  def triggerGetTransparent(self):
+    return self.transparent
+
+  def triggerSetAutoNextRecord(self, value):
+    self.autoNextRecord = not not value # Force boolean
+
+  def triggerGetAutoNextRecord(self):
+    return self.autoNextRecord
+
+
 #
 # _generateConditional
 #

Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFEntry.py   2004-05-08 21:27:37 UTC (rev 
5791)
+++ trunk/gnue-forms/src/GFObjects/GFEntry.py   2004-05-08 21:46:58 UTC (rev 
5792)
@@ -67,14 +67,20 @@
                          }
     self._triggerFunctions={'set':{'function':self.triggerSetValue},
                             'get':{'function':self.getValue}
+
                             }
     self._triggerSet = self.triggerSetValue
     self._triggerGet = self.getValue
 
     self._triggerProperties = {
-                                'rows': { 'get': self._getRows,
-                                        }
-                              }
+          'rows':     { 'get': self._getRows},
+          'value':    { 'set':self.triggerSetValue,
+                        'get':self.getValue },
+          'hidden':   { 'set':self.triggerSetHidden,
+                        'get':self.triggerGetHidden },
+          'navigable':{ 'set':self.triggerSetNavigable,
+                        'get':self.triggerGetNavigable },
+      }
 
   def _buildObject(self):
     return GFTabStop._buildObject(self)
@@ -155,14 +161,35 @@
       self._gap = self._field._gap
 
 
-  # TODO: Conversion:  Does this belong here or not?
+  def _getRows(self):
+    return self._rows
+
+  def isNavigable(self, mode):
+    # TODO: Check for read-only, etc
+    return self.navigable and not self.hidden
+
+  def isEditable(self, mode):
+    return self._field.isEditable(mode)
+
+  ####################################################################
+  #
+  # Trigger functions
+  #
   def getValue(self, *args, **parms):
     return self._field.getValue(*args, **parms)
 
-  # TODO: Conversion:  Does this belong here or not?
   def triggerSetValue(self, *args, **parms):
     return self._field.triggerSetValue(*args, **parms)
 
-  def _getRows(self):
-    return self._rows
+  def triggerSetHidden(self, value):
+    self.hidden = not not value # Force boolean
 
+  def triggerGetHidden(self):
+    return self.hidden
+
+  def triggerSetNavigable(self, value):
+    self.navigable = not not value # Force boolean
+
+  def triggerGetNavigable(self):
+    return self.navigable
+

Modified: trunk/gnue-forms/src/GFObjects/GFField.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFField.py   2004-05-08 21:27:37 UTC (rev 
5791)
+++ trunk/gnue-forms/src/GFObjects/GFField.py   2004-05-08 21:46:58 UTC (rev 
5792)
@@ -95,34 +95,50 @@
                             'get':{'function':self.getValue},
                             'clear': {'function': self.resetToDefault}
                            }
-    self._triggerProperties={'readonly':{'set':self.setReadonly,
-                                         'get':self.getReadonly
-                                         },
-                             'parent':  {'get':self.getParent}
-                            }
+    self._triggerProperties={
+          'parent':       { 'get':self.getParent},
+          'value':        { 'set':self.triggerSetValue,
+                            'get':self.getValue },
+          'rtrim':        { 'set':self.triggerSetRtrim,
+                            'get':self.triggerGetRtrim },
+          'readonly':     { 'set':self.triggerSetReadonly,
+                            'get':self.triggerGetReadonly },
+          'maxLength':    { 'set':self.triggerSetMaxLength,
+                            'get':self.triggerGetMaxLength },
+          'queryDefault': { 'set':self.triggerSetQueryDefault,
+                            'get':self.triggerGetQueryDefault },
+          'ltrim':        { 'set':self.triggerSetLtrim,
+                            'get':self.triggerGetLtrim },
+          'minLength':    { 'set':self.triggerSetMinLength,
+                            'get':self.triggerGetMinLength },
+          'editable':     { 'set':self.triggerSetEditable,
+                            'get':self.triggerGetEditable },
+          'ignoreCaseOnQuery':{
+                            'set':self.triggerSetIgnoreCaseOnQuery,
+                            'get':self.triggerGetIgnoreCaseOnQuery },
+          'case':         { 'set':self.triggerSetCase,
+                            'get':self.triggerGetCase },
+          'default':      { 'set':self.triggerSetDefault,
+                            'get':self.triggerGetDefault },
+          'defaultToLast':{ 'set':self.triggerSetDefaultToLast,
+                            'get':self.triggerGetDefaultToLast },
+          'required':     { 'set':self.triggerSetRequired,
+                            'get':self.triggerGetRequired },
+          'queryable':    { 'set':self.triggerSetQueryable,
+                            'get':self.triggerGetQueryable },
+      }
     self._triggerSet = self.triggerSetValue
     self._triggerGet = self.getValue
 
 
-  def triggerAutofillBySequence(self,sequenceName):
-    if (not self.getValue()) or self.getValue()=="":
-      sequenceNumber = 
self._block._dataSourceLink._dataObject.triggerExtensions.getSequence(sequenceName)
-      self.setValue(sequenceNumber)
-
   def isEmpty(self):
     return self.getValue() in ("",None)
 
-  def getReadonly(self):
-    return self.readonly
-
-  def setReadonly(self,value):
-    self.readonly = value
-
   def _buildObject(self):
     # Convert deprecated attributes
 
     # Foreign keys
-    # DEPRECATED with 0.4.x
+    # DEPRECATED with 0.4.x .. Delete before 1.0
     if hasattr(self,'foreign_key') and self.foreign_key:
       (self.fk_source, self.fk_key) = string.split(self.foreign_key,'.')
       del self.foreign_key
@@ -130,6 +146,13 @@
       self.fk_description = self.foreign_key_description
       del self.foreign_key_description
 
+    # Deprecated with 0.5.4 .. Delete before 1.0
+    if hasattr(self,'min_length'):
+      self.minLength = self.min_length
+      del self.min_length
+    if hasattr(self,'max_length'):
+      self.maxLength = self.max_length
+      del self.max_length
 
     return GFValue._buildObject(self)
 
@@ -255,18 +278,6 @@
 
     return value
 
-  #
-  # triggerSetValue
-  #
-  # does proper typecasting when value is set via a trigger
-  #
-  def triggerSetValue(self, value):
-    if self.style=='checkbox' and value =='':
-      value = 0
-    if self.typecast == "number" and value != None:
-      value = float(value)
-    self.setValue(value)
-
   # Clear out the current value (setting to null, or default value)
   def resetToDefault(self):
     try:
@@ -365,3 +376,119 @@
     # self._allowedValues = None
     # self.allowedValues()
     pass
+
+  def isEditable(self, mode):
+    if mode == 'query':
+      return self.queryable and self._block.queryable
+    elif self._block._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())))
+
+  ####################################################################
+  #
+  # Trigger functions
+  #
+  def triggerAutofillBySequence(self,sequenceName):
+    if (not self.getValue()) or self.getValue()=="":
+      sequenceNumber = 
self._block._dataSourceLink._dataObject.triggerExtensions.getSequence(sequenceName)
+      self.setValue(sequenceNumber)
+
+  #
+  # triggerSetValue
+  #
+  # does proper typecasting when value is set via a trigger
+  #
+  def triggerSetValue(self, value):
+    if self.style=='checkbox' and value =='':
+      value = 0
+    if self.typecast == "number" and value != None:
+      value = float(value)
+    self.setValue(value)
+
+  def triggerGetReadonly(self):
+    return self.isNavigable(self._block._form.getCurrentMode())
+
+  def triggerSetReadonly(self,value):
+    self.editable = value and 'Y' or 'N'
+
+  def triggerGetEditable(self):
+    return self.editable
+
+  def triggerSetEditable(self, value):
+    if not editable in ('Y','N','null','update','new'):
+      editable = editable and 'Y' or 'N'  # In case they pass a boolean
+    self.editable = editable
+
+  def triggerSetRtrim(self, value):
+    self.rtrim = not not value # Force boolean
+
+  def triggerGetRtrim(self):
+    return self.rtrim
+
+  def triggerSetQueryDefault(self, value):
+    self.queryDefault = value
+
+  def triggerGetQueryDefault(self):
+    return self.queryDefault
+
+  def triggerSetLtrim(self, value):
+    self.ltrim = not not value # Force boolean
+
+  def triggerGetLtrim(self):
+    return self.ltrim
+
+  def triggerSetMinLength(self, value):
+    self.minLength = value
+
+  def triggerGetMinLength(self):
+    return self.minLength
+
+  def triggerSetMaxLength(self, value):
+    self.maxLength = value
+
+  def triggerGetMaxLength(self):
+    return self.maxLength
+
+  def triggerSetIgnoreCaseOnQuery(self, value):
+    self.ignoreCaseOnQuery = not not value # Force boolean
+
+  def triggerGetIgnoreCaseOnQuery(self):
+    return self.ignoreCaseOnQuery
+
+  def triggerSetCase(self, value):
+    assert (value in ('mixed','upper','lower'))
+    self.case = value
+
+  def triggerGetCase(self):
+    return self.case
+
+  def triggerSetDefault(self, value):
+    self.default = value
+
+  def triggerGetDefault(self):
+    return self.default
+
+  def triggerSetDefaultToLast(self, value):
+    self.defaultToLast = not not value # Force boolean
+
+  def triggerGetDefaultToLast(self):
+    return self.defaultToLast
+
+  def triggerSetRequired(self, value):
+    self.required = not not value # Force boolean
+
+  def triggerGetRequired(self):
+    return self.required
+
+  def triggerSetQueryable(self, value):
+    self.queryable = not not value # Force boolean
+
+  def triggerGetQueryable(self):
+    return self.queryable
+

Modified: trunk/gnue-forms/src/GFParser.py
===================================================================
--- trunk/gnue-forms/src/GFParser.py    2004-05-08 21:27:37 UTC (rev 5791)
+++ trunk/gnue-forms/src/GFParser.py    2004-05-08 21:46:58 UTC (rev 5792)
@@ -233,9 +233,30 @@
                               'field changes. Care should be taken when 
{field} is '
                               ' specified as forms could try to commit before 
a new '
                               'record is committable.'},
+            'editable': {
+               'Description': 'Can records be edited/created?',
+               'Label': _('Allow Editing'),
+               'ValueSet': {
+                  'Y': {'Label': _('Yes')},
+                  'N': {'Label': _('No')},
+                  'update': {'Label': _('Update Only')},
+                  'new': {'Label': _('New Records Only')} },
+               'Typecast': GTypecast.text,
+               'Default': 'Y' },
+            'queryable': {
+               'Description': 'Can records be queried?',
+               'Label': _('Allow Querying'),
+               'Typecast': GTypecast.boolean,
+               'Default': True },
+            'deletable': {
+               'Description': 'Can records be deleted?',
+               'Label': _('Allow Deletes'),
+               'Typecast': GTypecast.boolean,
+               'Default': True },
             'restrictDelete':{
                'Typecast': GTypecast.boolean,
                'Default': False,
+               'Deprecated': 'Use deletable="N"',
                'Label': _('Prevent Deletes'),
                'Description': 'If set then the user will be unable to request '
                                'that a record be deleted via the user 
interface.' },
@@ -243,6 +264,7 @@
                'Typecast': GTypecast.boolean,
                'Default': False,
                'Label': _('Prevent Inserts'),
+               'Deprecated': 'Use editable="update"',
                'Description': 'If set then the user will be unable to request '
                               'that new records be inserted into the block.' },
             'datasource': {
@@ -314,12 +336,25 @@
                'Label': _('Field (Database)'),
                'Description': 'The name of the field in the datasource to '
                               'which this widget is tied.' },
+            'maxLength': {
+               'Typecast': GTypecast.whole,
+               'Label': 'Max Text Length',
+               'Description': 'The maximum number of characters the user is '
+                              'allowed to enter into the entry.' },
+            'minLength': {
+               'Typecast': GTypecast.whole,
+               'Label': 'Min Text Length',
+               'Description': 'The minimum number of characters the user must '
+                              'enter into the entry.',
+               'Default': 0 },
             'max_length': {
                'Typecast': GTypecast.whole,
+               'Deprecated': 'Use maxLength',
                'Description': 'The maximum number of characters the user is '
                               'allowed to enter into the entry.' },
             'min_length': {
                'Typecast': GTypecast.whole,
+               'Deprecated': 'Use minLength',
                'Description': 'The minimum number of characters the user must '
                               'enter into the entry.',
                'Default': 0 },
@@ -329,6 +364,8 @@
                'Description': 'It defined the user will be unable to alter '
                               'the contents of this entry. Triggers can still '
                               'alter the value.',
+# TODO: I think this should be deprecated, but will see how others use first
+#               'Deprecated': 'Use editable="N" instead.',
                'Default': False   },
             'required': {
                'Description': 'This object cannot have an empty value prior '
@@ -338,9 +375,9 @@
             'case': {
                'Typecast': GTypecast.name,
                'ValueSet': {
-                  'mixed': {'Label': _('Mixed case (no conversion)')},
-                  'upper': {'Label': _('Convert to upper case')},
-                  'lower': {'Label': _('Convert to lower case')} },
+                  'mixed': {'Label': _('As Entered')},
+                  'upper': {'Label': _('Upper case')},
+                  'lower': {'Label': _('Lower case')} },
                'Default': 'mixed',
                'Description': 'TODO'  },
             'typecast': {
@@ -355,6 +392,7 @@
                               'Possible values are {text}, {number}, {date}.'},
             'value': {
                'Typecast': GTypecast.text,
+               'Deprecated': 'Use default="..." instead',
                'Description': 'TODO' },
 ##            'foreign_key': {
 ##               'Typecast': GTypecast.name,
@@ -388,29 +426,30 @@
                'Typecast': GTypecast.name,
                'Label': _('F/K Refresh Method'),
                'ValueSet': {
-                  'startup': {'Label': _('Only refresh on form startup')},
-                  'change': {'Label': _('Refresh on field modification')},
-                  'commit': {'Label': _('Refresh after record is committed')} 
},
+                  'startup': {'Label': _('On form startup')},
+                  'change': {'Label': _('On field modification')},
+                  'commit': {'Label': _('On commit')} },
                'Default': 'startup',
                'Description': 'TODO' },
             'default': {
                'Typecast': GTypecast.text,
-               'Label': _('Default (New Record)'),
-               'Description': 'The default value for any new records created. '
+               'Label': _('Default (New Records)'),
+               'Description': 'The default value for this field whena new 
record '
+                              'is created. '
                               'If the field is visible the user can override '
                               'the value.' },
             'defaultToLast': {
                'Typecast': GTypecast.boolean,
-               'Label': _('Default to last entry?'),
+               'Label': _('Default to last entry'),
                'Default': False,
-               'Description': 'If true, then new records will default to the '
+               'Description': 'If {Y}, then new records will default to the '
                               'last value the user entered for this field. If '
                               'no new values have been entered, then defaults '
                               'back to the normal {default} setting.' },
             'queryDefault':{
                'Typecast': GTypecast.text,
-               'Label': _('Default (Query)'),
-               'Description': 'The form will be populated with this value '
+               'Label': _('Default (Querying)'),
+               'Description': 'The field will be populated with this value '
                               'automatically when a query is requested. If '
                               'the field is visible the user can still '
                               'override the value.' },
@@ -425,15 +464,25 @@
                'Typecast': GTypecast.boolean,
                'Label': _('Ignore Case on Queries'),
                'Default': False,
-               'Description': 'If defined the entry widget ignores the case '
+               'Description': 'If "Y", the entry widget ignores the case '
                               'of the information entered into the query 
mask.' },
-            'editOnNull': {
+            'editable': {
                'Description': 'Only allow this object to be edited if it '
                               'is currently empty.',
-               'Label': _('Edit Only When Null'),
+               'Label': _('Allow Editing'),
+               'ValueSet': {
+                  'Y': {'Label': _('Yes')},
+                  'N': {'Label': _('No')},
+                  'null': {'Label': _('Null Only')},
+                  'update': {'Label': _('Update Only')},
+                  'new': {'Label': _('New Records Only')} },
+               'Typecast': GTypecast.text,
+               'Default': 'Y' },
+            'queryable': {
+               'Description': 'Is this object queryable?',
+               'Label': _('Allow Query'),
                'Typecast': GTypecast.boolean,
-               'Default': False,
-               'Description': 'TODO' },
+               'Default': True },
             'ltrim': {
                'Label': _('Trim left spaces'),
                'Description': 'Trim extraneous space at '
@@ -499,7 +548,7 @@
             'hidden': {
                'Typecast': GTypecast.boolean,
                'Default': False,
-               'Description': 'If defined the entry widget will not be '
+               'Description': 'If "Y", the entry widget will not be '
                               'displayed on the form. This is usefull for '
                               'fields the user doesn\'t need to know about '
                               'that you wish to update via triggers.'   },
@@ -633,6 +682,18 @@
                   'PIL': {'Label': _('Field contains a PIL encoding of the 
image')} },
                'Default': "URL",
                'Description': 'TODO' },
+            'editable': {
+               'Description': 'Only allow this object to be edited if it '
+                              'is currently empty.',
+               'Label': _('Allow Editing'),
+               'ValueSet': {
+                  'Y': {'Label': _('Yes')},
+                  'N': {'Label': _('No')},
+                  'null': {'Label': _('Null Only')},
+                  'update': {'Label': _('Update Only')},
+                  'new': {'Label': _('New Records Only')} },
+               'Typecast': GTypecast.text,
+               'Default': 'Y' },
             'focusorder': {
                'Typecast': GTypecast.whole,
                'Description': 'TODO'  } },





reply via email to

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