[Top][All Lists]
[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' } },
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5792 - in trunk/gnue-forms/src: . GFObjects,
jcater <=