commit-gnue
[Top][All Lists]
Advanced

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

gnue/gnuef/src GFClient.py GFInstance.py


From: Jason Cater
Subject: gnue/gnuef/src GFClient.py GFInstance.py
Date: Thu, 31 May 2001 14:52:57 -0700

CVSROOT:        /home/cvs
Module name:    gnue
Changes by:     Jason Cater <address@hidden>    01/05/31 14:52:57

Modified files:
        gnuef/src      : GFClient.py 
Added files:
        gnuef/src      : GFInstance.py 

Log message:
        Moved controller logic out of GFClient and into new class GFInstance.  
This is in anticipation of mult-forms logic.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFInstance.py?cvsroot=OldCVS&rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFClient.py.diff?cvsroot=OldCVS&tr1=1.15&tr2=1.16&r1=text&r2=text

Patches:
Index: gnue/gnuef/src/GFClient.py
diff -u gnue/gnuef/src/GFClient.py:1.15 gnue/gnuef/src/GFClient.py:1.16
--- gnue/gnuef/src/GFClient.py:1.15     Wed May 30 10:45:36 2001
+++ gnue/gnuef/src/GFClient.py  Thu May 31 14:52:57 2001
@@ -34,7 +34,7 @@
 #
 # Copyright (c) 2000 Free Software Foundation
 #
-# $Id: GFClient.py,v 1.15 2001/05/30 17:45:36 jcater Exp $
+# $Id: GFClient.py,v 1.16 2001/05/31 21:52:57 jcater Exp $
 #
 
 import pstats
@@ -44,6 +44,7 @@
 import urllib
 import gnue.forms.GFOptions
 from gnue.forms.GFGetOpt import *
+from gnue.forms.GFInstance import *
 from gnue.forms.GFForm import *
 from gnue.forms.GFController import *
 from gnue.forms.GFParser import loadForm 
@@ -52,14 +53,16 @@
 from gnue.common.GClientApp import * 
 
 
-class GFClient(GClientApp, GFController):
+class GFClient(GClientApp):
 
 
   #
   # GClientApp() overrides
   #
   VERSION = GFOptions.VERSION
+  COMMAND = "gfclient"
   NAME = "GNUe Forms"
+  USAGE = "gfclient [options] file" 
   COMMAND_OPTIONS = [ 
       [ 'user_interface', 'u', 'user_interface', 1, 'gui', 'type',  
           'The currently supported values for <type> are ' \
@@ -70,388 +73,14 @@
   # 
   # Initialize the class
   #
-  def __init__(self):    
-    GClientApp.__init__(self)
+  def __init__(self, connections=None):    
+    GClientApp.__init__(self, connections)
 
-    self.ui_type = self.OPTIONS['user_interface']
-
-    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,
-
-                           'requestTOGGLECHKBOX'  : self.toggleCheckBox,       
                    
-                           }
-    
-    # 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):
-    message = self._form.nextEntry()
-    if message:
-      messageBox = GFMsgBox(self, message)
-      messageBox.show()
-      return
-    
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():
-      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 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 self._form.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 = self._form.getOption('title') or "Unknown"
-    formversion = self._form.getOption('version') or "Unknown"
-    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):
-  #
-  # 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()
+    self._formInstances = {}
+    self._lastSerialNumber = 0
 
