[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/forms/src GFDisplayHandler.py GFEvent.py G...
From: |
Jason Cater |
Subject: |
gnue/forms/src GFDisplayHandler.py GFEvent.py G... |
Date: |
Sun, 17 Feb 2002 01:25:33 -0500 |
CVSROOT: /home/cvs
Module name: gnue
Changes by: Jason Cater <address@hidden> 02/02/17 01:25:32
Modified files:
forms/src : GFDisplayHandler.py GFEvent.py GFForm.py
GFInstance.py GFKeyMapper.py UIbase.py
UIwxpython.py
forms/src/GFObjects: GFBlock.py GFEntry.py
Log message:
new input/display methods
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFDisplayHandler.py.diff?cvsroot=OldCVS&tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFEvent.py.diff?cvsroot=OldCVS&tr1=1.19&tr2=1.20&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFForm.py.diff?cvsroot=OldCVS&tr1=1.149&tr2=1.150&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFInstance.py.diff?cvsroot=OldCVS&tr1=1.29&tr2=1.30&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFKeyMapper.py.diff?cvsroot=OldCVS&tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/UIbase.py.diff?cvsroot=OldCVS&tr1=1.55&tr2=1.56&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/UIwxpython.py.diff?cvsroot=OldCVS&tr1=1.141&tr2=1.142&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFObjects/GFBlock.py.diff?cvsroot=OldCVS&tr1=1.37&tr2=1.38&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFObjects/GFEntry.py.diff?cvsroot=OldCVS&tr1=1.43&tr2=1.44&r1=text&r2=text
Patches:
Index: gnue/forms/src/GFDisplayHandler.py
diff -c gnue/forms/src/GFDisplayHandler.py:1.5
gnue/forms/src/GFDisplayHandler.py:1.6
*** gnue/forms/src/GFDisplayHandler.py:1.5 Sat Feb 16 09:55:52 2002
--- gnue/forms/src/GFDisplayHandler.py Sun Feb 17 01:25:32 2002
***************
*** 23,29 ****
#
# DESCRIPTION:
#
- #
# NOTES:
#
--- 23,28 ----
***************
*** 31,36 ****
--- 30,36 ----
from gnue.common.FormatMasks import DateMask, TextMask, NumberMask
from gnue.common import GDebug, GConfig
+ from GFEvent import *
#############################################################################
***************
*** 41,47 ****
# You should be using one of the
# other types based on this one.
#
! class FieldDisplayHandler:
#####################
--- 41,47 ----
# You should be using one of the
# other types based on this one.
#
! class FieldDisplayHandler(GFEventAware):
#####################
***************
*** 50,68 ****
#
def setValue(self, value):
self.value = value
def getValue(self):
! if self.editing:
self._buildValue()
return self.value
def getDisplay(self):
! return "%s" % self.value
#####################
--- 50,70 ----
#
def setValue(self, value):
+ self.modified = 0
self.value = value
+ self._buildDisplay()
def getValue(self):
! if self.editing and self.modified:
self._buildValue()
return self.value
def getDisplay(self):
! return self.display
#####################
***************
*** 70,96 ****
# Editing methods
#
! def beginEdit(self, cursor=0):
self.editing = 1
- def endEdit(self):
self.selection1 = None
- self.editing = not self._buildValue()
- return not self.editing
! def keyPressed(self, event):
- if selection1:
- replaces = abs(selection2-selection1)
else:
! replaces = 0
- if self._unicode:
- pass
event.__dropped__ = 1
--- 72,216 ----
# Editing methods
#
! def beginEdit(self, event):
! print "Editing"
self.editing = 1
+ self.modified = 0
+
+ # TODO: Replace with formatter
+ if self.value == None:
+ self.work = ""
+ else:
+ self.work = str(self.value)
+
+ self._buildDisplay()
+ self.cursor = len(self.display)
+
+
+ def endEdit(self, event):
+ print "End Editing"
+ # If this event returns __error__, then
+ # the input was invalid and the entry is
+ # still in editing mode. __errortext__
+ # will contain an appropriate error message.
+ #
+ # If no error, then event.modified is true
+ # if the field was modified and the event's
+ # result is the final entry value.
self.selection1 = None
+ if self.modified:
+ if self._buildValue():
+ self.editing = 0
+ event.__results__ = self.value
+ event.modified = self.modified
+ self.entry.setValue(self.value)
+
+ self._buildDisplay()
+
+ else:
+ event.__error__ = 1
+ event.__errortext__ = "The entered value\n " \
+ + " '%s'\n" % self.value \
+ + "is not a valid entry."
+
+
+ def addText(self, event):
+
+ value = event.text
+
+
+ # Do some appropriate checks on the text
+ # TODO: This will be moved to the mask system!!
! if self.entry._lowercase:
! value = string.lower(event.text)
! if self.entry._uppercase:
! value = string.upper(event.text)
!
! if hasattr(self.entry,'max_length') and \
! len(self.work) > self.entry.max_length + len(value):
! return
!
! if ( self.entry._numeric and \
! self.entry._block.mode == 'normal' ):
! for char in value:
! if not (char in string.digits or char in '.'):
! return
!
!
!
! # To do overstrike, we'll fudge by first "highlighting"
! # the character to replace, then use the selection logic.
!
! if hasattr(event,'overstrike') and event.overstrike and \
! self.selection1 == None:
! self.selection1 = self.cursor
! self.selection2 = self.selection1 + 1
!
!
! if self.selection1 != None:
! # If text is selected, then we will replace
!
! s1 = min(self.selection1, self.selection2)
! s2 = max(self.selection1, self.selection2)
!
! self.work = self.work[:s1] \
! + value \
! + self.work[s2:]
!
! self.selection1 = None
! self.cursor = s1 + len(value)
else:
! # Otherwise just graft the new text in place
!
! self.work = self.work[:self.cursor] \
! + value \
! + self.work[self.cursor:]
!
! self.cursor += len(event.text)
event.__dropped__ = 1
+ self.modified = 1
+ self._buildDisplay()
+
+
+ # Delete backwards one character
+ def backspace(self, event):
+
+ # If we have a "selection",
+ # then act like a "delete"
+ if self.selection1 != None:
+ self.delete(event)
+ return
+
+ precurs = self.cursor
+ self.moveCursorLeft(event)
+
+ if self.cursor != precurs:
+ event.overstrike = 1
+ event.text = ""
+ self.addText(event)
+
+
+ # Delete forward one character
+ def delete(self, event):
+ event.overstrike = 1
+ event.text = ""
+ self.addText(event)
+
+
+ # Used by combo boxes
+ # TODO: Should be re-examined
+ def replaceText(self, event):
+ self.value = event.data[1]
+ self.modified = 1
+
+ self._buildDisplay()
***************
*** 99,119 ****
# Cursor movement
#
! def moveCursor(self, position):
! self.selection1 = None
! def moveCursorRelative(self, relative):
! self.selection1 = None
- def moveCursorToEnd(self):
- self.selection1 = None
! def moveCursorToBegin(self):
! self.selection1 = None
! self.moveCursor(0)
#####################
--- 219,263 ----
# Cursor movement
#
! def moveCursorRelative(self, relative):
! pass
! def moveCursor(self, event, selecting=0):
! if not selecting:
! self.selection1 = None
+ self.cursor = min(event.position, len(self.display))
+ def moveCursorLeft(self, event, selecting=0):
+ if not selecting:
+ self.selection1 = None
+
+ if self.cursor > 0:
+ self.cursor -= 1
+
+
+ def moveCursorRight(self, event, selecting=0):
+ if not selecting:
+ self.selection1 = None
+
+ if self.cursor < len(self.display):
+ self.cursor += 1
!
! def moveCursorToEnd(self, event, selecting=0):
! if not selecting:
! self.selection1 = None
!
! self.cursor = len(self.display)
!
!
! def moveCursorToBegin(self, event, selecting=0):
! if not selecting:
! self.selection1 = None
!
! self.cursor = 0
#####################
***************
*** 121,175 ****
# Selection stuff
#
def setSelectionArea(self, cursor1, cursor2):
! self.selection1 = cursor1
! self.selection2 = cursor2
def getSelectionArea(self):
if self.selection1 == None:
return None
else:
! return (self.selection1, self.selection2)
- def moveSelectionCursor(self, relative):
- pass
! def clipboardCopy(self):
! return self.value
! def clipboardCut(self):
! value = self.value
! self.value = None
! return value
! def clipboardPaste(self, value):
! pass
#####################
#
# Internal methods
#
! ## TEMPORARY "=None" !!!
! def __init__(self, entry, formatter=None):
! # Are we in "editing" mode, or display mode?
! self.editing = 0
!
! self.entry = entry
# Needs to be set by the child classes
self.formatter = formatter
! self._unicode = 0
def _buildValue(self):
! ##self.value = self.formatter.
return 1
--- 265,420 ----
# Selection stuff
#
+ # Set the selection area
def setSelectionArea(self, cursor1, cursor2):
! self.selection1 = min(cursor1, cursor2)
! self.selection2 = max(cursor1, cursor2)
!
+ # Return the selected area as a tuple (or
+ # None if no selection)
def getSelectionArea(self):
if self.selection1 == None:
return None
else:
! return ( min(self.selection1, self.selection2),
! max(self.selection1, self.selection2) )
! # Select the entire text of the entry and move
! # the cursor to the end
! def selectAll(self, event):
! self.selection1 = 0
! self.moveCursorToEnd(event,1)
! self.selection2 = self.cursor
! # Move the selection cursor to the left one unit
! def selectLeft(self, event):
!
! if self.selection1 == None:
! self.selection1 = self.cursor
!
! self.moveCursorLeft(event, 1)
! self.selection2 = self.cursor
!
!
! # Move the selection cursor to the right one unit
! def selectRight(self, event):
!
! if self.selection1 == None:
! self.selection1 = self.cursor
!
! self.moveCursorRight(event,1)
! self.selection2 = self.cursor
!
!
! # Select to the beginning of the entry
! def selectToBegin(self, event):
!
! if self.selection1 == None:
! self.selection1 = self.cursor
!
! self.moveCursorToBegin(event,1)
! self.selection2 = self.cursor
!
!
! # Select to the beginning of the entry
! def selectToEnd(self, event):
!
! if self.selection1 == None:
! self.selection1 = self.cursor
!
! self.moveCursorToEnd(event,1)
! self.selection2 = self.cursor
!
!
! # Copy to the clipboard
! def clipboardCopy(self, event):
! print "Copy"
! if self.selection1 != None:
! sel1, sel2 = self.getSelectionArea()
! print self.display[sel1:sel2]
! self.dispatchEvent(GFEvent('setClipboard',
! text=self.display[sel1:sel2]))
!
! event.refreshDisplay = 0
!
!
! def clipboardCut(self, event):
! print "Cut"
! self.clipboardCopy(event)
! edevent = GFEvent("requestKEYPRESS", text="")
! self.processEvent(edevent)
!
+ def clipboardPaste(self, event):
+ print "Paste"
+ event.text = self.dispatchEvent(GFEvent('getClipboard'))
+ if event.text != None:
+ self.addText(event)
#####################
#
# Internal methods
#
! def __init__(self, entry, eventHandler, formatter=None):
! GFEventAware.__init__(self, eventHandler)
! self.entry = entry # Our entry
! self.editing = 0 # In editing mode??
! self.modified = 0 # Have we been modified??
! self.value = None # The latest db-compat value
! self.work = "" # Our working value
! self.display = "" # The latest display-formatted value
! self.selection1 = None # Start of highlight
! self.selection2 = None # End of highlight
! self.cursor = 0 # Cursor position
# Needs to be set by the child classes
self.formatter = formatter
! self.subevents = GFEventController()
! self.subevents.registerEventListeners( {
!
! # "Entry" events
! 'requestKEYPRESS' : self.addText,
! 'requestREPLACEVALUE' : self.replaceText,
! 'requestCURSORLEFT' : self.moveCursorLeft,
! 'requestCURSORRIGHT' : self.moveCursorRight,
! 'requestCURSOREND' : self.moveCursorToEnd,
! 'requestCURSORHOME' : self.moveCursorToBegin,
! 'requestCURSORMOVE' : self.moveCursor,
! 'requestBACKSPACE' : self.backspace,
! 'requestDELETE' : self.delete,
! 'beginEDITMODE' : self.beginEdit,
! 'endEDITMODE' : self.endEdit,
!
! # Selection/clipboard events
! 'requestSELECTALL' : self.selectAll,
! 'requestSELECTTOHOME' : self.selectToBegin,
! 'requestSELECTTOEND' : self.selectToEnd,
! 'requestSELECTLEFT' : self.selectLeft,
! 'requestSELECTRIGHT' : self.selectRight,
! 'requestCOPY' : self.clipboardCopy,
! 'requestCUT' : self.clipboardCut,
! 'requestPASTE' : self.clipboardPaste,
! })
def _buildValue(self):
! self.value = self.work
return 1
+ def _buildDisplay(self):
+ if self.editing:
+ self.display = self.work
+ else:
+ self.display = str(self.value)
+
+
***************
*** 180,188 ****
#
#
class TextDisplayHandler(FieldDisplayHandler):
! def __init__(self, entry, displayMask, inputMask, formatMask):
! FieldDisplayHandler.__init__(entry, DateMask.DateMask(displayMask,
! inputMask, formatMask))
--- 425,434 ----
#
#
class TextDisplayHandler(FieldDisplayHandler):
! def __init__(self, entry, eventHandler, displayMask, inputMask, formatMask):
! ## FieldDisplayHandler.__init__(self, entry, eventHandler,
! ## TextMask.TextMask(displayMask, inputMask, formatMask))
! FieldDisplayHandler.__init__(self, entry, eventHandler, None)
***************
*** 191,199 ****
# Handler for Numeric types
#
class NumberDisplayHandler(FieldDisplayHandler):
! def __init__(self, entry, displayMask, inputMask):
! FieldDisplayHandler.__init__(entry, DateMask.DateMask(displayMask,
! inputMask, displayMask))
--- 437,453 ----
# Handler for Numeric types
#
class NumberDisplayHandler(FieldDisplayHandler):
! def __init__(self, entry, eventHandler, displayMask, inputMask):
! ## FieldDisplayHandler.__init__(self, entry, eventHandler,
! ## DateMask.DateMask(displayMask, inputMask, displayMask))
! FieldDisplayHandler.__init__(self, entry, eventHandler, None)
!
! def _buildValue(self):
! try:
! self.value = float(self.work)
! return 1
! except ValueError:
! return 0
***************
*** 204,211 ****
#
class DateDisplayHandler(FieldDisplayHandler):
def __init__(self, entry, displayMask, inputMask):
! FieldDisplayHandler.__init__(entry, DateMask.DateMask(displayMask,
! inputMask, displayMask))
--- 458,466 ----
#
class DateDisplayHandler(FieldDisplayHandler):
def __init__(self, entry, displayMask, inputMask):
! ## FieldDisplayHandler.__init__(self, entry, eventHandler,
! ## DateMask.DateMask(displayMask, inputMask, displayMask))
! FieldDisplayHandler.__init__(self, entry, eventHandler, None)
***************
*** 228,235 ****
trueValue = GConfig.get("checkboxTrue","Y")
falseValue = GConfig.get("checkboxFalse","N")
! trueValues = ('Y','y','T','t','1','x','X', trueValue)
! falseValues = ('N','n','f','F','0', falseValue)
def setValue(self, value):
# Force to 0 or 1
--- 483,499 ----
trueValue = GConfig.get("checkboxTrue","Y")
falseValue = GConfig.get("checkboxFalse","N")
! trueValues = ('Y','y','T','t','1','x','X', trueValue)
! falseValues = ('N','n','F','f','0','', ' ', falseValue)
!
! def __init__(self, *args, **params):
!
! FieldDisplayHandler.__init__(self, *args, **params)
!
! # My events...
! self.subevents.registerEventListeners( {
! 'requestTOGGLECHKBOX' : self.toggle } )
!
def setValue(self, value):
# Force to 0 or 1
***************
*** 240,252 ****
else:
self.value = value and 1 or 0
! def getValue(self):
! if self.value:
return self.trueValue
else:
return self.falseValue
def getDisplay(self):
! return self.value
--- 504,536 ----
else:
self.value = value and 1 or 0
! self.modified = 0
! self._buildDisplay()
!
!
! def _buildValue(self):
! if int(self.work):
return self.trueValue
else:
return self.falseValue
+
+ def _buildDisplay(self):
+
+ if self.editing:
+ self.display = self.work
+ else:
+ if self.value == None:
+ self.value = ""
+ else:
+ self.display = str(self.value)
+
+
def getDisplay(self):
! return self.display
!
!
! def toggle(self, event):
! self.setValue(event.data[1])
Index: gnue/forms/src/GFEvent.py
diff -c gnue/forms/src/GFEvent.py:1.19 gnue/forms/src/GFEvent.py:1.20
*** gnue/forms/src/GFEvent.py:1.19 Fri Feb 15 22:57:55 2002
--- gnue/forms/src/GFEvent.py Sun Feb 17 01:25:32 2002
***************
*** 49,54 ****
--- 49,55 ----
self.__result__ = None
self.__dropped__ = 0
self.__error__ = 0
+ self.__errortext__ = ""
def getResult(self):
Index: gnue/forms/src/GFForm.py
diff -c gnue/forms/src/GFForm.py:1.149 gnue/forms/src/GFForm.py:1.150
*** gnue/forms/src/GFForm.py:1.149 Sat Feb 16 19:46:32 2002
--- gnue/forms/src/GFForm.py Sun Feb 17 01:25:32 2002
***************
*** 85,93 ****
self._triggerFunctions = {'setFocus':{'function':self.triggerSetFocus,
'global': 1,
},
- # 'execute':{'function':self.executeCommand,
- # 'global': 1,
- # },
}
--- 85,90 ----
***************
*** 124,130 ****
# Initialize our events system
GFEventAware.__init__(self, self._app.eventController)
!
# TODO: Look at moving this into GParser
# Import all needed objects
--- 121,127 ----
# Initialize our events system
GFEventAware.__init__(self, self._app.eventController)
!
# TODO: Look at moving this into GParser
# Import all needed objects
***************
*** 185,203 ****
object.name = string.lower(object.name)
self._datasourceDictionary[object.name]=object
- def setFocus(self,object):
- if object.getObjectType() == 'GFBlock' and self._currentBlock == None:
- self._currentBlock = object
! elif object.getObjectType() == 'GFPage' and self._currentPage == None:
! self._currentPage = object
! elif object.getObjectType() in TabStops and \
! self._currentEntry == None and \
! not object.readonly and \
! not object.hidden:
! self._currentEntry = object
! self._app.dispatchEvent(GFEvent('updateENTRY', self._currentEntry))
def initImportedObjects(self, object):
--- 182,282 ----
object.name = string.lower(object.name)
self._datasourceDictionary[object.name]=object
! #
! # Find focus
! #
! # Find the next focusable item given
! # an item of type Page, Block, or Entry
! #
! def findFocus(self, object):
! entry = None
! if object._type == 'GFEntry':
! return object
! else:
! for child in object._children:
! entry = self.findFocus(child)
! if entry:
! break
!
! #
! # findAndChangeFocus
! #
! # Runs findFocus and then runs
! # changeFocus with that value.
! #
! def findAndChangeFocus(self, object):
! entry = self.findFocus(object)
! if entry:
! self.changeFocus(entry)
!
!
! #
! # changeFocus
! #
! # changes to the requested entry object requested by
! # an event source
! #
! def changeFocus(self, widget, fireFocusTriggers=1):
!
! message = None
!
! try:
!
! if self._currentEntry:
! event = GFEvent('endEditMode', None)
! self._app.dispatchEvent(event)
! if event.__error__:
! return 1
!
! fieldChange = widget != self._currentEntry
! blockChange = widget._block != self._currentBlock
! pageChange = widget._block._page != self._currentPage
!
! if fireFocusTriggers:
! try:
! if fieldChange:
! self._currentEntry.processTrigger('Pre-FocusOut')
! if blockChange:
! self._currentBlock.processTrigger('Pre-FocusOut')
! if pageChange:
! self._currentPage.processTrigger('Pre-FocusOut')
! self._currentPage.processTrigger('Post-FocusOut')
! if blockChange:
! self._currentBlock.processTrigger('Post-FocusOut')
! if fieldChange:
! self._currentEntry.processTrigger('Post-FocusOut')
! except AttributeError:
! pass
!
! oldPage = self._currentPage
! oldBlock = self._currentBlock
! oldEntry = self._currentEntry
!
! self._currentEntry = widget
! self._currentBlock = self._currentEntry._block
! self._currentPage = self._currentBlock._page
!
! self.dispatchEvent(GFEvent('updateENTRY', oldEntry))
! self.dispatchEvent(GFEvent('updateENTRY', self._currentEntry))
!
! if fireFocusTriggers:
! if pageChange:
! self._currentPage.processTrigger('Pre-FocusIn')
! if blockChange:
! self._currentBlock.processTrigger('Pre-FocusIn')
! if fieldChange:
! self._currentEntry.processTrigger('Pre-FocusIn')
! self._currentEntry.processTrigger('Post-FocusIn')
! if blockChange:
! self._currentBlock.processTrigger('Post-FocusIn')
! if pageChange:
! self._currentPage.processTrigger('Post-FocusIn')
!
! except TriggerError, t:
! message = self.TriggerErrorFunc(t)
! return message
def initImportedObjects(self, object):
***************
*** 345,350 ****
--- 424,430 ----
def commit(self):
self._app.dispatchEvent(GFEvent('beginWAIT',None));
+
message = None
try:
***************
*** 420,650 ****
GDebug.printMesg(0, trigMsg)
return trigMsg
- #
- # changeFocus
- #
- # changes to the requested entry object requested by
- # an event source
- #
- def changeFocus(self, widget, fireFocusTriggers=1):
- message = None
- try:
- if fireFocusTriggers:
- self._currentEntry.processTrigger('Pre-FocusOut')
- self._currentEntry.processTrigger('Post-FocusOut')
-
- widget.processTrigger('Pre-FocusIn')
- oldEntry = self._currentEntry
-
- self._currentEntry = widget
- self._currentBlock = self._currentEntry._block
-
- self._app.dispatchEvent(GFEvent('updateENTRY', oldEntry))
-
- if fireFocusTriggers:
- widget.processTrigger('Post-FocusIn')
- except TriggerError, t:
- message = self.TriggerErrorFunc(t)
- return message
-
- #
- # moveCursor
- #
- # called whenever an event source has requested that the
- # current input (cursor) position in current entry object be
- # moved to a new location
- #
- def moveCursor(self, position):
-
- # If an input mask handler is being used, we
- # need to use its logic to move the cursor.
-
- if not self._currentEntry._maskHandler:
-
- # use default logic
-
- if position == 'end':
- self._currentEntry._cursorPosition = \
- len(self._currentEntry.getDisplay(hasFocus=1))
- elif position == 'home':
- self._currentEntry._cursorPosition = 0
- elif position == 'left' and self._currentEntry._cursorPosition > 0:
- self._currentEntry._cursorPosition -= 1
- elif ( position == 'right' ) and \
- ( self._currentEntry._cursorPosition < \
- len(self._currentEntry.getDisplay(hasFocus=1)) ):
- self._currentEntry._cursorPosition += 1
-
- else:
-
- # use mask handler's logic
-
- if position == 'end':
- self._currentEntry._cursorPosition = \
- self._currentEntry._maskHandler.moveCursorToEnd()
- elif position == 'home':
- self._currentEntry._cursorPosition = \
- self._currentEntry._maskHandler.moveCursorToBegin()
- elif position == 'left':
- self._currentEntry._cursorPosition = \
- self._currentEntry._maskHandler.moveCursorRelative(-1)
- elif position == 'right':
- self._currentEntry._cursorPosition = \
- self._currentEntry._maskHandler.moveCursorRelative(1)
-
-
- def replaceValue(self,object, value):
- replacement = ""
- validValues = object.allowedValues()
- for key in validValues.keys():
- if validValues[key] == value:
- replacement = key
- break
- GDebug.printMesg(2,"(%s, %s)"%(object,value))
- GDebug.printMesg(2,"Replacing with %s"% replacement)
- self._currentEntry.processTrigger('pre-change')
- object.setValue(replacement)
- self._currentEntry.processTrigger('post-change')
-
- # Hack!
- self.dispatchEvent(GFEvent('updateDETAILBLOCK',self._currentBlock))
-
- #
- # keyPress
- #
- # Called whenever an event source has requested that a
- # charater be inserted into current entry object
- #
- def keyPress(self, value):
- modified = 0
-
- if (self._currentEntry != None):
- currentvalue = self._currentEntry.getValue()
- if ord(value) == 13:
- if self._currentEntry.height > 1: value = '\n';
- else:
- self._app.nextEntry(None)
- #self._app.dispatchEvent(GFEvent('requestNEXTENTRY'))
- return modified
-
- if hasattr(self._currentEntry,'foreign_key_description') and
hasattr(self._currentEntry,'style') and (self._currentEntry.style=='dropdown'):
- value= self._currentEntry.findClosestValue(value)
- if not value: return modified
-
- self._currentEntry.processTrigger('pre-change')
- self._currentEntry.setValue(value)
- self._currentEntry.processTrigger('post-change')
- modified = 1
- return modified
-
- if self._currentEntry._lowercase:
- value = string.lower(value)
- if self._currentEntry._uppercase:
- value = string.upper(value)
- if hasattr(self._currentEntry,'max_length'):
- if len(currentvalue) >= int(self._currentEntry.max_length):
- return modified
-
- if ( self._currentEntry._numeric and \
- self._currentBlock.mode == 'normal' ):
- if not (value in string.digits or value in '.'):
- return modified
-
-
-
- # If an input mask handler is being
- # used, we need to use its logic.
-
- if not self._currentEntry._maskHandler:
-
- # use default logic
-
- currentvalue = currentvalue[:self._currentEntry._cursorPosition] \
- + value \
- + currentvalue[self._currentEntry._cursorPosition \
- + (not self._insertMode):]
-
- self._currentEntry._cursorPosition += 1
-
- else:
-
- # use mask handler's logic
-
- currentvalue, display, cursor = \
- self._currentEntry._maskHandler.addText(
- currentvalue,
- value,
- self._currentEntry._cursorPosition,
- not self._insertMode,
- '_' )
-
- print "New value: %s" % currentvalue
-
- self._currentEntry._cursorPosition = cursor
-
-
- # Set the field's value, performing pre-/post-change triggers
- self._currentEntry.processTrigger('pre-change')
- self._currentEntry.setValue(currentvalue)
- self._currentEntry.processTrigger('post-change')
- modified = 1
-
- return modified
-
-
- #
- # removeCharacter
- #
- # Called whenever an event source has requested that a
- # charater be removed from the current entry object
- #
- def removeCharacter(self, action):
-
-
- # For a backspace, we will fudge by simply
- # moving the cursor left one position and
- # performing a "delete".
- #
- # If an input mask handler is being used, we
- # need to use its logic to move the cursor.
-
- if not self._currentEntry._maskHandler:
- if action == 'backspace':
- if self._currentEntry._cursorPosition > 0:
- self._currentEntry._cursorPosition -= 1
- else:
- # Cannot backspace if we are at pos 0
- return 0
-
- newvalue = self._currentEntry.getValue()
- newvalue = newvalue[:self._currentEntry._cursorPosition] \
- + newvalue[self._currentEntry._cursorPosition+1:]
-
- else:
-
- if action == 'backspace':
- newPos = self._currentEntry._maskHandler.moveCursorRelative(-1)
- if self._currentEntry._cursorPosition != newPos:
- self._currentEntry._cursorPosition = newPos
- else:
- # Cannot backspace if we are at pos 0
- return 0
-
- newvalue = self._currentEntry._maskHandler.processEdit(
- self._currentEntry.getValue(),
- "",
- self._currentEntry._maskHandler.cursorToIndex(
- self._currentEntry._cursorPosition),
- 1)
-
-
-
- self._currentEntry.processTrigger('pre-change')
- self._currentEntry.setValue(newvalue)
- self._currentEntry.processTrigger('post-change')
-
- return 1
#
# fireTrigger
--- 500,704 ----
GDebug.printMesg(0, trigMsg)
return trigMsg
+ ## #
+ ## # moveCursor
+ ## #
+ ## # called whenever an event source has requested that the
+ ## # current input (cursor) position in current entry object be
+ ## # moved to a new location
+ ## #
+ ## def moveCursor(self, position):
+ ##
+ ## # If an input mask handler is being used, we
+ ## # need to use its logic to move the cursor.
+ ##
+ ## if not self._currentEntry._maskHandler:
+ ##
+ ## # use default logic
+ ##
+ ## if position == 'end':
+ ## self._currentEntry._cursorPosition = \
+ ## len(self._currentEntry.getDisplay(hasFocus=1))
+ ## elif position == 'home':
+ ## self._currentEntry._cursorPosition = 0
+ ## elif position == 'left' and self._currentEntry._cursorPosition > 0:
+ ## self._currentEntry._cursorPosition -= 1
+ ## elif ( position == 'right' ) and \
+ ## ( self._currentEntry._cursorPosition < \
+ ## len(self._currentEntry.getDisplay(hasFocus=1)) ):
+ ## self._currentEntry._cursorPosition += 1
+ ##
+ ## else:
+ ##
+ ## # use mask handler's logic
+ ##
+ ## if position == 'end':
+ ## self._currentEntry._cursorPosition = \
+ ## self._currentEntry._maskHandler.moveCursorToEnd()
+ ## elif position == 'home':
+ ## self._currentEntry._cursorPosition = \
+ ## self._currentEntry._maskHandler.moveCursorToBegin()
+ ## elif position == 'left':
+ ## self._currentEntry._cursorPosition = \
+ ## self._currentEntry._maskHandler.moveCursorRelative(-1)
+ ## elif position == 'right':
+ ## self._currentEntry._cursorPosition = \
+ ## self._currentEntry._maskHandler.moveCursorRelative(1)
+ ##
+ ##
+ ## def replaceValue(self,object, value):
+ ## replacement = ""
+ ## validValues = object.allowedValues()
+ ## for key in validValues.keys():
+ ## if validValues[key] == value:
+ ## replacement = key
+ ## break
+ ## GDebug.printMesg(2,"(%s, %s)"%(object,value))
+ ## GDebug.printMesg(2,"Replacing with %s"% replacement)
+ ## self._currentEntry.processTrigger('pre-change')
+ ## object.setValue(replacement)
+ ## self._currentEntry.processTrigger('post-change')
+ ##
+ ## # Hack!
+ ## self.dispatchEvent(GFEvent('updateDETAILBLOCK',self._currentBlock))
+ ##
+ ## #
+ ## # keyPress
+ ## #
+ ## # Called whenever an event source has requested that a
+ ## # charater be inserted into current entry object
+ ## #
+ ## def keyPress(self, value):
+ ## modified = 0
+ ##
+ ## if (self._currentEntry != None):
+ ## currentvalue = self._currentEntry.getValue()
+ ## if ord(value) == 13:
+ ## if self._currentEntry.height > 1: value = '\n';
+ ## else:
+ ## self._app.nextEntry(None)
+ ## #self._app.dispatchEvent(GFEvent('requestNEXTENTRY'))
+ ## return modified
+ ##
+ ## if hasattr(self._currentEntry,'foreign_key_description') and
hasattr(self._currentEntry,'style') and (self._currentEntry.style=='dropdown'):
+ ## value= self._currentEntry.findClosestValue(value)
+ ## if not value: return modified
+ ##
+ ## self._currentEntry.processTrigger('pre-change')
+ ## self._currentEntry.setValue(value)
+ ## self._currentEntry.processTrigger('post-change')
+ ## modified = 1
+ ## return modified
+ ##
+ ## if self._currentEntry._lowercase:
+ ## value = string.lower(value)
+ ## if self._currentEntry._uppercase:
+ ## value = string.upper(value)
+ ## if hasattr(self._currentEntry,'max_length'):
+ ## if len(currentvalue) >= int(self._currentEntry.max_length):
+ ## return modified
+ ##
+ ## if ( self._currentEntry._numeric and \
+ ## self._currentBlock.mode == 'normal' ):
+ ## if not (value in string.digits or value in '.'):
+ ## return modified
+ ##
+ ##
+ ##
+ ## # If an input mask handler is being
+ ## # used, we need to use its logic.
+ ##
+ ## if not self._currentEntry._maskHandler:
+ ##
+ ## # use default logic
+ ##
+ ## currentvalue = currentvalue[:self._currentEntry._cursorPosition] \
+ ## + value \
+ ## + currentvalue[self._currentEntry._cursorPosition \
+ ## + (not self._insertMode):]
+ ##
+ ## self._currentEntry._cursorPosition += 1
+ ##
+ ## else:
+ ##
+ ## # use mask handler's logic
+ ##
+ ## currentvalue, display, cursor = \
+ ## self._currentEntry._maskHandler.addText(
+ ## currentvalue,
+ ## value,
+ ## self._currentEntry._cursorPosition,
+ ## not self._insertMode,
+ ## '_' )
+ ##
+ ## print "New value: %s" % currentvalue
+ ##
+ ## self._currentEntry._cursorPosition = cursor
+ ##
+ ##
+ ## # Set the field's value, performing pre-/post-change triggers
+ ## self._currentEntry.processTrigger('pre-change')
+ ## self._currentEntry.setValue(currentvalue)
+ ## self._currentEntry.processTrigger('post-change')
+ ## modified = 1
+ ##
+ ## return modified
+ ##
+ ##
+ ## #
+ ## # removeCharacter
+ ## #
+ ## # Called whenever an event source has requested that a
+ ## # charater be removed from the current entry object
+ ## #
+ ## def removeCharacter(self, action):
+ ##
+ ##
+ ## # For a backspace, we will fudge by simply
+ ## # moving the cursor left one position and
+ ## # performing a "delete".
+ ## #
+ ## # If an input mask handler is being used, we
+ ## # need to use its logic to move the cursor.
+ ##
+ ## if not self._currentEntry._maskHandler:
+ ## if action == 'backspace':
+ ## if self._currentEntry._cursorPosition > 0:
+ ## self._currentEntry._cursorPosition -= 1
+ ## else:
+ ## # Cannot backspace if we are at pos 0
+ ## return 0
+ ##
+ ## newvalue = self._currentEntry.getValue()
+ ## newvalue = newvalue[:self._currentEntry._cursorPosition] \
+ ## + newvalue[self._currentEntry._cursorPosition+1:]
+ ##
+ ## else:
+ ##
+ ## if action == 'backspace':
+ ## newPos = self._currentEntry._maskHandler.moveCursorRelative(-1)
+ ## if self._currentEntry._cursorPosition != newPos:
+ ## self._currentEntry._cursorPosition = newPos
+ ## else:
+ ## # Cannot backspace if we are at pos 0
+ ## return 0
+ ##
+ ## newvalue = self._currentEntry._maskHandler.processEdit(
+ ## self._currentEntry.getValue(),
+ ## "",
+ ## self._currentEntry._maskHandler.cursorToIndex(
+ ## self._currentEntry._cursorPosition),
+ ## 1)
+ ##
+ ##
+ ##
+ ## self._currentEntry.processTrigger('pre-change')
+ ## self._currentEntry.setValue(newvalue)
+ ## self._currentEntry.processTrigger('post-change')
+ ##
+ ## return 1
+ ##
#
# fireTrigger
***************
*** 717,722 ****
--- 771,777 ----
nextEntry = None
lastEntry = self._currentEntry
if not self._currentEntry.verifyValue(): return
+
for object in self._currentEntry._parent._children:
if object.getObjectType() in TabStops and \
not object.hidden and (not object.readonly or \
***************
*** 732,737 ****
--- 787,793 ----
break
nextEntry = object
+
try:
self._currentEntry.processTrigger('Pre-FocusOut')
nextEntry.processTrigger('Pre-FocusIn')
***************
*** 761,798 ****
# focus change to the next data entry block
#
def nextBlock(self):
- nextBlock = self._blockList[0]
- keepNext = 0
- for object in self._blockList:
- if object == self._currentBlock:
- keepNext = 1
- continue
- if keepNext == 1:
- nextBlock = object
- break
try:
! self._currentBlock.processTrigger('Pre-FocusOut')
! self._currentBlock.processTrigger('Post-FocusOut')
! nextBlock.processTrigger('Pre-FocusIn')
! self._currentBlock = nextBlock
! nextBlock.processTrigger('Post-FocusIn')
! except TriggerError, t:
! print "Got to the exception handler!"
! self.TriggerErrorFunc(t)
! # reset current entry
! prevEntry = self._currentEntry
! self._currentEntry = None
! self._app.dispatchEvent(GFEvent('updateENTRY', prevEntry))
!
! self._currentBlock.walk(self.setFocus)
!
! # set current page
! pageWidget = self._currentBlock
! while pageWidget.getObjectType() != 'GFPage':
! pageWidget = pageWidget._parent
! self._currentPage = pageWidget
#
# previousBlock
--- 817,829 ----
# focus change to the next data entry block
#
def nextBlock(self):
try:
! nextBlock = self._blockList[self._blockList.index(self._currentBlock)+1]
! except IndexError:
! nextBlock = self._blockList[0]
! self.findAndChangeFocus(nextBlock)
#
# previousBlock
***************
*** 801,842 ****
# focus change to the next data entry block
#
def previousBlock(self):
- nextBlock = self._blockList[-1]
- for object in self._blockList:
- if object == self._currentBlock:
- break
- nextBlock = object
try:
! self._currentBlock.processTrigger('Pre-FocusOut')
! self._currentBlock.processTrigger('Post-FocusOut')
! nextBlock.processTrigger('Pre-FocusIn')
! self._currentBlock = nextBlock
! nextBlock.processTrigger('Post-FocusIn')
! except TriggerError, t:
! print "Got to the exception handler!"
! self.TriggerErrorFunc(t)
!
! # reset current entry
! prevEntry = self._currentEntry
! self._currentEntry = None
! self._app.dispatchEvent(GFEvent('updateENTRY', prevEntry))
!
! self._currentBlock.walk(self.setFocus)
!
! # set current page
! pageWidget = self._currentBlock
! while pageWidget.getObjectType() != 'GFPage':
! pageWidget = pageWidget._parent
! self._currentPage = pageWidget
def gotoPage(self, index):
for object in self._blockList:
pageWidget = object
while pageWidget.getObjectType() != 'GFPage':
pageWidget = pageWidget._parent
!
! if self._pageList[index] == pageWidget:
self._currentPage = self._pageList[index]
self._currentBlock = object
break
--- 832,857 ----
# focus change to the next data entry block
#
def previousBlock(self):
try:
! nextBlock = self._blockList[self._blockList.index(self._currentBlock)-1]
! except IndexError:
! nextBlock = self._blockList[-1]
!
! self.findAndChangeFocus(nextBlock)
!
! def endEditing(self):
! event = GFEvent('endEditMode',None)
! self.dispatchEvent(event)
! return not event.__error__
def gotoPage(self, index):
for object in self._blockList:
pageWidget = object
while pageWidget.getObjectType() != 'GFPage':
pageWidget = pageWidget._parent
!
! if self._pageList[index] == pageWidget:
self._currentPage = self._pageList[index]
self._currentBlock = object
break
Index: gnue/forms/src/GFInstance.py
diff -c gnue/forms/src/GFInstance.py:1.29 gnue/forms/src/GFInstance.py:1.30
*** gnue/forms/src/GFInstance.py:1.29 Sun Feb 17 01:08:46 2002
--- gnue/forms/src/GFInstance.py Sun Feb 17 01:25:32 2002
***************
*** 58,64 ****
#self._uimodule = ui.GFUserInterface
self._uimodule = ui
self._disableSplash = disableSplash
! # Incomming events
self.registerEventListeners( {
# Focus-related events
'requestNEXTENTRY' : self.nextEntry,
--- 58,65 ----
#self._uimodule = ui.GFUserInterface
self._uimodule = ui
self._disableSplash = disableSplash
!
! # Incoming events
self.registerEventListeners( {
# Focus-related events
'requestNEXTENTRY' : self.nextEntry,
***************
*** 70,114 ****
'requestRECORDNUMBER' : self.jumpToRecord,
'requestJUMPRECORD' : self.jumpRecords,
'requestPAGE' : self.gotoPage,
-
- # Proxied "Entry" events
- 'requestKEYPRESS' : self.keyPress,
- 'requestREPLACEVALUE' : self.replaceValue,
- 'requestCURSORLEFT' : self.cursorMove,
- 'requestCURSORRIGHT' : self.cursorMove,
- 'requestCURSOREND' : self.cursorMove,
- 'requestCURSORHOME' : self.cursorMove,
- 'requestBACKSPACE' : self.removeCharacter,
- 'requestDELETE' : self.removeCharacter,
'requestFOCUS' : self.changeFocus,
'requestMODETOGGLE' : self.toggleInsertMode,
! # Selection/clipboard events
! 'requestSELECTALL' : None, # TODO
! 'requestSELECTTOHOME' : None, # TODO
! 'requestSELECTTOEND' : None, # TODO
! 'requestSELECTLEFT' : None, # TODO
! 'requestSELECTRIGHT' : None, # TODO
! 'requestCOPY' : None, # TODO
! 'requestCUT' : None, # TODO
! 'requestPASTE' : None, # TODO
! # Data set manipulation
! 'requestNEWRECORD' : self.newRecord,
! 'requestMARKFORDELETE' : self.deleteRecord,
! 'requestCOMMIT' : self.executeCommit,
! 'requestPRINTOUT' : self.executePrintout,
! 'requestROLLBACK' : self.executeRollback,
! 'requestENTERQUERY' : self.requestQuery,
! 'requestEXECQUERY' : self.executeQuery,
!
! # High-level forms stuff
! 'requestEXIT' : self.executeExit,
! 'requestABOUT' : self.executeAbout,
! 'fireTRIGGER' : self.fireTrigger,
- 'requestTOGGLECHKBOX' : self.toggleCheckBox,
- } )
#
# Associate a form object with this instance
--- 71,119 ----
'requestRECORDNUMBER' : self.jumpToRecord,
'requestJUMPRECORD' : self.jumpRecords,
'requestPAGE' : self.gotoPage,
'requestFOCUS' : self.changeFocus,
+
+ # Data set manipulation
+ 'requestNEWRECORD' : self.newRecord,
+ 'requestMARKFORDELETE': self.deleteRecord,
+ 'requestCOMMIT' : self.executeCommit,
+ 'requestPRINTOUT' : self.executePrintout,
+ 'requestROLLBACK' : self.executeRollback,
+ 'requestENTERQUERY' : self.requestQuery,
+ 'requestEXECQUERY' : self.executeQuery,
+
+ # Miscellaneous stuff
+ 'requestEXIT' : self.executeExit,
+ 'requestABOUT' : self.executeAbout,
'requestMODETOGGLE' : self.toggleInsertMode,
+ 'fireTRIGGER' : self.fireTrigger,
! # "Entry" events (proxied)
! 'requestKEYPRESS' : self.proxyEntryEvent,
! 'requestREPLACEVALUE' : self.proxyEntryEvent,
! 'requestCURSORMOVE' : self.proxyEntryEvent,
! 'requestCURSORLEFT' : self.proxyEntryEvent,
! 'requestCURSORRIGHT' : self.proxyEntryEvent,
! 'requestCURSOREND' : self.proxyEntryEvent,
! 'requestCURSORHOME' : self.proxyEntryEvent,
! 'requestBACKSPACE' : self.proxyEntryEvent,
! 'requestDELETE' : self.proxyEntryEvent,
! 'requestTOGGLECHKBOX' : self.proxyEntryEvent,
! 'beginEDITMODE' : self.proxyEntryEvent,
! 'endEDITMODE' : self.proxyEntryEvent,
!
! # Selection/clipboard events (proxied)
! 'requestSELECTALL' : self.proxyEntryEvent,
! 'requestSELECTTOHOME' : self.proxyEntryEvent,
! 'requestSELECTTOEND' : self.proxyEntryEvent,
! 'requestSELECTLEFT' : self.proxyEntryEvent,
! 'requestSELECTRIGHT' : self.proxyEntryEvent,
! 'requestCOPY' : self.proxyEntryEvent,
! 'requestCUT' : self.proxyEntryEvent,
! 'requestPASTE' : self.proxyEntryEvent,
! } )
#
# Associate a form object with this instance
***************
*** 129,140 ****
--- 134,187 ----
return self.manager
#
+ # proxyEntryEvent
+ #
+ # This serves as a proxy for any entry-level events.
+ # Since we don't want all entries listening for all
+ # events (only the *current* entry), we will capture
+ # any relevant events here and pass on to the entry.
+ #
+ def proxyEntryEvent(self, event):
+
+ if self._form._currentEntry != None:
+
+ handler = self._form._currentEntry._displayHandler
+
+ # If the display will need to be refreshed,
+ # then the proxied event should set this to 1
+ event.refreshDisplay = 1
+
+ # Pass off the event to the current entry's event handler
+ handler.subevents.dispatchEvent(event)
+
+ # Refresh entry display if appropriate
+ if event.refreshDisplay:
+ print "Refreshing!!"
+ handler = self._form._currentEntry._displayHandler
+ self.dispatchEvent(GFEvent('updateEntryEditor',
+ object = self._form._currentEntry,
+ display=handler.display,
+ cursor=handler.cursor,
+ selection=handler.getSelectionArea(),
+ ))
+
+ # If the entry needs an error message displayed,
+ # then the proxied event should set this to the
+ # message text
+ if event.__errortext__:
+ messageBox = GFMsgBox(self, event.__errortext__)
+ messageBox.show()
+
+
+ #
# nextEntry
#
# Called whenever an event source has requested that the
# focus change to the next data entry object
#
def nextEntry(self, event):
+ if not self._form.endEditing():
+ return
message = self._form.nextEntry()
if message:
messageBox = GFMsgBox(self, message)
***************
*** 151,156 ****
--- 198,205 ----
# focus change to the next data entry object
#
def previousEntry(self, event):
+ if not self._form.endEditing():
+ return
self._form.previousEntry()
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
self.updateRecordStatus()
***************
*** 163,172 ****
# focus change to the next data entry block
#
def nextBlock(self,event):
self._form.nextBlock()
self.dispatchEvent(GFEvent('gotoPAGE',self._form._currentPage));
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
!
self.updateStatus()
#
--- 212,223 ----
# focus change to the next data entry block
#
def nextBlock(self,event):
+ if not self._form.endEditing():
+ return
self._form.nextBlock()
self.dispatchEvent(GFEvent('gotoPAGE',self._form._currentPage));
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
!
self.updateStatus()
#
***************
*** 176,181 ****
--- 227,234 ----
# focus change to the next data entry block
#
def previousBlock(self, event):
+ if not self._form.endEditing():
+ return
self._form.previousBlock()
self.dispatchEvent(GFEvent('gotoPAGE',self._form._currentPage));
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
***************
*** 187,197 ****
# Called to make the form jump to a specific page
#
def gotoPage(self,event):
self._form.gotoPage(event.data)
self.dispatchEvent(GFEvent('gotoPAGE',self._form._currentPage));
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
self.updateStatus()
!
#
# previousRecord
#
--- 240,252 ----
# Called to make the form jump to a specific page
#
def gotoPage(self,event):
+ if not self._form.endEditing():
+ return
self._form.gotoPage(event.data)
self.dispatchEvent(GFEvent('gotoPAGE',self._form._currentPage));
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
self.updateStatus()
!
#
# previousRecord
#
***************
*** 199,204 ****
--- 254,261 ----
# form advance to the next record in memory
#
def prevRecord(self, event):
+ if not self._form.endEditing():
+ return
message = self._form.prevRecord()
if message:
messageBox = GFMsgBox(self,message)
***************
*** 207,213 ****
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
self.updateRecordCounter()
self.updateRecordStatus()
!
#
# nextRecord
#
--- 264,270 ----
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
self.updateRecordCounter()
self.updateRecordStatus()
!
#
# nextRecord
#
***************
*** 215,220 ****
--- 272,279 ----
# form advance to the next record in memory
#
def nextRecord(self, event):
+ if not self._form.endEditing():
+ return
message = self._form.nextRecord()
if message:
messageBox = GFMsgBox(self,message)
***************
*** 231,236 ****
--- 290,297 ----
# form move a specific record
#
def jumpToRecord(self,event):
+ if not self._form.endEditing():
+ return
try:
count = abs(int(event.data))-1
except ValueError:
***************
*** 250,267 ****
def jumpRecords(self,event):
count = event.data
for jumps in range(abs(count)):
if count > 0:
self._form.nextRecord()
if count < 0:
self._form.prevRecord()
!
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
self.updateRecordCounter()
self.updateRecordStatus()
!
!
def executeExit(self, event):
if not self._form.isSaved():
message = GFMsgBox(self, GConfig.get('_msgNOTSAVED'))
--- 311,330 ----
def jumpRecords(self,event):
+ if not self._form.endEditing():
+ return
count = event.data
for jumps in range(abs(count)):
if count > 0:
self._form.nextRecord()
if count < 0:
self._form.prevRecord()
!
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
self.updateRecordCounter()
self.updateRecordStatus()
!
!
def executeExit(self, event):
if not self._form.isSaved():
message = GFMsgBox(self, GConfig.get('_msgNOTSAVED'))
***************
*** 269,275 ****
else:
# If above loop didn't cause function to return then exit
self.dispatchEvent(GFEvent('exitApplication','Current data is saved'))
!
return
#
--- 332,338 ----
else:
# If above loop didn't cause function to return then exit
self.dispatchEvent(GFEvent('exitApplication','Current data is saved'))
!
return
#
***************
*** 286,302 ****
self._form.deleteRecord()
self.updateRecordStatus()
!
#
# newRecord
#
# Tells the form to create a new record
#
def newRecord(self, event):
if self._form.readonly:
self.dispatchEvent(GFEvent('formALERT','Form is readonly'))
elif self._form._currentBlock.restrictInsert:
! self.dispatchEvent(GFEvent('formALERT','Block does not allow insert'));
else:
self._form.newRecord()
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
--- 349,367 ----
self._form.deleteRecord()
self.updateRecordStatus()
!
#
# newRecord
#
# Tells the form to create a new record
#
def newRecord(self, event):
+ if not self._form.endEditing():
+ return
if self._form.readonly:
self.dispatchEvent(GFEvent('formALERT','Form is readonly'))
elif self._form._currentBlock.restrictInsert:
! self.dispatchEvent(GFEvent('formALERT','Block does not allow insert'));
else:
self._form.newRecord()
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
***************
*** 317,323 ****
author = self._form.getOption('author') or "Unknown"
description = self._form.getOption('description') or "Unknown"
self.dispatchEvent(GFEvent('uiABOUT',[version,name,formversion,author,description]))
!
#
# toggleInsertMode(self):
#
--- 382,388 ----
author = self._form.getOption('author') or "Unknown"
description = self._form.getOption('description') or "Unknown"
self.dispatchEvent(GFEvent('uiABOUT',[version,name,formversion,author,description]))
!
#
# toggleInsertMode(self):
#
***************
*** 336,344 ****
if self._form._triggerDictionary.has_key('process-printout'):
self._form.fireTrigger('process-printout')
else:
! # TODO: should probably do something else as a default if trigger not
available
# TODO: like a screen print
pass
#
# executeRollback
#
--- 401,410 ----
if self._form._triggerDictionary.has_key('process-printout'):
self._form.fireTrigger('process-printout')
else:
! # TODO: should probably do something else as a default if trigger not
available
# TODO: like a screen print
pass
+
#
# executeRollback
#
***************
*** 350,381 ****
self.updateRecordStatus()
self.updateRecordCounter()
! #
! # cursorMove
! #
! # called whenever an event source has requested that the
! # current input (cursor) position in current entry object be
! # moved to a new location
! #
! def cursorMove(self, event):
! eventType = event.getEvent()
! if eventType == 'requestCURSOREND':
! self._form.moveCursor('end')
! elif eventType == 'requestCURSORHOME':
! self._form.moveCursor('home')
! elif eventType == 'requestCURSORLEFT':
! self._form.moveCursor('left')
! elif eventType == 'requestCURSORRIGHT':
! self._form.moveCursor('right')
- self.dispatchEvent(GFEvent('updateENTRY',self._form._currentEntry));
-
#
# Routines to update parts of the UI's status bar
#
def updateInsertMode(self):
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,None,self._form._insertMode,None,None,None,None]))
!
def updateRecordCounter(self):
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,None,None,self._form._currentBlock._currentRecord+1,self._form._currentBlock._recordCount,None,None]))
--- 416,447 ----
self.updateRecordStatus()
self.updateRecordCounter()
! ## #
! ## # cursorMove
! ## #
! ## # called whenever an event source has requested that the
! ## # current input (cursor) position in current entry object be
! ## # moved to a new location
! ## #
! ## def cursorMove(self, event):
! ## eventType = event.getEvent()
! ## if eventType == 'requestCURSOREND':
! ## self._form.moveCursor('end')
! ## elif eventType == 'requestCURSORHOME':
! ## self._form.moveCursor('home')
! ## elif eventType == 'requestCURSORLEFT':
! ## self._form.moveCursor('left')
! ## elif eventType == 'requestCURSORRIGHT':
! ## self._form.moveCursor('right')
! ##
! ## self.dispatchEvent(GFEvent('updateENTRY',self._form._currentEntry));
#
# Routines to update parts of the UI's status bar
#
def updateInsertMode(self):
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,None,self._form._insertMode,None,None,None,None]))
!
def updateRecordCounter(self):
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,None,None,self._form._currentBlock._currentRecord+1,self._form._currentBlock._recordCount,None,None]))
***************
*** 416,460 ****
self.updateRecordStatus()
self.updatePageCounter()
! #
! # keyPress
! #
! # Called whenever an event source has requested that a
! # charater be inserted into current entry object
! #
! def keyPress(self, event):
! GDebug.printMesg(10, "Keypress event %s"%event.data)
! if (self._form._currentEntry != None):
! if (self._form._currentEntry.readonly and not
self._form._currentBlock.mode=='query'):
! self.dispatchEvent(GFEvent('formALERT','Field is readonly'))
! elif self._form._currentEntry.editOnNull and \
! len(self._form._currentEntry.getValue()) > 0 and \
! not self._form._currentBlock._resultSet.current.isPending():
! self.dispatchEvent(GFEvent('formALERT','Field cannot be modified
after entry'));
! else:
! if self._form.keyPress(event.data):
! self.dispatchEvent(GFEvent('updateENTRY',self._form._currentEntry));
! self.updateRecordStatus()
!
! #
! # removeCharacter
! #
! # Called whenever an event source has requested that a
! # charater be removed from the current entry object
! #
! def removeCharacter(self, event):
! if not self._form._currentEntry.readonly or
self._form._currentBlock.mode=='query':
! if event.getEvent() == 'requestBACKSPACE':
! action = 'backspace'
! else:
! action = 'delete'
!
! if self._form.removeCharacter(action):
! self.dispatchEvent(GFEvent('updateENTRY',self._form._currentEntry));
! self.updateRecordStatus()
! self.updateRecordStatus()
! else:
! self.dispatchEvent(GFEvent('formALERT','Field is readonly'))
#
# changeFocus
--- 482,526 ----
self.updateRecordStatus()
self.updatePageCounter()
! ## #
! ## # keyPress
! ## #
! ## # Called whenever an event source has requested that a
! ## # charater be inserted into current entry object
! ## #
! ## def keyPress(self, event):
! ## GDebug.printMesg(10, "Keypress event %s"%event.data)
! ## if (self._form._currentEntry != None):
! ## if (self._form._currentEntry.readonly and not
self._form._currentBlock.mode=='query'):
! ## self.dispatchEvent(GFEvent('formALERT','Field is readonly'))
! ## elif self._form._currentEntry.editOnNull and \
! ## len(self._form._currentEntry.getValue()) > 0 and \
! ## not self._form._currentBlock._resultSet.current.isPending():
! ## self.dispatchEvent(GFEvent('formALERT','Field cannot be modified
after entry'));
! ## else:
! ## if self._form.keyPress(event.data):
! ##
self.dispatchEvent(GFEvent('updateENTRY',self._form._currentEntry));
! ## self.updateRecordStatus()
! ##
! ## #
! ## # removeCharacter
! ## #
! ## # Called whenever an event source has requested that a
! ## # charater be removed from the current entry object
! ## #
! ## def removeCharacter(self, event):
! ## if not self._form._currentEntry.readonly or
self._form._currentBlock.mode=='query':
! ## if event.getEvent() == 'requestBACKSPACE':
! ## action = 'backspace'
! ## else:
! ## action = 'delete'
! ##
! ## if self._form.removeCharacter(action):
! ## self.dispatchEvent(GFEvent('updateENTRY',self._form._currentEntry));
! ## self.updateRecordStatus()
! ## self.updateRecordStatus()
! ## else:
! ## self.dispatchEvent(GFEvent('formALERT','Field is readonly'))
#
# changeFocus
***************
*** 508,522 ****
messageBox.show()
self.updateRecordStatus()
self.updateRecordCounter()
!
! def replaceValue(self,event):
! replacement = ""
! object = event.data[0]
! value = event.data[1]
! self._form.replaceValue(object,value)
!
! # Hack!
! self.dispatchEvent(GFEvent('updateDETAILBLOCK',self._form._currentBlock))
#
# fireTrigger
--- 574,588 ----
messageBox.show()
self.updateRecordStatus()
self.updateRecordCounter()
! ##
! ## def replaceValue(self,event):
! ## replacement = ""
! ## object = event.data[0]
! ## value = event.data[1]
! ## self._form.replaceValue(object,value)
! ##
! ## # Hack!
! ##
self.dispatchEvent(GFEvent('updateDETAILBLOCK',self._form._currentBlock))
#
# fireTrigger
***************
*** 525,534 ****
self._form.fireTrigger(event.data)
! def toggleCheckBox(self, event):
! object = event.data[0]
! value = event.data[1]
! object.setValue(value)
#
# Activate this puppy...
--- 591,600 ----
self._form.fireTrigger(event.data)
! ## def toggleCheckBox(self, event):
! ## object = event.data[0]
! ## value = event.data[1]
! ## object.setValue(value)
#
# Activate this puppy...
Index: gnue/forms/src/GFKeyMapper.py
diff -c gnue/forms/src/GFKeyMapper.py:1.4 gnue/forms/src/GFKeyMapper.py:1.5
*** gnue/forms/src/GFKeyMapper.py:1.4 Thu Jan 31 00:47:24 2002
--- gnue/forms/src/GFKeyMapper.py Sun Feb 17 01:25:32 2002
***************
*** 269,274 ****
--- 269,278 ----
(vk.RIGHT, 0, 0, 0) : 'CURSORRIGHT',
(vk.END, 0, 0, 0) : 'CURSOREND',
(vk.HOME, 0, 0, 0) : 'CURSORHOME',
+ (vk.LEFT, 1, 0, 0) : 'SELECTLEFT',
+ (vk.RIGHT, 1, 0, 0) : 'SELECTRIGHT',
+ (vk.END, 1, 0, 0) : 'SELECTTOEND',
+ (vk.HOME, 1, 0, 0) : 'SELECTTOHOME',
(vk.BACKSPACE,0, 0, 0) : 'BACKSPACE',
(vk.INSERT, 0, 0, 0) : 'MODETOGGLE',
(vk.DELETE, 0, 0, 0) : 'DELETE',
Index: gnue/forms/src/GFObjects/GFBlock.py
diff -c gnue/forms/src/GFObjects/GFBlock.py:1.37
gnue/forms/src/GFObjects/GFBlock.py:1.38
*** gnue/forms/src/GFObjects/GFBlock.py:1.37 Fri Feb 15 22:57:55 2002
--- gnue/forms/src/GFObjects/GFBlock.py Sun Feb 17 01:25:32 2002
***************
*** 126,131 ****
--- 126,132 ----
def initialize(self):
self._form = self.findParentOfType('GFForm')
+ self._page = self.findParentOfType('GFPage')
# Initialize our events system
GFEventAware.__init__(self, self._form._app.eventController)
Index: gnue/forms/src/GFObjects/GFEntry.py
diff -c gnue/forms/src/GFObjects/GFEntry.py:1.43
gnue/forms/src/GFObjects/GFEntry.py:1.44
*** gnue/forms/src/GFObjects/GFEntry.py:1.43 Fri Feb 15 23:10:32 2002
--- gnue/forms/src/GFObjects/GFEntry.py Sun Feb 17 01:25:32 2002
***************
*** 115,120 ****
--- 115,121 ----
return GFValue._buildObject(self)
+
def initialize(self):
if self.typecast == 'number':
self._numeric = 1
***************
*** 124,129 ****
--- 125,134 ----
elif self.case == 'lower':
self._lowercase = 1
+ self._formatmask = ""
+ self._inputmask = ""
+ self._displaymask = ""
+
if hasattr(self,'formatmask') and len(self.formatmask):
self._formatmask = self.formatmask
self._inputmask = self.formatmask
***************
*** 168,189 ****
default = None
! ## # Create an appropriate display handler
! ## if self.style == 'checkbox':
! ## self.displayHandler = GFDisplayHandler.CheckboxDisplayHandler(self,
! ## self._maskHandler)
! ## elif self.style == 'dropdown':
! ## self.displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,
! ## self._maskHandler)
! ## elif self.typecast == 'text':
! ## self.displayHandler = GFDisplayHandler.TextDisplayHandler(self,
! ## self._inputmask, self._displaymask, self._formatmask)
! ## elif self.typecast == 'number':
! ## self.displayHandler = GFDisplayHandler.NumberDisplayHandler(self,
! ## self._inputmask, self._displaymask)
! ## elif self.typecast == 'date':
! ## self.displayHandler = GFDisplayHandler.DateDisplayHandler(self,
! ## self._inputmask, self._displaymask)
--- 173,196 ----
default = None
! # Create an appropriate display handler
! if self.style == 'checkbox':
! self._displayHandler = GFDisplayHandler.CheckboxDisplayHandler(self,
! self._block._form._app.eventController, self._maskHandler)
! elif self.style == 'dropdown':
! self._displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,
! self._block._form._app.eventController, self._maskHandler)
! elif self.typecast == 'text':
! self._displayHandler = GFDisplayHandler.TextDisplayHandler(self,
! self._block._form._app.eventController,
! self._inputmask, self._displaymask, self._formatmask)
! elif self.typecast == 'number':
! self._displayHandler = GFDisplayHandler.NumberDisplayHandler(self,
! self._block._form._app.eventHandler,
! self._inputmask, self._displaymask)
! elif self.typecast == 'date':
! self._displayHandler = GFDisplayHandler.DateDisplayHandler(self,
! self._block._form._app.eventController, self._inputmask,
self._displaymask)
***************
*** 274,280 ****
self.allowedValues()
# If empty skip test
! # TODO: number type is blowing this function up but I'm not
# TODO: sure if jcater wanted to keep data in it's backend
# TODO: type while in the recordSets
value = 1
--- 281,287 ----
self.allowedValues()
# If empty skip test
! # TODO: number type is blowing this function up but I'm not
# TODO: sure if jcater wanted to keep data in it's backend
# TODO: type while in the recordSets
value = 1
***************
*** 293,299 ****
rs =
self._block._form._datasourceDictionary[datasourceName]._currentResultSet
more = rs.firstRecord()
! while more:
if
string.lower(rs.current.getField(self.foreign_key_description)[:len(value)]) ==
string.lower(value):
newvalue = rs.current.getField(fieldName)
if newvalue == self._oldval: continue
--- 300,306 ----
rs =
self._block._form._datasourceDictionary[datasourceName]._currentResultSet
more = rs.firstRecord()
! while more:
if
string.lower(rs.current.getField(self.foreign_key_description)[:len(value)]) ==
string.lower(value):
newvalue = rs.current.getField(fieldName)
if newvalue == self._oldval: continue
Index: gnue/forms/src/UIbase.py
diff -c gnue/forms/src/UIbase.py:1.55 gnue/forms/src/UIbase.py:1.56
*** gnue/forms/src/UIbase.py:1.55 Sun Feb 17 01:08:46 2002
--- gnue/forms/src/UIbase.py Sun Feb 17 01:25:32 2002
***************
*** 55,74 ****
# Events I monitor...
#
self.registerEventListeners( {
! 'gotoENTRY' : self.switchFocus,
! 'updateENTRY' : self.updateEntry,
! 'gotoPAGE' : self.gotoPage,
! 'formALERT' : self.formAlert,
! 'beginWAIT' : self.beginWait,
! 'endWAIT' : self.endWait,
! 'uiUPDATESTATUS' : self.updateStatusBar,
! 'uiABOUT' : self.aboutBox,
! 'exitApplication' : self.exitApplication,
! 'msgBoxUI' : self.msgBox,
# Clipboard contents
! 'setCLIPBOARD' : self.setClipboardContents,
! 'getCLIPBOARD' : self.getClipboardContents,
})
# Our local "clipboard"
--- 55,75 ----
# Events I monitor...
#
self.registerEventListeners( {
! 'gotoENTRY' : self.switchFocus,
! 'updateENTRY' : self.updateEntry,
! 'updateEntryEditor': self.updateEntryEditor,
! 'gotoPAGE' : self.gotoPage,
! 'formALERT' : self.formAlert,
! 'beginWAIT' : self.beginWait,
! 'endWAIT' : self.endWait,
! 'uiUPDATESTATUS' : self.updateStatusBar,
! 'uiABOUT' : self.aboutBox,
! 'exitApplication' : self.exitApplication,
! 'msgBoxUI' : self.msgBox,
# Clipboard contents
! 'setCLIPBOARD' : self.setClipboardContents,
! 'getCLIPBOARD' : self.getClipboardContents,
})
# Our local "clipboard"
***************
*** 92,113 ****
# widgets with the GFObj used as
the key
self.containerWidgets= ['GFPage'] # GFForm objects that contain others
!
self._pageList = [] # A list of page widgets created by
the form
!
self.keyEvents = {} # Keyboard events from the widget
set the
# UI is expected to respond to
!
# A dictionary of functions used by buildUI to build the widgets. Can
override in
# UI specific module if necessary.
self.widgetConstructorFunction = {
! 'GFBox' : self.stdHandler,
'GFButton' : self.stdHandler,
'GFEntry' : self.stdHandler,
'GFForm' : self.stdHandler,
! 'GFLabel' : self.stdHandler,
! 'GFScrollBar' : self.stdHandler,
! 'GFPage' : self.stdHandler,
}
def stdHandler(self):
--- 93,114 ----
# widgets with the GFObj used as
the key
self.containerWidgets= ['GFPage'] # GFForm objects that contain others
!
self._pageList = [] # A list of page widgets created by
the form
!
self.keyEvents = {} # Keyboard events from the widget
set the
# UI is expected to respond to
!
# A dictionary of functions used by buildUI to build the widgets. Can
override in
# UI specific module if necessary.
self.widgetConstructorFunction = {
! 'GFBox' : self.stdHandler,
'GFButton' : self.stdHandler,
'GFEntry' : self.stdHandler,
'GFForm' : self.stdHandler,
! 'GFLabel' : self.stdHandler,
! 'GFScrollBar' : self.stdHandler,
! 'GFPage' : self.stdHandler,
}
def stdHandler(self):
***************
*** 186,194 ****
# clipboard.
#
def getClipboardContents(self, event):
! event.SetResult(self.__clipboard)
def setClipboardContents(self, event):
self.__clipboard = "%s" % event.text
--- 187,197 ----
# clipboard.
#
def getClipboardContents(self, event):
! print "Getting clipboard '%s'" % self.__clipboard
! event.__result__ = "%s" % self.__clipboard
def setClipboardContents(self, event):
+ print "Setting clipboard '%s'" % event.text
self.__clipboard = "%s" % event.text
***************
*** 238,243 ****
--- 241,248 ----
index = formObject._visibleIndex
self._formToUIWidget[formObject].indexedFocus(index)
+ self.dispatchEvent(GFEvent('beginEditMode', formObject))
+
#
# aboutBox
***************
*** 267,318 ****
dialog.Destroy()
#
# updateEntry
#
def updateEntry(self,event):
if event.data.hidden:
return
- index = event.data._visibleIndex
! block = event.data._block
form = block._form
currentRecord = block._resultSet.getRecordNumber()
! if hasattr(event.data, 'style'):
! style = event.data.style
else:
style = 'text'
# Fill the prior spots
if block.mode != 'query':
for count in range(index):
! value =
block._resultSet.getRecord(currentRecord-(index-count)).getField(event.data.field)
! if event.data._maskHandler:
! value = event.data._maskHandler.getFormattedOutput(value)
! if value == None: value = ""
! value = str(value) # Done to remove unicode types which wxpython
doesn't like
! if style == 'dropdown':
! value = event.data.allowedValues()[value]
! elif style == 'checkbox':
! value = value in (1,'1','T','t','TRUE','true')
! self._formToUIWidget[event.data].setValue(value,count)
# fill currently indexed spot
! if style == 'dropdown':
! value = event.data.allowedValues()["%s" % event.data.getValue()]
! else:
! value = event.data.getDisplay( hasFocus= event.data ==
form._currentEntry )
! value = str(value) # Done to remove unicode types which wxpython doesn't
like
!
! if style == 'checkbox':
! value = event.data.getValue()
! value = value in (1,'1','T','t','TRUE','true')
! self._formToUIWidget[event.data].setValue(value, index)
! else:
! self._formToUIWidget[event.data].setValue(value, index)
!
self._formToUIWidget[event.data].setCursorPosition(event.data._cursorPosition,
index)
# Fill trailing spots
#
--- 272,350 ----
dialog.Destroy()
#
+ # updateEntryEditor
+ #
+ def updateEntryEditor(self, event):
+ print "Refreshing!!2"
+
+ index = event.object._visibleIndex
+
+ print event.display
+ widget = self._formToUIWidget[event.object]
+ widget.setValue(event.display, index)
+ widget.setCursorPosition(event.cursor, index)
+
+ if event.selection != None:
+ selection1, selection2 = event.selection
+ widget.setSelectedArea(selection1, selection2, index)
+
+
+ #
# updateEntry
#
def updateEntry(self,event):
+
if event.data.hidden:
return
! entry = event.data
! handler = entry._displayHandler
!
! index = entry._visibleIndex
!
! block = entry._block
form = block._form
currentRecord = block._resultSet.getRecordNumber()
! if hasattr(entry, 'style'):
! style = entry.style
else:
style = 'text'
# Fill the prior spots
if block.mode != 'query':
for count in range(index):
! handler.setValue(block._resultSet.getRecord(currentRecord- \
! (index-count)).getField(entry.field))
! value = handler.getDisplay()
! ## if value == None: value = ""
! ## value = str(value) # Done to remove unicode types which wxpython
doesn't like
! ## ??????
! ## if style == 'dropdown':
! ## value = entry.allowedValues()[value]
! ## ??????
! ## elif style == 'checkbox':
! ## value = value in (1,'1','T','t','TRUE','true')
! self._formToUIWidget[entry].setValue(value,count)
# fill currently indexed spot
! ## if style == 'dropdown':
! ## value = entry.allowedValues()["%s" % entry.getValue()]
! ## else:
! ## value = handler.getDisplay()
! ## value = str(value) # Done to remove unicode types which wxpython
doesn't like
! ##
! ## if style == 'checkbox':
! ## value = entry.getValue()
! ## value = value in (1,'1','T','t','TRUE','true')
! ## self._formToUIWidget[entry].setValue(value, index)
! ## else:
! handler.setValue(entry.getValue())
! value = handler.getDisplay()
! self._formToUIWidget[entry].setValue(value, index)
! ## self._formToUIWidget[entry].setCursorPosition(0, index)
# Fill trailing spots
#
***************
*** 320,347 ****
# you do not want to just add 1 to count
# as the formulas would then be off
count = index
! while count < int(event.data._rows):
if count != index:
rec = block._resultSet.getRecord(currentRecord+(count-index))
if rec == None:
if style == 'checkbox':
value = int(0)
else:
value = ""
else:
! value = rec.getField(event.data.field)
!
! if event.data._maskHandler:
! value = event.data._maskHandler.getFormattedOutput(value)
!
! if value == None: value = ""
! value = str(value) # Done to remove unicode types which wxpython
doesn't like
! if style == 'dropdown':
! value = event.data.allowedValues()[value]
! elif style == 'checkbox':
! value = value in (1,'1','T','t','TRUE','true') # sets to 1 or 0
! self._formToUIWidget[event.data].setValue(value, count)
count += 1
--- 352,378 ----
# you do not want to just add 1 to count
# as the formulas would then be off
count = index
! while count < int(entry._rows):
if count != index:
rec = block._resultSet.getRecord(currentRecord+(count-index))
+
if rec == None:
if style == 'checkbox':
value = int(0)
else:
value = ""
else:
+ handler.setValue(rec.getField(entry.field))
+ value = handler.getDisplay()
! ##
! ## if value == None: value = ""
! ## value = str(value) # Done to remove unicode types which wxpython
doesn't like
! ## if style == 'dropdown':
! ## value = event.data.allowedValues()[value]
! ## elif style == 'checkbox':
! ## value = value in (1,'1','T','t','TRUE','true') # sets to 1 or 0
! self._formToUIWidget[entry].setValue(value, count)
count += 1
Index: gnue/forms/src/UIwxpython.py
diff -c gnue/forms/src/UIwxpython.py:1.141 gnue/forms/src/UIwxpython.py:1.142
*** gnue/forms/src/UIwxpython.py:1.141 Sun Feb 17 01:19:29 2002
--- gnue/forms/src/UIwxpython.py Sun Feb 17 01:25:32 2002
***************
*** 213,218 ****
--- 213,226 ----
fileMenu.Append( 101, "E&xit",GConfig.get('msg_exit'))
EVT_MENU(self._wxapp, 101, self.menuExitEvent)
+ editMenu = wxMenu()
+ editMenu.Append(401, "Cut","Copy the selected text")
+ EVT_MENU(self._wxapp, 401, lambda event, l=self:
l.dispatchEvent(GFEvent('requestCUT')))
+ editMenu.Append(402, "Copy","Copy the selected text")
+ EVT_MENU(self._wxapp, 402, lambda event, l=self:
l.dispatchEvent(GFEvent('requestCOPY')))
+ editMenu.Append(403, "Paste","Copy the selected text")
+ EVT_MENU(self._wxapp, 403, lambda event, l=self:
l.dispatchEvent(GFEvent('requestPASTE')))
+
dataMenu = wxMenu()
dataMenu.Append( 201, "Next Record
(Up)",GConfig.get('msg_next'))
EVT_MENU(self._wxapp, 201, lambda event, l=self:
l.dispatchEvent(GFEvent('requestNEXTRECORD')))
***************
*** 241,246 ****
--- 249,255 ----
menuBar = wxMenuBar()
menuBar.Append( fileMenu, "&File" )
+ menuBar.Append( editMenu, "&Edit" )
menuBar.Append( dataMenu, "&Data" )
menuBar.Append( helpMenu, "&Help" )
***************
*** 348,354 ****
if currentPage and maxPage:
self.statusBar.SetStatusText(string.strip("%s/%s" %
(currentPage,maxPage)),4)
!
#
# Adjust the status fields to reflect width of text in them
#
--- 357,363 ----
if currentPage and maxPage:
self.statusBar.SetStatusText(string.strip("%s/%s" %
(currentPage,maxPage)),4)
!
#
# Adjust the status fields to reflect width of text in them
#
***************
*** 499,505 ****
self.widgets[index].SetInsertionPoint(position)
except AttributeError:
pass # For label-style entries
!
def _addToCrossRef(self, widget,gfobject, uiobject):
id = widget.GetId()
_IdToWxObj[id]=widget
--- 508,520 ----
self.widgets[index].SetInsertionPoint(position)
except AttributeError:
pass # For label-style entries
!
! def setSelectedArea(self, selection1, selection2, index=0):
! try:
! self.widgets[index].SetSelection(selection1, selection2)
! except AttributeError:
! pass # For label-style entries
!
def _addToCrossRef(self, widget,gfobject, uiobject):
id = widget.GetId()
_IdToWxObj[id]=widget
***************
*** 508,519 ****
def createWidget(self, object, container, textWidth, textHeight,
widgetWidth, widgetHeight, interface, spacer,initialize=1):
!
newWidget = self._createWidget(object, container, textWidth, textHeight,
widgetWidth, widgetHeight, interface,
spacer,initialize)
initFont(newWidget)
self._addToCrossRef(newWidget,object,self)
return newWidget
#
# UILabel
#
--- 523,535 ----
def createWidget(self, object, container, textWidth, textHeight,
widgetWidth, widgetHeight, interface, spacer,initialize=1):
!
newWidget = self._createWidget(object, container, textWidth, textHeight,
widgetWidth, widgetHeight, interface,
spacer,initialize)
initFont(newWidget)
self._addToCrossRef(newWidget,object,self)
return newWidget
+
#
# UILabel
#
***************
*** 651,657 ****
# To make the label consistent with the other entry styles...
newWidget.SetValue = newWidget.SetLabel
newWidget.GetValue = newWidget.GetLabel
!
elif style == 'checkbox':
newWidget = wxCheckBox(container, -1, "",defaultPoint,
wxSize(int(2)*int(textWidth),int(1)*int(textHeight)),
--- 667,673 ----
# To make the label consistent with the other entry styles...
newWidget.SetValue = newWidget.SetLabel
newWidget.GetValue = newWidget.GetLabel
!
elif style == 'checkbox':
newWidget = wxCheckBox(container, -1, "",defaultPoint,
wxSize(int(2)*int(textWidth),int(1)*int(textHeight)),
***************
*** 705,711 ****
# self.dispatchEvent(action)
!
#
# UIForm
#
--- 721,727 ----
# self.dispatchEvent(action)
!
#
# UIForm
#
***************
*** 729,740 ****
EVT_NOTEBOOK_PAGE_CHANGING(newWidget, newWidget.GetId(),
self.notebookTabHandler)
_NOTEBOOK = newWidget
! else:
newWidget = wxPanel(interface.mainWindow.panel,-1, wxDefaultPosition)
!
! if initialize:
EVT_CLOSE(interface.mainWindow,interface.closeTrap)
!
return newWidget
def notebookTabHandler(self,event):
--- 745,756 ----
EVT_NOTEBOOK_PAGE_CHANGING(newWidget, newWidget.GetId(),
self.notebookTabHandler)
_NOTEBOOK = newWidget
! else:
newWidget = wxPanel(interface.mainWindow.panel,-1, wxDefaultPosition)
!
! if initialize:
EVT_CLOSE(interface.mainWindow,interface.closeTrap)
!
return newWidget
def notebookTabHandler(self,event):
***************
*** 742,753 ****
print "HOO"
action = None
global _LOOPTRAP
!
if _LOOPTRAP == 0:
action = GFEvent('requestPAGE',event.GetSelection())
_LOOPTRAP = not _LOOPTRAP # flip the value
!
if action:
_EVENTPROCESSOR(action)
--- 758,769 ----
print "HOO"
action = None
global _LOOPTRAP
!
if _LOOPTRAP == 0:
action = GFEvent('requestPAGE',event.GetSelection())
_LOOPTRAP = not _LOOPTRAP # flip the value
!
if action:
_EVENTPROCESSOR(action)
***************
*** 860,866 ****
self._eventProcessor(GFEvent('requestCURSORMOVE',position=cursorPosition))
event.Skip()
!
class keyboardEvtHandler(uiBaseEvtHandler):
def __init__(self, eventProcessor):
eventList = [wxEVT_CHAR,wxEVT_KEY_DOWN]
--- 876,882 ----
self._eventProcessor(GFEvent('requestCURSORMOVE',position=cursorPosition))
event.Skip()
!
class keyboardEvtHandler(uiBaseEvtHandler):
def __init__(self, eventProcessor):
eventList = [wxEVT_CHAR,wxEVT_KEY_DOWN]
***************
*** 960,966 ****
loginButton = wxButton(self.dlg,19998,'Login')
cancelButton = wxButton(self.dlg,19999,'Cancel')
! EVT_BUTTON(self.dlg, 19998, self.loginButtonEventTrap)
EVT_BUTTON(self.dlg, 19999, self.loginCancelEventTrap)
dlgWidth = max(dlgWidth, loginButton.GetSize().GetWidth() +
cancelButton.GetSize().GetWidth() + 6) + 20
--- 976,982 ----
loginButton = wxButton(self.dlg,19998,'Login')
cancelButton = wxButton(self.dlg,19999,'Cancel')
! EVT_BUTTON(self.dlg, 19998, self.loginButtonEventTrap)
EVT_BUTTON(self.dlg, 19999, self.loginCancelEventTrap)
dlgWidth = max(dlgWidth, loginButton.GetSize().GetWidth() +
cancelButton.GetSize().GetWidth() + 6) + 20
***************
*** 1007,1013 ****
cancelButton.GetSize().GetHeight())))
self.loginButton = loginButton
!
self.dlg.SetSize(wxSize(dlgWidth, dlgHeight))
--- 1023,1029 ----
cancelButton.GetSize().GetHeight())))
self.loginButton = loginButton
!
self.dlg.SetSize(wxSize(dlgWidth, dlgHeight))