commit-gnue
[Top][All Lists]
Advanced

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

gnue/gnuef/src GFClient.py GFForm.py GFObjects....


From: James Thompson
Subject: gnue/gnuef/src GFClient.py GFForm.py GFObjects....
Date: Tue, 03 Oct 2000 18:19:54 -0700

CVSROOT:        /cvs
Module name:    gnue
Changes by:     James Thompson <address@hidden> 00/10/03 18:19:54

Modified files:
        gnuef/src      : GFClient.py GFForm.py GFObjects.py GFParser.py 
                         GFTrigger.py UIbase.py UIwxpython.py 
Added files:
        gnuef/src      : DSpostgresql.py 
Removed files:
        gnuef/src      : DPyGetOpt.py GFCursesPanel.py GFCursesView.py 

Log message:
        Added Chris Trigger Code
        Removed files no longer in use
        Start of data access in place

CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DSpostgresql.py.diff?r1=NONE&r2=1.1
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFClient.py.diff?r1=1.10&r2=1.11
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFForm.py.diff?r1=1.10&r2=1.11
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFObjects.py.diff?r1=1.6&r2=1.7
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFParser.py.diff?r1=1.2&r2=1.3
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFTrigger.py.diff?r1=1.1&r2=1.2
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/UIbase.py.diff?r1=1.2&r2=1.3
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/UIwxpython.py.diff?r1=1.5&r2=1.6
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DPyGetOpt.py.diff?r1=1.1&r2=NONE
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFCursesPanel.py.diff?r1=1.2&r2=NONE
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFCursesView.py.diff?r1=1.2&r2=NONE

Patches:
Index: gnue/gnuef/src/GFClient.py
diff -u gnue/gnuef/src/GFClient.py:1.10 gnue/gnuef/src/GFClient.py:1.11
--- gnue/gnuef/src/GFClient.py:1.10     Fri Sep 29 15:31:44 2000
+++ gnue/gnuef/src/GFClient.py  Tue Oct  3 18:19:53 2000
@@ -72,7 +72,6 @@
     #
     # build the form object
     #
-    #if os.path.exists(self.formfile):
     try:
       fp = urllib.urlopen(self.formfile)
     except:
@@ -80,7 +79,6 @@
       sys.exit()
     form = GFForm(fp)
     fp.close()
-
 
     # determine the UI to use
     if self.ui == 'PYNCURSES' :
Index: gnue/gnuef/src/GFForm.py
diff -u gnue/gnuef/src/GFForm.py:1.10 gnue/gnuef/src/GFForm.py:1.11
--- gnue/gnuef/src/GFForm.py:1.10       Thu Sep 28 21:05:47 2000
+++ gnue/gnuef/src/GFForm.py    Tue Oct  3 18:19:53 2000
@@ -12,8 +12,6 @@
 #
 
 import sys
-from xml.sax import saxexts
-from xml.sax  import saxlib
 from GFObjects import *
 from GFEvent import *
 from GFParser import *
@@ -44,7 +42,11 @@
                            'requestNEXTRECORD' : self.nextRecord,
                            'requestNEWRECORD'  : self.newRecord,
 
-                           'recordSWITCHED' : self.recordSwitched
+                           'recordSWITCHED'    :self.recordSwitched,
+
+#                           'requestLOGIN'      :self.requestLogin,
+                           'uiINITIALIZED'     :self.uiInitialized
+
                            }
 
     # Insert/Overwrite mode
@@ -57,9 +59,6 @@
 
     self.blockList = []
 
-##    self.currentRecord = 0
-##    self.recordCount = 0
-
     # Create a parser
     parser = saxexts.make_parser()
     
@@ -78,12 +77,9 @@
     self.walk(self.setInitialFocus)
 
     # build the block list
-    # self.walk(self.buildBlockList)
     self.walk(self.initBlocks)
     self.walk(self.initEntries)
     
-    #self.walk(self.printObject)
-
   #
   # begin routines made for walking
   #
@@ -99,10 +95,6 @@
     if object.getObjectType() == 'GFEntry' and self.currentEntry == None:
       self.currentEntry = object
 
-  def buildBlockList(self,object):
-    if object.getObjectType() == 'GFBlock':
-      self.blockList.append(object)
-
   def initBlocks(self, object):
     if object.getObjectType() == 'GFBlock':
       self.blockList.append(object)
@@ -259,11 +251,11 @@
         nextBlock = object
         break
 