-  #
-  # 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):
-    tip = ''
-    if self._form._currentEntry:
-      if self._form._currentEntry.getOption('tip'):
-        tip = self._form._currentEntry.getOption('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):
-    GDebug.printMesg(10, "Keypress event %s"%event.data)
-    if (self._form._currentEntry != None):
-      if not 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 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 source
-  #
-  def changeFocus(self, event):
-    if event.data.getObjectType()=='GFEntry' and (event.data.hidden or
-                                                  (event.data.readonly and 
self._form._currentBlock.mode!='query')):
-      return
-    newEntry = event.data
-    message = self._form.changeFocus(newEntry)
-    if message:
-      messageBox = GFMsgBox(self, message)
-      messageBox.show()
-      return
-    
self.dispatchEvent(GFEvent('gotoENTRY',{'object':self._form._currentEntry}))
-
-    self.updateRecordStatus()
-    self.updateTip()
-
-    
-  def requestQuery(self, event):
-    if hasattr(self._form._currentBlock,"master"):
-      messageBox = GFMsgBox(self, "Query from detail blocks currently not 
supported")
-      messageBox.show()
-      return
-    message = self._form.prepQuery()
-    if message:
-      messageBox = GFMsgBox(self,message)
-      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(self,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(self,message)
-      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
-  #
-  def fireTrigger(self, event):
-    self._form.fireTrigger(event.data)
-
+    self.ui_type = self.OPTIONS['user_interface']
 
-  def toggleCheckBox(self, event):
-    object = event.data[0]
-    value = event.data[1]
-    object.setValue(value)
-    
 
 #
 # old stuff still in use
@@ -462,11 +91,11 @@
   #
   # GClientApp().run() override
   #
-  def run(self):    
-            
+  def run(self): 
+
     # assign form file from 1st free argument
     try:
-      self._formfile = self.ARGUMENTS[0]
+      formfile = self.ARGUMENTS[0]
     except:
       self.handleStartupError ("No Forms Definition File Specified.")
 
@@ -476,87 +105,52 @@
     if self.ui_type == 'gui'  :
       if os.environ.has_key('DISPLAY') or os.name != 'posix':
         from gnue.forms import UIwxpython
-        ui=UIwxpython.GFUserInterface()
+        self._ui=UIwxpython.GFUserInterface
         
       else:
         self.ui_type='text'
 
     if self.ui_type == 'pytext':
       from gnue.forms import UIpyncurses
-      ui=UIpyncurses.GFUserInterface(self)
+      self._ui=UIpyncurses.GFUserInterface
 
     if self.ui_type == 'text' : 
       from gnue.forms import UIcurses
-      ui=UIcurses.GFUserInterface(self)
+      self._ui=UIcurses.GFUserInterface
 
-    #
-    # Register to receive events from the UI
-    #
-    ui.registerEventListener(self.processEvent)
-    self.registerEventListener(ui.processEvent)
 
-    self.setLoginHandler(ui.getLoginHandler())
+    self.runForm(formfile)
+
+
+  def runForm(self, formFile):    
     
-    #
-    # 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]):
-        fileHandle = open(self._formfile,'r')
-      else:
-        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()
+    instance = GFInstance(self, self.getNextSerialNumber(), 
+        connections=self.connections, ui=self._ui)
 
     #
     # Build the form tree
     #
-    self._form = loadForm (fileHandle, self) 
-    fileHandle.close()
+    drive = os.path.splitdrive(formFile) 
+    if len(drive[0]):
+      fileHandle = open(formFile,'r')
+    else:
+      fileHandle = urllib.urlopen(formFile)
 
-    control = GFController()
+    form = loadForm (fileHandle, instance) 
+    fileHandle.close()
 
     #
-    # extract DB info and init datasources
+    # Create and start the instance
     #
-    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 TypeError: 
-          # For some bizarre reason, the Oracle driver 
-          # returns a TypeError for an invalid login????
-          print "Invalid Login"
-        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()
-
-#    print self._form.dumpXML(1)
-
-    # pass control to UI
-    ui.buildForm(self._form)
-    ui.activateForm(self._form)
-    self.updateStatus()
-    ui.mainLoop()
+    self._formInstances[instance.getSerialNumber()] = instance 
+
+    instance.setForm(form)
+    instance.activate()
+
+
+  def getNextSerialNumber (self): 
+     self._lastSerialNumber = self._lastSerialNumber + 1
+     return self._lastSerialNumber
       
 if __name__ == '__main__':
   GFClient().run()



reply via email to

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