[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/gnuef client/gfclient src/GFController.py ...
From: |
James Thompson |
Subject: |
gnue/gnuef client/gfclient src/GFController.py ... |
Date: |
Sat, 17 Mar 2001 06:11:25 -0800 |
CVSROOT: /cvs
Module name: gnue
Changes by: James Thompson <address@hidden> 01/03/17 06:11:25
Modified files:
gnuef/client : gfclient
gnuef/src : GFController.py GFEvent.py GFForm.py
GFObjects.py GFOptions.py UIbase.py
UIwxpython.py
Log message:
Moved gfclient logic out of GFForm into gfclient where it belongs
Fixed UI corruption issues in multi-block forms
CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/client/gfclient.diff?r1=1.23&r2=1.24
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFController.py.diff?r1=1.9&r2=1.10
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFEvent.py.diff?r1=1.11&r2=1.12
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFForm.py.diff?r1=1.77&r2=1.78
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFObjects.py.diff?r1=1.69&r2=1.70
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFOptions.py.diff?r1=1.23&r2=1.24
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/UIbase.py.diff?r1=1.24&r2=1.25
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/UIwxpython.py.diff?r1=1.74&r2=1.75
Patches:
Index: gnue/gnuef/client/gfclient
diff -u gnue/gnuef/client/gfclient:1.23 gnue/gnuef/client/gfclient:1.24
--- gnue/gnuef/client/gfclient:1.23 Sun Feb 25 12:02:54 2001
+++ gnue/gnuef/client/gfclient Sat Mar 17 06:11:25 2001
@@ -8,10 +8,15 @@
# and passes control to a UI.
#
# NOTES:
+# Once all the events are moved back in here
+# debug
+# make the next/prec methods more generic in the GFForm
+# change self.form in here to a list
+
#
# Copyright (c) 2000 Free Software Foundation
#
-# $Revision: 1.23 $ $Date: 2001/02/25 20:02:54 $ $Author: jamest $
+# $Revision: 1.24 $ $Date: 2001/03/17 14:11:25 $ $Author: jamest $
#
import pstats
@@ -26,8 +31,6 @@
from gnue.forms.GFDebug import *
from gnue.forms.GFForm import *
-__version__ = "0.0.2"
-
_usage = """
Usage: %s [-h] [--help] [-d level] [--debug=level] \\
[-D tracefile] [--debug_file=tracefile] \\
@@ -38,8 +41,8 @@
Report bugs to address@hidden
"""
-class GFClient:
- def __init__(self):
+class GFClient(GFController):
+ def __init__(self):
# Parse command line options
self.CmdOpt = GFGetOpt()
self.CmdOpt.parseOptions(sys.argv)
@@ -49,9 +52,375 @@
self.help = self.CmdOpt.getOption('help')
self.version = self.CmdOpt.getOption('version')
self.profile = self.CmdOpt.getOption('profile')
+
+ GFController.__init__(self)
+
+ # Incomming events
+ self.incommingEvent = {'requestNEXTENTRY' : self.nextEntry,
+ 'requestPREVENTRY' : self.previousEntry,
+ 'requestNEXTBLOCK' : self.nextBlock,
+ 'requestPREVBLOCK' : self.previousBlock,
+ 'requestPREVRECORD' : self.prevRecord,
+ 'requestNEXTRECORD' : self.nextRecord,
+ 'requestJUMPRECORD' : self.jumpRecords,
+
+ '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,
+
+ 'requestNEWRECORD' : self.newRecord,
+ 'requestMARKFORDELETE' : self.deleteRecord,
+
+ 'requestQUERY' : self.requestQuery,
+ 'executeQUERY' : self.executeQuery,
+ 'requestCOMMIT' : self.executeCommit,
+ 'requestROLLBACK' : self.executeRollback,
+ 'requestEXIT' : self.executeExit,
+ 'requestABOUT' : self.executeAbout,
+ 'fireTRIGGER' : self.fireTrigger,
+ }
+
+ # Init database list
+ self.databaseDictionary = {}
+
+ #
+ # nextEntry
+ #
+ # Called whenever an event source has requested that the
+ # focus change to the next data entry object
+ #
+ def nextEntry(self, event):
+ self.form.nextEntry()
+ self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+ self.updateRecordStatus()
+ self.updateTip()
+
+ #
+ # prevEntry
+ #
+ # Called whenever an event source has requested that the
+ # focus change to the next data entry object
+ #
+ def previousEntry(self, event):
+ self.form.previousEntry()
+ self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+ self.updateRecordStatus()
+ self.updateTip()
+
+ #
+ # nextBlock
+ #
+ # Called whenever an event source has requested that the
+ # 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()
+
+ #
+ # previousBlock
+ #
+ # Called whenever an event source has requested that the
+ # focus change to the next data entry block
+ #
+ def previousBlock(self, event):
+ self.form.previousBlock()
+ self.dispatchEvent(GFEvent('gotoPAGE',self.form.currentPage));
+ self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+ self.updateStatus()
+
+ #
+ # previousRecord
+ #
+ # Called enever an event source has requested that the
+ # form advance to the next record in memory
+ #
+ def prevRecord(self, event):
+ self.form.prevRecord()
+ self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+ self.updateRecordCounter()
+ self.updateRecordStatus()
+
+ #
+ # nextRecord
+ #
+ # Called enever an event source has requested that the
+ # form advance to the next record in memory
+ #
+ def nextRecord(self, event):
+ self.form.nextRecord()
+ self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+ self.updateRecordCounter()
+ self.updateRecordStatus()
+
+ #
+ # jumpRecord
+ #
+ # Called enever an event source has requested that the
+ # form move an arbitrary number of records
+ #
+ 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():
+ #self.dispatchEvent( GFEvent( 'msgBoxUI', GFOptions._msgDETAILNOTSAVED) )
+
+ message = GFMsgBox(self, GFOptions._msgNOTSAVED)
+ message.show()
+ else:
+ # If above loop didn't cause function to return then exit
+ self.dispatchEvent(GFEvent('exitApplication','Current data is saved'))
+
+ return
+
+ #
+ # deleteRecord
+ #
+ # Tells the form to mark a record for delete
+ #
+ def deleteRecord(self, event):
+ if not hasattr(self.form,'readonly'):
+ self.form.deleteRecord()
+ self.updateRecordStatus()
+ else:
+ self.dispatchEvent(GFEvent('formALERT','Form is readonly'))
+
+
+ #
+ # newRecord
+ #
+ # Tells the form to create a new record
+ #
+ def newRecord(self, event):
+ if not hasattr(self,'readonly'):
+ self.form.newRecord()
+
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+ self.updateRecordCounter()
+ self.updateRecordStatus()
+ else:
+ self.dispatchEvent(GFEvent('formALERT','Form is readonly'))
+
+
+ #
+ # executeAbout
+ #
+ # Displays the about dialog
+ #
+ def executeAbout(self,event):
+ version = GFOptions.VERSION
+ name = hasattr(self.form.title,"title") and self.form.title or "Unknown"
+ formversion = hasattr(self.form,"version") and self.form.version or
"Unknown"
+ author = hasattr(self.form,"author") and self.form.author or "Unknown"
+ description = hasattr(self.form,"description") and self.form.description
or "Unknown"
+
self.dispatchEvent(GFEvent('uiABOUT',[version,name,formversion,author,description]))
+
+ #
+ # toggleInsertMode(self):
+ #
+ # tells the form to toggle mode
+ #
+ def toggleInsertMode(self, event):
+ self.form.toggleInsertMode()
+ self.updateInsertMode()
+
+ #
+ # executeRollback
+ #
+ # Tells the form to rollback everything it contains
+ #
+ def executeRollback(self,event):
+ self.form.rollback()
+ self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+ 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+1,None,None]))
+
+ def updatePageCounter(self):
+ maxPages = len(self.form.pageList)
+ for count in range(len(self.form.pageList)):
+ if self.form.pageList[count] == self.form.currentPage:
+ break
+
+
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,None,None,None,None,count+1,maxPages]))
+
+ def updateTip(self):
+ if hasattr(self.form.currentEntry,'tip'):
+ tip = self.form.currentEntry.tip
+ else:
+ tip = ''
+
+
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[tip,None,None,None,None,None,None]))
+
+ def updateRecordStatus(self):
+ if self.form.currentBlock.mode == 'query':
+ status = 'query'
+ else:
+ status =
self.form.currentBlock.dataSourceLink.resultSetStatus[self.form.currentBlock.currentRecord]
+
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,status,None,None,None,None,None]))
+
+ def updateStatus(self):
+ self.updateTip()
+ self.updateInsertMode()
+ self.updateRecordCounter()
+ 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):
+ GFDebug.printMesg(10, "Keypress event %s"%event.data)
+ if (self.form.currentEntry != None):
+ if not hasattr(self.form.currentEntry,'readonly') or
self.form.currentBlock.mode=='query':
+ if self.form.keyPress(event.data):
+ self.dispatchEvent(GFEvent('updateENTRY',self.form.currentEntry));
+ self.updateRecordStatus()
+ else:
+ self.dispatchEvent(GFEvent('formALERT','Field is readonly'))
+
+ #
+ # removeCharacter
+ #
+ # Called whenever an event source has requested that a
+ # charater be removed from the current entry object
+ #
+ def removeCharacter(self, event):
+ if not hasattr(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
+ #
+ # changes to the requested entry object requested by
+ # an event sourse
+ #
+ def changeFocus(self, event):
+ if event.data.getObjectType()=='GFEntry' and (hasattr(event.data,'hidden')
or
+
(hasattr(event.data,'readonly') and self.form.currentBlock.mode!='query')):
+ return
+ newEntry = event.data
+ self.form.changeFocus(newEntry)
+ self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+
+ self.updateRecordStatus()
+ self.updateTip()
+
- def run(self):
+ def requestQuery(self, event):
+ if hasattr(self.form.currentBlock,"master"):
+ self.dispatchEvent( GFEvent( 'msgBoxUI', "Query from detail blocks
currently not supported"))
+ return
+ message = self.form.prepQuery()
+ if message:
+ messageBox = GFMsgBox('HI')
+ messageBox.show()
+ return
+ self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+ self.updateStatus()
+
+
+
+
+ def executeCommit(self, event):
+ message = self.form.commit()
+ if message:
+ messageBox = GFMsgBox(message)
+ messageBox.show()
+ return
+ self.dispatchEvent(GFEvent('gotoENTRY',{'object':self.form.currentEntry}))
+ self.updateRecordStatus()
+ self.updateRecordCounter()
+
+ def executeQuery(self, event):
+ message = self.form.executeQuery()
+ if message:
+ messageBox = GFMsgBox(message)
+ messageBox.show()
+
+ 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
+ #
+ def fireTrigger(self, event):
+ self.form.fireTrigger(event.data)
+
+
+#
+# old stuff still in use
+#
+
+
+ def run(self):
if (self.debug_file != None):
fh = open( self.debug_file, 'w' )
GFDebug.catchStderr( fh )
@@ -68,7 +437,7 @@
print _usage % (sys.argv[0])
sys.exit()
elif self.version :
- print "%s v%s" % (sys.argv[0], __version__)
+ print "%s v%s" % (sys.argv[0], GFOptions.VERSION)
sys.exit()
else:
if sys.argv[0][-8:] != 'gfclient':
@@ -84,26 +453,33 @@
if os.environ.has_key('DISPLAY') or os.name != 'posix':
from gnue.forms import UIwxpython
ui=UIwxpython.GFUserInterface()
+
else:
SetOptions.ui_type='text'
if self.ui_type == 'pytext':
from gnue.forms import UIpyncurses
- ui=UIpyncurses.GFUserInterface()
+ ui=UIpyncurses.GFUserInterface(self)
if self.ui_type == 'text' :
from gnue.forms import UIcurses
- ui=UIcurses.GFUserInterface()
+ ui=UIcurses.GFUserInterface(self)
#
+ # Register to receive events from the UI
+ #
+ ui.registerEventListener(self.processEvent)
+ self.registerEventListener(ui.processEvent)
+
+ #
# get the form file handler
# we have to deal with win32 urllib thinking the the c: in c:/foo/bar is a
protocol
drive = os.path.splitdrive(self.formfile)
try:
if len(drive[0]):
- fp = open(self.formfile,'r')
+ fileHandle = open(self.formfile,'r')
else:
- fp = urllib.urlopen(self.formfile)
+ fileHandle = urllib.urlopen(self.formfile)
except:
print "The file %s doesn't seem to exist.\n%s\n%s" % (self.formfile,
sys.exc_info()[0], sys.exc_info()[1])
sys.exit()
@@ -111,19 +487,51 @@
#
# Build the form tree
#
- form = GFForm()
- control = GFController(form, ui)
- form.run(fp)
- fp.close()
+ self.form = GFForm(None,self)
+ control = GFController()
+ self.form.buildFormTree(fileHandle)
+ fileHandle.close()
+
+ #
+ # extract DB info and init datasources
+ #
+ databaseList = self.form.getDatabaseList()
+ for key in databaseList.keys():
+ object = databaseList[key]
+ while 1:
+ try:
+ #Login
+ authcode = ["", "", object]
+ self.dispatchEvent( GFEvent('getLogin', authcode) )
+ user = authcode[0]
+ passwd = authcode[1]
+
+ object.initialize(user,passwd)
+
+ except DBError:
+ message = GFMsgBox(self,"Database initialization error:\n%s\n%s " %
(sys.exc_info()[0], sys.exc_info()[1]))
+ message.show()
+
+ except:
+ if sys.platform != 'win32':
+ os.system("stty sane")
+ print "Unexpected error:", sys.exc_info()[0], sys.exc_info()[1]
+ sys.exit()
+ else:
+ break
+ self.form.initializeDatasources()
+
+
+
# pass control to UI
- ui.buildForm(form)
- ui.activateForm(form)
+ ui.buildForm(self.form)
+ ui.activateForm(self.form)
ui.mainLoop()
if __name__ == '__main__':
GFClient = GFClient()
- if GFClient.profile :
+ if GFClient.profile:
import profile
profile.run("GFClient.run()","runstats")
p = pstats.Stats('runstats')
Index: gnue/gnuef/src/GFController.py
diff -u gnue/gnuef/src/GFController.py:1.9 gnue/gnuef/src/GFController.py:1.10
--- gnue/gnuef/src/GFController.py:1.9 Thu Jan 11 22:08:48 2001
+++ gnue/gnuef/src/GFController.py Sat Mar 17 06:11:25 2001
@@ -18,13 +18,14 @@
from GFEvent import *
class GFController(GFEventAware):
- def __init__(self, form, ui):
+# def __init__(self, form, ui):
+ def __init__(self):
GFEventAware.__init__(self)
- self.form = form
- self.ui = ui
+# self.form = form
+# self.ui = ui
- ui.registerEventListener(form.processEvent)
- form.registerEventListener(ui.processEvent)
+# ui.registerEventListener(form.processEvent)
+# form.registerEventListener(ui.processEvent)
Index: gnue/gnuef/src/GFEvent.py
diff -u gnue/gnuef/src/GFEvent.py:1.11 gnue/gnuef/src/GFEvent.py:1.12
--- gnue/gnuef/src/GFEvent.py:1.11 Mon Jan 8 17:55:10 2001
+++ gnue/gnuef/src/GFEvent.py Sat Mar 17 06:11:25 2001
@@ -57,6 +57,7 @@
#
def processEvent(self, event):
try:
+# GFDebug.printMesg(3, "Event: %s " % (event.getEvent()))
self.incommingEvent[event.event] (event)
except KeyError:
GFDebug.printMesg(3, "Unknown Event: %s " % (event.getEvent()))
Index: gnue/gnuef/src/GFForm.py
diff -u gnue/gnuef/src/GFForm.py:1.77 gnue/gnuef/src/GFForm.py:1.78
--- gnue/gnuef/src/GFForm.py:1.77 Tue Mar 13 16:18:34 2001
+++ gnue/gnuef/src/GFForm.py Sat Mar 17 06:11:25 2001
@@ -24,42 +24,12 @@
from GFTriggerError import *
class GFForm(GFObj, GFEventAware):
- def __init__(self, parent=None):
+ def __init__(self, parent=None, app= None):
GFObj.__init__(self, parent)
GFEventAware.__init__(self)
self.type = "GFForm"
self.currentObject = [self]
- # Event processing
- self.incommingEvent = {'requestNEXTENTRY' : self.nextEntry,
- 'requestPREVENTRY' : self.previousEntry,
- 'requestNEXTBLOCK' : self.nextBlock,
- 'requestPREVBLOCK' : self.previousBlock,
- '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,
- 'requestPREVRECORD' : self.prevRecord,
- 'requestNEXTRECORD' : self.nextRecord,
-
- 'requestNEWRECORD' : self.newRecord,
- 'requestMARKFORDELETE' : self.deleteRecord,
-
- 'requestQUERY' : self.requestQuery,
- 'executeQUERY' : self.executeQuery,
- 'requestCOMMIT' : self.executeCommit,
- 'requestROLLBACK' : self.executeRollback,
- 'requestEXIT' : self.executeExit,
- 'requestABOUT' : self.executeAbout,
- 'fireTRIGGER' : self.fireTrigger,
- }
-
self.databaseDictionary = {}
self.datasourceDictionary = {}
@@ -79,8 +49,9 @@
self.borderPercentage = 10
self.textPercentage = 7.5
+ self.app = app
- def run(self, URL):
+ def buildFormTree(self, URL):
# Create a parser
parser = saxexts.make_parser()
@@ -96,7 +67,9 @@
self.walk(self.setInitialFocus)
# Connect to the defined databases
+ #print "Am i here and shoud init the database stuff"
self.walk(self.initDatabaseObjects)
+ #print "yes i Am i here"
# build the block list
self.walk(self.initBlocks)
@@ -127,8 +100,9 @@
self.triggerns['GFMsgBox'] = GFMsgBox
self.walk(self.initTriggers)
+
+
- self.updateStatus()
#
# begin routines made for walking
@@ -165,32 +139,32 @@
def initDatabaseObjects(self, object):
if object.getObjectType() =='GFDataSource':
self.datasourceDictionary[object.name]=object
- object.initialize()
+# object.initialize()
if object.getObjectType() =='GFDatabase':
self.databaseDictionary[object.name]=object
- while 1:
- try:
- #Login
- authcode = ["", "", object]
- self.dispatchEvent( GFEvent('getLogin', authcode) )
- user = authcode[0]
- passwd = authcode[1]
-
- object.initialize(user,passwd)
-
- except DBError:
- message = GFMsgBox(self,"Database initialization error:\n%s\n%s " %
(sys.exc_info()[0], sys.exc_info()[1]))
- message.show()
+# while 1:
+# try:
+# #Login
+# authcode = ["", "", object]
+# self.dispatchEvent( GFEvent('getLogin', authcode) )
+# user = authcode[0]
+# passwd = authcode[1]
+#
+# object.initialize(user,passwd)
+#
+# except DBError:
+# message = GFMsgBox(self,"Database initialization error:\n%s\n%s " %
(sys.exc_info()[0], sys.exc_info()[1]))
+# message.show()
- except:
- if sys.platform != 'win32':
- os.system("stty sane")
- print "Unexpected error:", sys.exc_info()[0], sys.exc_info()[1]
- sys.exit()
- else:
- break
-
+# except:
+# if sys.platform != 'win32':
+# os.system("stty sane")
+# print "Unexpected error:", sys.exc_info()[0], sys.exc_info()[1]
+# sys.exit()
+# else:
+# break
+
def initTriggers(self, object):
if object.getObjectType() == "GFTrigger":
object.triggerns.update( self.triggerns )
@@ -199,49 +173,18 @@
#
# end of routines made for walking
- #
-
- #
- # Routines to update parts of the UI's status bar
#
- def updateInsertMode(self):
-
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,None,self.insertMode,None,None,None,None]))
-
- def updateRecordCounter(self):
-
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,None,None,self.currentBlock.currentRecord+1,self.currentBlock.recordCount+1,None,None]))
-
- def updatePageCounter(self):
- maxPages = len(self.pageList)
- for count in range(len(self.pageList)):
- if self.pageList[count] == self.currentPage:
- break
-
-
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,None,None,None,None,count+1,maxPages]))
+ def getDatabaseList(self):
+ return self.databaseDictionary
+
- def updateTip(self):
- if hasattr(self.currentEntry,'tip'):
- tip = self.currentEntry.tip
- else:
- tip = ''
-
-
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[tip,None,None,None,None,None,None]))
-
- def updateRecordStatus(self):
- if self.currentBlock.mode == 'query':
- status = 'query'
- else:
- status =
self.currentBlock.dataSourceLink.resultSetStatus[self.currentBlock.currentRecord]
-
self.dispatchEvent(GFEvent('uiUPDATESTATUS',[None,status,None,None,None,None,None]))
-
- def updateStatus(self):
- self.updateTip()
- self.updateInsertMode()
- self.updateRecordCounter()
- self.updateRecordStatus()
- self.updatePageCounter()
+ def initializeDatasources(self):
+ for key in self.datasourceDictionary.keys():
+ object = self.datasourceDictionary[key]
+ object.initialize()
def updateUIEntry(self,entry):
- self.dispatchEvent(GFEvent('updateENTRY',entry));
+ self.app.dispatchEvent(GFEvent('updateENTRY',entry));
def findValue(self, blockname, fieldname):
for block in self.blockList:
@@ -252,107 +195,50 @@
return value
return None
- def toggleInsertMode(self,event):
- self.insertMode = not self.insertMode
- self.updateInsertMode()
-
#
# Incomming Event handlers
#
- def nextRecord(self, event):
- for block in self.blockList:
- if hasattr(block,'master'):
- masterBlock,masterField = string.split(block.master,'.')
- if masterBlock == self.currentBlock.name:
- if not block.isSaved():
- message = GFMsgBox(self, GFOptions._msgDETAILNOTSAVED )
- message.show()
- return
-
- self.dispatchEvent(GFEvent('uiNEXTRECORD',self.currentEntry))
- self.currentBlock.nextRecord()
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateRecordCounter()
- self.updateRecordStatus()
- def prevRecord(self, event):
- for block in self.blockList:
- if hasattr(block,'master'):
- masterBlock,masterField = string.split(block.master,'.')
- if masterBlock == self.currentBlock.name:
- if not block.isSaved():
- message = GFMsgBox(self, GFOptions._msgNOTSAVED)
- message.show()
- return
- self.dispatchEvent(GFEvent('uiPREVRECORD',self.currentEntry))
- self.currentBlock.prevRecord()
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateRecordCounter()
- self.updateRecordStatus()
-
- def newRecord(self, event):
+ def newRecord(self):
if not hasattr(self,'readonly'):
self.currentBlock.newRecord()
- self.dispatchEvent(GFEvent('uiNEXTRECORD',self.currentEntry))
- self.currentBlock.nextRecord()
- self.dispatchEvent(GFEvent('uiPREVRECORD',self.currentEntry))
- self.currentBlock.prevRecord()
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateRecordCounter()
- self.updateRecordStatus()
- else:
- self.dispatchEvent(GFEvent('formALERT','Form is readonly'))
- def deleteRecord(self, event):
+ def deleteRecord(self):
if not hasattr(self,'readonly'):
self.currentBlock.deleteRecord()
- self.updateRecordStatus()
- else:
- self.dispatchEvent(GFEvent('formALERT','Form is readonly'))
- def executeExit(self, event):
+ def isSaved(self):
+ saved = 1
for block in self.blockList:
if not block.isSaved():
- #self.parent.dispatchEvent( GFEvent( 'msgBoxUI',
GFOptions._msgDETAILNOTSAVED) )
-
- message = GFMsgBox(self, GFOptions._msgNOTSAVED)
- message.show()
- return
-
- # If above loop didn't cause function to return then exit
- self.dispatchEvent(GFEvent('exitApplication','Current data is saved'))
-
- def requestQuery(self, event):
- if hasattr(self.currentBlock,"master"):
- self.parent.dispatchEvent( GFEvent( 'msgBoxUI', "Query from detail
blocks currently not supported"))
- return
+ saved = 0
+ break
+ return saved
+
+
+ def prepQuery(self):
+ message = None
for block in self.blockList:
if not block.isSaved():
- message = GFMsgBox(self, GFOptions._msgNOTSAVED)
- message.show()
- return
+ message = GFOptions._msgNOTSAVED
for block in self.blockList:
block.processRollback()
self.currentBlock.initQuery()
- self.dispatchEvent(GFEvent('uiNEXTRECORD',self.currentEntry))
- self.currentBlock.nextRecord()
- self.dispatchEvent(GFEvent('uiPREVRECORD',self.currentEntry))
- self.currentBlock.prevRecord()
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateStatus()
+ return message
+
- def executeQuery(self, event):
+ def executeQuery(self):
+ message = None
try:
self.currentBlock.processQuery()
- self.updateStatus()
except DBError:
for key in self.databaseDictionary.keys():
self.databaseDictionary[key].rollback()
- message = GFMsgBox(self,"Database query error:\n%s\n%s " %
(sys.exc_info()[0], sys.exc_info()[1]))
- message.show()
+ message = "Database query error:\n%s\n%s " % (sys.exc_info()[0],
sys.exc_info()[1])
- def executeCommit(self, event):
+ def commit(self):
+ message = None
for key in self.databaseDictionary.keys():
self.databaseDictionary[key].beginTransaction()
@@ -362,26 +248,28 @@
GFDebug.printMesg(1, "Saving %s"%block.name)
block.processCommit()
- self.dispatchEvent(GFEvent('uiNEXTRECORD',self.currentEntry))
- self.currentBlock.nextRecord()
- self.dispatchEvent(GFEvent('uiPREVRECORD',self.currentEntry))
- self.currentBlock.prevRecord()
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateRecordStatus()
- self.updateRecordCounter()
+# self.dispatchEvent(GFEvent('uiNEXTRECORD',self.currentEntry))
+# self.currentBlock.nextRecord()
+# self.dispatchEvent(GFEvent('uiPREVRECORD',self.currentEntry))
+# self.currentBlock.prevRecord()
+# self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
+# self.updateRecordStatus()
+# self.updateRecordCounter()
else:
- self.dispatchEvent(GFEvent('formALERT','Form is readonly'))
-
+ message = 'Form is readonly'
+ return message
+
for key in self.databaseDictionary.keys():
self.databaseDictionary[key].commit()
except DBError:
for key in self.databaseDictionary.keys():
self.databaseDictionary[key].rollback()
- message = GFMsgBox(self,"Database commit error:\n%s\n%s " %
(sys.exc_info()[0], sys.exc_info()[1]))
- message.show()
+ message = "Database commit error:\n%s\n%s " % (sys.exc_info()[0],
sys.exc_info()[1])
except:
- print "Argh: \n%s\n%s " % (sys.exc_info()[0], sys.exc_info()[1])
+ print "GFForm Argh: \n%s\n%s " % (sys.exc_info()[0], sys.exc_info()[1])
+
+ return message
def executeAbout(self,event):
version = GFOptions.VERSION
@@ -392,17 +280,17 @@
self.dispatchEvent(GFEvent('uiABOUT',[version,name,formversion,author,description]))
- def executeRollback(self,event):
+ def rollback(self):
for block in self.blockList:
block.processRollback();
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.dispatchEvent(GFEvent('uiNEXTRECORD',self.currentEntry))
+# self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
+# self.dispatchEvent(GFEvent('uiNEXTRECORD',self.currentEntry))
self.currentBlock.nextRecord()
- self.dispatchEvent(GFEvent('uiPREVRECORD',self.currentEntry))
+# self.dispatchEvent(GFEvent('uiPREVRECORD',self.currentEntry))
self.currentBlock.prevRecord()
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateRecordStatus()
- self.updateRecordCounter()
+# self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
+# self.updateRecordStatus()
+# self.updateRecordCounter()
#
# updateDetailBlocks
@@ -422,13 +310,154 @@
print "Trigger Exception Message = ", t.msg
+
+ #
+ # changeFocus
+ #
+ # changes to the requested entry object requested by
+ # an event sourse
+ #
+ def changeFocus(self, widget):
+ try:
+ self.currentEntry.processTrigger('Pre-FocusOut')
+ self.currentEntry.processTrigger('Post-FocusOut')
+ widget.processTrigger('Pre-FocusIn')
+ self.currentEntry = widget
+ self.currentBlock = self.currentEntry.block
+ widget.processTrigger('Post-FocusIn')
+ except TriggerError, t:
+ print "Got to the exception handler!"
+ self.TriggerErrorFunc(t)
+
+
+ #
+ # 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 position == 'end':
+ self.currentEntry.cursorPosition = len(self.currentEntry.value)
+ elif position == 'home':
+ self.currentEntry.cursorPosition = 0
+ elif position == 'left':
+ self.currentEntry.cursorPosition = self.currentEntry.cursorPosition - 1
+ elif position == 'right':
+ if self.currentEntry.cursorPosition < len(self.currentEntry.value):
+ self.currentEntry.cursorPosition= self.currentEntry.cursorPosition + 1
+
+ def replaceValue(self,object, value):
+ replacement = ""
+ validValues = object.allowedValues()
+ for key in validValues.keys():
+ if validValues[key] == value:
+ replacement = key
+ break
+ GFDebug.printMesg(2,"(%s, %s)"%(object,value))
+ GFDebug.printMesg(2,"Replacing with %s"% replacement)
+ object.setValue(replacement)
+
+ # 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: 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.setValue(value)
+ modified = 1
+ return modified
+
+ if hasattr(self.currentEntry,'lowercase'):
+ value = string.lower(value)
+ if hasattr(self.currentEntry,'uppercase'):
+ value = string.upper(value)
+ if hasattr(self.currentEntry,'max_length'):
+ if len(currentvalue) >= int(self.currentEntry.max_length):
+ return modified
+
+ if hasattr(self.currentEntry,'numeric') and self.currentBlock.mode ==
'normal':
+ if not (value in string.digits or value in '.'):
+ return modified
+
+ if self.insertMode == 1:
+ currentvalue = currentvalue[:self.currentEntry.cursorPosition] +
value + \
+ currentvalue[self.currentEntry.cursorPosition:]
+ else:
+ currentvalue = currentvalue[:self.currentEntry.cursorPosition] +
value + \
+ currentvalue[self.currentEntry.cursorPosition+1:]
+
+ self.currentEntry.cursorPosition = self.currentEntry.cursorPosition + 1
+ self.currentEntry.setValue(currentvalue)
+ # Hack alert
+ self.updateDetailBlocks(self.currentBlock)
+ # end hack alert
+
+ 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):
+ modified = 0
+ if action == 'backspace':
+ if self.currentEntry.cursorPosition > 0:
+ self.currentEntry.cursorPosition = self.currentEntry.cursorPosition
- 1
+ modified = 1
+ else:
+ return modified
+
+ currentvalue = self.currentEntry.getValue()
+ currentvalue = currentvalue[:self.currentEntry.cursorPosition] + \
+ currentvalue[self.currentEntry.cursorPosition+1:]
+ self.currentEntry.setValue(currentvalue)
+ modified = 1
+ # hack alert
+ self.updateDetailBlocks(self.currentBlock)
+ # end hack alert
+ return modified
+
+
+ #
+ # fireTrigger
+ #
+ def fireTrigger(self, triggerName):
+ self.triggerDictionary[triggerName](self)
+
+#
+# Updated methods for the new gfclient code
+#
+
#
# nextEntry
#
# Called whenever an event source has requested that the
# focus change to the next data entry object
#
- def nextEntry(self, event):
+ def nextEntry(self):
nextEntry = None
keepNext = 0
if not self.currentEntry.verifyValue(): return
@@ -451,9 +480,6 @@
self.currentEntry.processTrigger('Post-FocusOut')
nextEntry.processTrigger('Post-FocusIn')
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateRecordStatus()
- self.updateTip()
except TriggerError, t:
print "Got to the exception handler!"
self.TriggerErrorFunc(t)
@@ -465,7 +491,7 @@
# Called whenever an event source has requested that the
# focus change to the next data entry object
#
- def previousEntry(self, event):
+ def previousEntry(self):
# find last entry widget
nextEntry = None
if not self.currentEntry.verifyValue(): return
@@ -492,44 +518,14 @@
print "Got to the exception handler!"
self.TriggerErrorFunc(t)
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateRecordStatus()
- self.updateTip()
#
- # changeFocus
- #
- # changes to the requested entry object requested by
- # an event sourse
- #
- def changeFocus(self, event):
- if event.data.getObjectType()=='GFEntry' and (hasattr(event.data,'hidden')
or
-
(hasattr(event.data,'readonly') and self.currentBlock.mode!='query')):
- return
- try:
- self.currentEntry.processTrigger('Pre-FocusOut')
- self.currentEntry.processTrigger('Post-FocusOut')
- event.data.processTrigger('Pre-FocusIn')
-
- self.currentEntry = event.data
- self.currentBlock = self.currentEntry.block
-
- event.data.processTrigger('Post-FocusIn')
- except TriggerError, t:
- print "Got to the exception handler!"
- self.TriggerErrorFunc(t)
-
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateRecordStatus()
- self.updateTip()
-
- #
# nextBlock
#
# Called whenever an event source has requested that the
# focus change to the next data entry block
#
- def nextBlock(self, event):
+ def nextBlock(self):
nextBlock = self.blockList[0]
keepNext = 0
for object in self.blockList:
@@ -560,18 +556,13 @@
pageWidget = pageWidget.parent
self.currentPage = pageWidget
- self.dispatchEvent(GFEvent('gotoPAGE',self.currentPage));
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
-
- self.updateStatus()
-
#
# previousBlock
#
# Called whenever an event source has requested that the
# focus change to the next data entry block
#
- def previousBlock(self, event):
+ def previousBlock(self):
nextBlock = self.blockList[-1]
for object in self.blockList:
if object == self.currentBlock:
@@ -598,131 +589,32 @@
pageWidget = pageWidget.parent
self.currentPage = pageWidget
- self.dispatchEvent(GFEvent('gotoPAGE',self.currentPage));
- self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
- self.updateStatus()
-
- #
- # 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.currentEntry.cursorPosition = len(self.currentEntry.value)
- elif eventType == 'requestCURSORHOME':
- self.currentEntry.cursorPosition = 0
- elif eventType == 'requestCURSORLEFT' and self.currentEntry.cursorPosition
> 0:
- self.currentEntry.cursorPosition = self.currentEntry.cursorPosition - 1
- elif eventType == 'requestCURSORRIGHT':
- if self.currentEntry.cursorPosition < len(self.currentEntry.value):
- self.currentEntry.cursorPosition= self.currentEntry.cursorPosition + 1
-
- self.dispatchEvent(GFEvent('updateENTRY',self.currentEntry));
-
-
- def replaceValue(self,event):
- replacement = ""
- object = event.data[0]
- validValues = object.allowedValues()
- for key in validValues.keys():
- if validValues[key] == event.data[1]:
- replacement = key
- break
- GFDebug.printMesg(2,"(%s, %s)"%(event.data[0], event.data[1]))
- GFDebug.printMesg(2,"Replacing with %s"% replacement)
- event.data[0].setValue(replacement)
- # 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, event):
- GFDebug.printMesg(10, "Keypress event %s"%event.data)
- if (self.currentEntry != None):
- if not hasattr(self.currentEntry,'readonly') or
self.currentBlock.mode=='query':
- currentvalue = self.currentEntry.getValue()
-
- if ord(event.data) == 13:
- if self.currentEntry.height > 1: event.data = '\n';
- else: return
-
- if hasattr(self.currentEntry,'foreign_key_description') and
hasattr(self.currentEntry,'style') and (self.currentEntry.style=='dropdown'):
- value= self.currentEntry.findClosestValue(event.data)
- if not value: return
- self.currentEntry.setValue(value)
- self.dispatchEvent(GFEvent('updateENTRY',self.currentEntry));
- return
-
- if hasattr(self.currentEntry,'lowercase'):
- event.data = string.lower(event.data)
- if hasattr(self.currentEntry,'uppercase'):
- event.data = string.upper(event.data)
- if hasattr(self.currentEntry,'max_length'):
- if len(currentvalue) >= int(self.currentEntry.max_length):
- return
-
- if hasattr(self.currentEntry,'numeric') and self.currentBlock.mode ==
'normal':
- if not (event.data in string.digits or event.data in '.'):
- return
-
- if self.insertMode == 1:
- currentvalue = currentvalue[:self.currentEntry.cursorPosition] +
event.data + \
- currentvalue[self.currentEntry.cursorPosition:]
- else:
- currentvalue = currentvalue[:self.currentEntry.cursorPosition] +
event.data + \
- currentvalue[self.currentEntry.cursorPosition+1:]
-
- self.currentEntry.cursorPosition = self.currentEntry.cursorPosition + 1
- self.currentEntry.setValue(currentvalue)
- # Hack alert
- self.updateDetailBlocks(self.currentBlock)
- # end hack alert
- self.updateRecordStatus()
- else:
- self.dispatchEvent(GFEvent('formALERT','Field is readonly'))
-
- #
- # removeCharacter
- #
- # Called whenever an event source has requested that a
- # charater be removed from the current entry object
- #
- def removeCharacter(self, event):
- if not hasattr(self.currentEntry,'readonly') or
self.currentBlock.mode=='query':
- if event.getEvent() == 'requestBACKSPACE':
- if self.currentEntry.cursorPosition > 0:
- self.currentEntry.cursorPosition = self.currentEntry.cursorPosition
- 1
- else:
- return
-
- currentvalue = self.currentEntry.getValue()
- currentvalue = currentvalue[:self.currentEntry.cursorPosition] + \
- currentvalue[self.currentEntry.cursorPosition+1:]
- self.currentEntry.setValue(currentvalue)
- # hack alert
- self.updateDetailBlocks(self.currentBlock)
- # end hack alert
- self.updateRecordStatus()
- else:
- self.dispatchEvent(GFEvent('formALERT','Field is readonly'))
-
+ def prevRecord(self):
+ for block in self.blockList:
+ if hasattr(block,'master'):
+ masterBlock,masterField = string.split(block.master,'.')
+ if masterBlock == self.currentBlock.name:
+ if not block.isSaved():
+ message = GFMsgBox(self, GFOptions._msgNOTSAVED)
+ message.show()
+ return
+ self.currentBlock.prevRecord()
- #
- # fireTrigger
- #
- def fireTrigger(self, event):
- self.triggerDictionary[event.data](self)
+ def nextRecord(self):
+ for block in self.blockList:
+ if hasattr(block,'master'):
+ masterBlock,masterField = string.split(block.master,'.')
+ if masterBlock == self.currentBlock.name:
+ if not block.isSaved():
+ message = GFMsgBox(self, GFOptions._msgDETAILNOTSAVED )
+ message.show()
+ return
+ self.currentBlock.nextRecord()
+ def toggleInsertMode(self):
+ self.insertMode = not self.insertMode
Index: gnue/gnuef/src/GFObjects.py
diff -u gnue/gnuef/src/GFObjects.py:1.69 gnue/gnuef/src/GFObjects.py:1.70
--- gnue/gnuef/src/GFObjects.py:1.69 Tue Mar 13 16:18:34 2001
+++ gnue/gnuef/src/GFObjects.py Sat Mar 17 06:11:25 2001
@@ -36,6 +36,8 @@
if parent :
parent.addChild(self)
+ self.visibleIndex = 0
+
#
# initialize
#
@@ -47,7 +49,6 @@
for child in self.children:
child.inititialize(function)
-
def getObjectType(self):
return self.type
@@ -58,7 +59,6 @@
#
def addChild(self, child):
self.children.append(child)
-
def walk(self, function):
function(self)
@@ -79,6 +79,44 @@
return parentObject
+ #
+ # recalculateVisible
+ #
+ def recalculateVisible(self, adjustment, currentRecord, recordCount):
+ if not hasattr(self, 'hidden'):
+ index = self.visibleIndex + adjustment
+
+ if index < 0 : index = 0
+
+ # Don't let index pass the number of widgets on screen
+ if index >= int(self.visibleCount):
+ index = int(self.visibleCount)-1
+
+ # Don't let the index past the number of records in the
+ # system
+ lowestVisible = currentRecord - index
+ if lowestVisible < 0 : lowestVisible = 0
+ if lowestVisible + index > recordCount:
+ index = index -1
+
+ # If the current record has rolled around
+ # from the top to the bottom then reset
+ # the counter
+ if currentRecord == 0:
+ index = 0
+
+ # if the current record has rolled from
+ # bottom to top then flip to bottom keeping
+ # in mind the number of records in memory
+ if currentRecord == recordCount:
+ if recordCount > int(self.visibleCount)-1:
+ index = int(self.visibleCount)-1
+ else:
+ index = recordCount
+
+ self.visibleIndex = index
+ self.lowestVisible = lowestVisible
+
#
# GFValue
#
@@ -221,14 +259,16 @@
self.dataSourceLink.setField(self.recordCount,self.detail,fieldValue,TRUE)
self.currentRecord = self.recordCount
- self.switchRecord(self.currentRecord)
+ adjustment = self.recordCount - self.currentRecord
+ self.switchRecord(adjustment)
#
# Moves the proper record into editing position
#
- def switchRecord(self, newRecord):
+ def switchRecord(self, adjustment):
for entry in self.entryList:
entry.switchRecord(self.currentRecord)
+ entry.recalculateVisible( adjustment, self.currentRecord,
self.recordCount)
self.form.updateUIEntry(entry)
self.form.updateDetailBlocks(self)
@@ -236,12 +276,13 @@
def nextRecord(self):
self.currentRecord = self.currentRecord + 1
if self.currentRecord > self.recordCount : self.currentRecord = 0
- self.switchRecord(self.currentRecord)
+ self.switchRecord(1)
def prevRecord(self):
self.currentRecord = self.currentRecord - 1
if self.currentRecord < 0 : self.currentRecord = self.recordCount
- self.switchRecord(self.currentRecord)
+ self.switchRecord(-1)
+
#
# processCommit
Index: gnue/gnuef/src/GFOptions.py
diff -u gnue/gnuef/src/GFOptions.py:1.23 gnue/gnuef/src/GFOptions.py:1.24
--- gnue/gnuef/src/GFOptions.py:1.23 Mon Mar 5 19:15:42 2001
+++ gnue/gnuef/src/GFOptions.py Sat Mar 17 06:11:25 2001
@@ -66,4 +66,4 @@
textPercentage = 100
# Version
-VERSION = "0.0.6"
+VERSION = "pre-0.0.7"
Index: gnue/gnuef/src/UIbase.py
diff -u gnue/gnuef/src/UIbase.py:1.24 gnue/gnuef/src/UIbase.py:1.25
--- gnue/gnuef/src/UIbase.py:1.24 Tue Mar 13 16:18:34 2001
+++ gnue/gnuef/src/UIbase.py Sat Mar 17 06:11:25 2001
@@ -13,7 +13,6 @@
#
from GFForm import *
from GFEvent import *
-from GFController import *
#
# GFUserInterfaceBase
@@ -24,6 +23,7 @@
class GFUserInterfaceBase(GFEventAware):
def __init__(self):
GFEventAware.__init__(self)
+
#
# incommintEvents
#
@@ -197,8 +197,12 @@
# Moves the focus to a specific UI widget
#
def switchFocus(self, event):
- index = self.formToUI[event.data][1]
- self.formToUIWidget[event.data].indexedFocus(index)
+ formObject = event.data['object']
+ #index = self.formToUI[formObject][1]
+ if formObject: # Some pages might not have any widgets that can be active
+ index = formObject.visibleIndex
+ self.formToUIWidget[formObject].indexedFocus(index)
+
#
# aboutBox
@@ -238,65 +242,64 @@
# this will adjust the entries to ensure the proper one is visible
#
def adjustMultiView(self, event):
-# print "adjustMultiView"
- block = event.data.block.form.currentBlock
+ print "Whoops"
+ pass
+
+## adjustment = event.data['adjustment']
+## currentRecord = event.data['currentRecord']
+## recordCount = event.data['recordCount']
+## entryList = event.data['entryList']
- if event.getEvent() == 'uiPREVRECORD':
- adjustment = -1
- else:
- adjustment = 1
+## # Need to figure out what the currentRecord is
+## # about to switch to. It hasn't yet.
+## currentRecord = currentRecord + adjustment
+
+## if currentRecord < 0 : currentRecord = recordCount
+## if currentRecord > recordCount : currentRecord = 0
- # Need to figure out what the currentRecord is
- # about to switch to. It hasn't yet.
- currentRecord = block.currentRecord + adjustment
- if currentRecord < 0 : currentRecord = block.recordCount
- if currentRecord > block.recordCount : currentRecord = 0
-
- for entry in block.entryList:
- if not hasattr(entry, 'hidden'):
- index = self.formToUI[entry][1]
- index = index + adjustment
+## for entry in entryList:
+## if not hasattr(entry, 'hidden'):
+## index = self.formToUI[entry][1]
+## index = index + adjustment
- if index < 0 : index = 0
+## if index < 0 : index = 0
- # Don't let index pass the number of widgets on screen
- if index >= int(entry.visibleCount):
- index = int(entry.visibleCount)-1
+## # Don't let index pass the number of widgets on screen
+## if index >= int(entry.visibleCount):
+## index = int(entry.visibleCount)-1
- # Don't let the index past the number of records in the
- # system
- lowestVisible = currentRecord - index
- if lowestVisible < 0 : lowestVisible = 0
- if lowestVisible + index > block.recordCount:
- index = index -1
-
- # If the current record has rolled around
- # from the top to the bottom then reset
- # the counter
- if currentRecord == 0:
- index = 0
+## # Don't let the index past the number of records in the
+## # system
+## lowestVisible = currentRecord - index
+## if lowestVisible < 0 : lowestVisible = 0
+## if lowestVisible + index > recordCount:
+## index = index -1
+
+## # If the current record has rolled around
+## # from the top to the bottom then reset
+## # the counter
+## if currentRecord == 0:
+## index = 0
- # if the current record has rolled from
- # bottom to top then flip to bottom keeping
- # in mind the number of records in memory
- if currentRecord == block.recordCount:
- if block.recordCount > int(entry.visibleCount)-1:
- index = int(entry.visibleCount)-1
- else:
- index = block.recordCount
+## # if the current record has rolled from
+## # bottom to top then flip to bottom keeping
+## # in mind the number of records in memory
+## if currentRecord == recordCount:
+## if recordCount > int(entry.visibleCount)-1:
+## index = int(entry.visibleCount)-1
+## else:
+## index = recordCount
- self.formToUI[entry][1] = index
+## self.formToUI[entry][1] = index
#
# updateEntry
#
def updateEntry(self,event):
- #print "updateEntry on %s" % self.formToUI[event.data]
- index = self.formToUI[event.data][1]
+ index = event.data.visibleIndex
block = event.data.block
currentRecord = block.currentRecord
-# print "Index %s CR %s block %s" %( index, currentRecord, block.name)
if hasattr(event.data, 'style'):
style = event.data.style
@@ -305,7 +308,6 @@
# Fill the prior spots
for count in range(index):
-# print "Prior ",count
value =
block.dataSourceLink.getField(currentRecord-(index-count),event.data.field)
if style == 'dropdown':
value = event.data.allowedValues()[value]
Index: gnue/gnuef/src/UIwxpython.py
diff -u gnue/gnuef/src/UIwxpython.py:1.74 gnue/gnuef/src/UIwxpython.py:1.75
--- gnue/gnuef/src/UIwxpython.py:1.74 Sun Feb 25 17:50:55 2001
+++ gnue/gnuef/src/UIwxpython.py Sat Mar 17 06:11:25 2001
@@ -86,7 +86,7 @@
# In future need to implement callback in platform
# independent way.
self.splash = SplashScreen(None,bitmapfile=GFOptions.splashScreenPNG,
- duration=2000, # callback=self.onMain,
+ duration=5000, # callback=self.onMain,
style=wxSIMPLE_BORDER|wxCENTRE_ON_SCREEN )
swidth,sheight = self.splash.GetSizeTuple()
@@ -382,26 +382,20 @@
eo = event.GetEventObject()
object = wxPyTypeCast(eo, 'wxWindow')
+ # Move to proper object
for key in self.formToUI.keys():
for count in range(len(self.formToUI[key][0])):
if self.formToUI[key][0][count].GetId() == object.GetId():
- # Move to proper row
- if count < self.formToUI[key][1]:
- event = GFEvent('requestNEXTRECORD')
- else:
- event = GFEvent('requestPREVRECORD')
- oldIndex = self.formToUI[key][1]
- while (self.formToUI[key][1] != count):
- self.dispatchEvent(event)
- if oldIndex == self.formToUI[key][1]:
- break # They've clicked on a widget that
- # is beyond the currently loaded
- # record count
-
- # Move to proper object
- if key.getObjectType() == 'GFEntry':
- action = GFEvent('requestFOCUS',key)
+ self.dispatchEvent(GFEvent('requestFOCUS',key))
+ self.dispatchEvent(GFEvent('requestJUMPRECORD',count -
key.visibleIndex))
+ break
+ for key in self.formToUI.keys():
+ for count in range(len(self.formToUI[key][0])):
+ if self.formToUI[key][0][count].GetId() == object.GetId():
+ self.dispatchEvent(GFEvent('requestJUMPRECORD',count -
key.visibleIndex))
+ break
+
#
# Combo box events
#
@@ -417,22 +411,19 @@
eo = event.GetEventObject()
object = wxPyTypeCast(eo, 'wxWindow')
+ # Move to proper object
+ for key in self.formToUI.keys():
+ for count in range(len(self.formToUI[key][0])):
+ if self.formToUI[key][0][count].GetId() == object.GetId():
+ self.dispatchEvent(GFEvent('requestFOCUS',key))
+ self.dispatchEvent(GFEvent('requestJUMPRECORD',count -
key.visibleIndex))
+ break
+
for key in self.formToUI.keys():
for count in range(len(self.formToUI[key][0])):
- GFDebug.printMesg(3, "uiItem %s we want
%s"%(self.formToUI[key][0][count].GetId(), object.GetId()))
if self.formToUI[key][0][count].GetId() == object.GetId():
- # Move to proper row
- if count < self.formToUI[key][1]:
- eventAction = GFEvent('requestNEXTRECORD')
- else:
- eventAction = GFEvent('requestPREVRECORD')
- oldIndex = self.formToUI[key][1]
- while (self.formToUI[key][1] != count):
- self.dispatchEvent(eventAction)
- if oldIndex == self.formToUI[key][1]:
- break # They've clicked on a widget that
- # is beyond the currently loaded
- # record count
+ self.dispatchEvent(GFEvent('requestJUMPRECORD',count -
key.visibleIndex))
+ break
#
# slightly altered event to call immediate
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/gnuef client/gfclient src/GFController.py ...,
James Thompson <=