-#    self.currentBlock.processTrigger('Pre-FocusOut')
-#    self.currentBlock.processTrigger('Post-FocusOut')
-#    nextBlock.processTrigger('Pre-FocusIn')
+    self.currentBlock.processTrigger('Pre-FocusOut')
+    self.currentBlock.processTrigger('Post-FocusOut')
+    nextBlock.processTrigger('Pre-FocusIn')
     self.currentBlock = nextBlock
-#    nextBlock.processTrigger('Post-FocusIn')
+    nextBlock.processTrigger('Post-FocusIn')
 
 
     # reset current entry 
@@ -280,13 +272,6 @@
     self.dispatchEvent(GFEvent('gotoPAGE',self.currentPage));
     self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
 
-
-#    print "New Page", self.currentPage
-#    print "New Block", self.currentBlock
-#    print "New Entry",self.currentEntry
-
-
-
   #
   # previousBlock
   #
@@ -294,12 +279,6 @@
   # focus change to the next data entry block
   #
   def previousBlock(self, event):
-
-#    print "Current Page", self.currentPage
-#    print "Current Block", self.currentBlock
-#    print "Current Entry", self.currentEntry
-
-    
     nextBlock = self.blockList[-1]
     for object in self.blockList:
       if object == self.currentBlock:
@@ -307,11 +286,11 @@
       
       nextBlock = object
 
-#    self.currentBlock.processTrigger('Pre-FocusOut')
-#    self.currentBlock.processTrigger('Post-FocusOut')
-#    nextBlock.processTrigger('Pre-FocusIn')
+    self.currentBlock.processTrigger('Pre-FocusOut')
+    self.currentBlock.processTrigger('Post-FocusOut')
+    nextBlock.processTrigger('Pre-FocusIn')
     self.currentBlock = nextBlock
-#    nextBlock.processTrigger('Post-FocusIn')
+    nextBlock.processTrigger('Post-FocusIn')
 
 
     # reset current entry 
@@ -328,14 +307,6 @@
     self.dispatchEvent(GFEvent('gotoPAGE',self.currentPage));
     self.dispatchEvent(GFEvent('gotoENTRY',self.currentEntry));
 
-
-#    print "New Page", self.currentPage
-#    print "New Block", self.currentBlock
-#    print "New Entry",self.currentEntry
-
-
-
-
   #
   # cursorMove
   #
@@ -409,8 +380,21 @@
     self.dispatchEvent(GFEvent('updateENTRY',event.data))
 
 
+  #
+  # requireLogin
+  #
+  # Tells the UI to prompt for username/password and
+  # blocks until it gets them
+  #
+  def uiInitialized(self,event):
 
+    self.loginInProgress = 1
+    
+    self.dispatchEvent(GFEvent('requireLogin',self))
 
+    while self.loginInProgress:
+      print "We're up dude!"
+      pass
 
 
 
Index: gnue/gnuef/src/GFObjects.py
diff -u gnue/gnuef/src/GFObjects.py:1.6 gnue/gnuef/src/GFObjects.py:1.7
--- gnue/gnuef/src/GFObjects.py:1.6     Thu Sep 28 21:05:47 2000
+++ gnue/gnuef/src/GFObjects.py Tue Oct  3 18:19:53 2000
@@ -15,6 +15,8 @@
 from GFTrigger import *
 from GFEvent import *
 
+DEBUG = 0
+
 #
 # Class GFObj
 #
@@ -76,15 +78,18 @@
   def __init__(self, parent=None, value=None):
     self.value = value
     self.type = "GFValue"
-    print "Value = ", self.value
+    if DEBUG:
+      print "Value = ", self.value
     GFObj.__init__(self, parent)
     
   def setValue(self, value):
-    print "Value = ", self.value
+    if DEBUG:
+      print "Value = ", self.value
     self.value = value
 
   def getValue(self):
-    print "Value = ", self.value
+    if DEBUG:
+      print "Value = ", self.value
     return self.value
 
 #
@@ -136,9 +141,29 @@
   def setValue(self, value):
     if not self.value:
       GFValue.setValue(self,value)
-
 
 #
+#GFDataSource
+#
+class GFDataSource(GFObj):
+  def __init__(self, parent=None):
+    GFObj.__init__(self, parent)
+    self.type = "GFDataSource"
+#
+#GFDatabase
+#
+class GFDataSet(GFObj):
+  def __init__(self, parent=None):
+    GFObj.__init__(self, parent)
+    self.type = "GFDataSet"
+#
+#GFDataSource
+#
+class GFDatabase(GFObj):
+  def __init__(self, parent=None):
+    GFObj.__init__(self, parent)
+    self.type = "GFDatabase"
+#
 # 
 # More complex objects below
 #
@@ -213,7 +238,8 @@
   # recordSwitched
   #
   def recordSwitched(self, event):
-    print event.data, " just switched records"
+    if DEBUG:
+      print event.data, " just switched records"
     self.dispatchEvent(GFEvent('recordSWITCHED',event.data))
 
   #
@@ -276,7 +302,8 @@
   # Moves the proper record into editing position
   # 
   def switchRecord(self, event):
-    print "Switching to record ",event.data
+    if DEBUG:
+      print "Switching to record ",event.data
     self.value = self.valueArray[event.data]
     self.dispatchEvent(GFEvent('recordSWITCHED',self));
 
Index: gnue/gnuef/src/GFParser.py
diff -u gnue/gnuef/src/GFParser.py:1.2 gnue/gnuef/src/GFParser.py:1.3
--- gnue/gnuef/src/GFParser.py:1.2      Thu Sep 28 23:05:48 2000
+++ gnue/gnuef/src/GFParser.py  Tue Oct  3 18:19:53 2000
@@ -9,6 +9,7 @@
 # HISTORY:
 # 20-Sep-2000 File cut from GFForm.py and modified by Chris Spence
 # 21-Sep-2000 Started work on new object model which is easier to expand
+# 30-Sep-2000 Added support for two elements <trigger> and <inittrigger>
 #
 # Copyright (c) 2000 James Thompson
 #
@@ -19,7 +20,7 @@
 import string
 import sys
 
-DEBUG = 1
+DEBUG = 0
 
 #
 #Remove redundant whitespace from a string ( from xml-howto )
@@ -28,6 +29,17 @@
   return string.join( string.split(text), ' ')
 
 #
+# Dictionary to keep track of the namespace for python triggers. For the
+# time being it is instantiated with module scope, but will need to
+# be an attribute of the form class eventually. The static key is intended
+# for form scope variables and the parser key is intended to give options
+# to the parser. Other keys are the block names in the XML file.
+#
+
+triggerns = { 'static': {},
+              'parser': {'version': '0.0'}}
+
+#
 #Abstract class representing XML element
 #Methods:
 #    __init__ called when a start tag of this element is encountered.
@@ -117,6 +129,46 @@
     return {self.name: contents}
 
 #
+# Class representing a <trigger> element. In this implentation, I've 
+# built the trigger inside the parser. In future this could be broken
+# into a series of subclasses dealing with different trigger languages
+#
+class XMLTrigger(XMLElement):
+  def __init__(self, name, attrs, wparent):
+    XMLElement.__init__(self, name, attrs, wparent)
+    try: self.type = attrs['type']
+    except KeyError:
+      print "No Type specified for trigger in %s" % wparent.name
+      sys.exit()
+    try:
+      self.language = attrs['language']
+    except KeyError:
+      self.language = 'python'
+
+  def __del__(self):
+    XMLElement.__del__(self)
+    if self.language != 'python':
+      print "Language %s not implemented" % self.language
+      sys.exit()
+    # First compile the trigger:
+    #   Compilation at this stage has the useful side effect that
+    #   syntax errors are spotted during XML parsing rather than
+    #   during execution.
+    try:
+      code = compile(self.contents, '<string>', 'exec')
+    except SyntaxError, err:
+      print "Syntax error in line %d of trigger in element ??" \
+            % ( err.lineno )
+      sys.exit()
+    localns = {}         # Set the namespace used for the
+    globalns = triggerns # trigger.
+    # Now add to the widget
+    def thisTrigger(myself, code = code,
+                    localns = localns, globalns = globalns):
+      globalns['self'] = myself
+      exec( code, globalns, localns )
+    self.widgetParent.addTrigger(self.type, thisTrigger)
+#
 # Class representing a widget. Note: Later it will be neccesary to seperate
 # this into subclasses for container widgets and controls in order to
 # allow widget packing etc.
@@ -125,7 +177,12 @@
   widgets = { 'page'  : GFPage,
               'block' : GFBlock,
               'label' : GFLabel,
-              'entry' : GFEntry}
+              'entry' : GFEntry,
+#              'trigger':    GFTrigger,
+              'datasource': GFDataSource,
+              'dataset':    GFDataSet,
+              'database':   GFDatabase
+              }
 
   def __init__(self, name, attrs, wParent):
     XMLOElement.__init__(self, name, attrs, wParent)
@@ -138,7 +195,10 @@
   def startTag(self, name, attrs):
     child = XMLOElement.startTag(self, name, attrs)
     if child == None:
-      child = XMLWidget(name, attrs, self.widget)
+      if name == 'trigger':
+        child = XMLTrigger(name, attrs, self.widget)
+      else:
+        child = XMLWidget(name, attrs, self.widget)
     return child
 
   def __del__(self):
@@ -181,4 +241,7 @@
 #
 #
 #
+
+
+
 
Index: gnue/gnuef/src/GFTrigger.py
diff -u gnue/gnuef/src/GFTrigger.py:1.1 gnue/gnuef/src/GFTrigger.py:1.2
--- gnue/gnuef/src/GFTrigger.py:1.1     Mon Aug 28 11:40:35 2000
+++ gnue/gnuef/src/GFTrigger.py Tue Oct  3 18:19:53 2000
@@ -11,14 +11,8 @@
 # Copyright (c) 2000 James Thompson
 #
 
-#
-# Class GFObj
-#
-# Base internal object for GNUE Forms
-#
-# Provides the basic nested object tree support
-# as well as support for triggers
-#
+from GFObjects import *
+
 class GFTriggerAware:
   def __init__(self):
       self.trigger = {}
@@ -36,11 +30,43 @@
 
   def processTrigger(self, key):
     if self.validTriggers.count(key):
-      if len(self.trigger) != 0:
+      if self.trigger.has_key(key):
         for function in self.trigger[key]:
           function(self)
       else:
         print "No triggers to fire"
     else:
       print "Invalid trigger ",key
+
+
+
+##class GFTrigger(GFObj):
+##  def __init__(self, name, attrs, wparent):
+##    GFObj.__init__(self, parent)
+##    if self.language != 'python':
+##      print "Language %s not implemented" % self.language
+##      sys.exit()
+##    # First compile the trigger:
+##    #   Compilation at this stage has the useful side effect that
+##    #   syntax errors are spotted during XML parsing rather than
+##    #   during execution.
+##    try:
+##      code = compile(self.contents, '<string>', 'exec')
+##    except SyntaxError, err:
+##      print "Syntax error in line %d of trigger in element ??" \
+##            % ( err.lineno )
+##      sys.exit()
+      
+##    localns = {}         # Set the namespace used for the
+##    globalns = triggerns # trigger.
+
+##  def thisTrigger(myself, code = code,
+##                  localns = localns, globalns = globalns):
+##    globalns['self'] = myself
+##    exec( code, globalns, localns )
+    
+    
+
+
+
 
Index: gnue/gnuef/src/UIbase.py
diff -u gnue/gnuef/src/UIbase.py:1.2 gnue/gnuef/src/UIbase.py:1.3
--- gnue/gnuef/src/UIbase.py:1.2        Sun Aug 27 20:06:37 2000
+++ gnue/gnuef/src/UIbase.py    Tue Oct  3 18:19:53 2000
@@ -28,7 +28,6 @@
     self.form = form;
     
     self.formToUI = {}                   # the GFObj to UI widget cross ref
-#    self.UIToForm = {}
     
     self.currentObject = [form]          # the current GFForm object
     self.currentWidget = [self]          # the current UI widget
@@ -51,7 +50,8 @@
       'GFPage': self.pageHandler,
       'GFLabel': self.stdHandler,
       'GFEntry': self.stdHandler,
-      'GFForm': self.formHandler
+      'GFForm': self.formHandler,
+      'GFDataSource': self.notVisible 
       }
 
     #
@@ -65,8 +65,8 @@
 
     self.onInit(form)
 
-#    self.buildUI()
-#    self.pageList[0].Show(TRUE)
+  def notVisible(self):
+    pass
 
   #
   # stdHandler
Index: gnue/gnuef/src/UIwxpython.py
diff -u gnue/gnuef/src/UIwxpython.py:1.5 gnue/gnuef/src/UIwxpython.py:1.6
--- gnue/gnuef/src/UIwxpython.py:1.5    Fri Sep 29 10:15:29 2000
+++ gnue/gnuef/src/UIwxpython.py        Tue Oct  3 18:19:53 2000
@@ -66,6 +66,7 @@
     self.buildUI()
     self.pageList[0].Show(TRUE)
     self.visiblePage = self.pageList[0]
+
     
   #
   # uiEventTrap traps wxPython events and converts



reply via email to

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