commit-gnue
[Top][All Lists]
Advanced

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

gnue/gnuef/src GFEvent.py GFForm.py GFInstance....


From: Jason Cater
Subject: gnue/gnuef/src GFEvent.py GFForm.py GFInstance....
Date: Thu, 07 Jun 2001 09:58:16 -0700

CVSROOT:        /home/cvs
Module name:    gnue
Changes by:     Jason Cater <address@hidden>    01/06/07 09:58:16

Modified files:
        gnuef/src      : GFEvent.py GFForm.py GFInstance.py GFObjects.py 
                         GFParser.py GFTrigger.py 
Added files:
        gnuef/src      : GFLibrary.py 

Log message:
        Added importing capabilities to forms

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFLibrary.py?cvsroot=OldCVS&rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFEvent.py.diff?cvsroot=OldCVS&tr1=1.15&tr2=1.16&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFForm.py.diff?cvsroot=OldCVS&tr1=1.97&tr2=1.98&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFInstance.py.diff?cvsroot=OldCVS&tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFObjects.py.diff?cvsroot=OldCVS&tr1=1.91&tr2=1.92&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFParser.py.diff?cvsroot=OldCVS&tr1=1.28&tr2=1.29&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFTrigger.py.diff?cvsroot=OldCVS&tr1=1.27&tr2=1.28&r1=text&r2=text

Patches:
Index: gnue/gnuef/src/GFEvent.py
diff -u gnue/gnuef/src/GFEvent.py:1.15 gnue/gnuef/src/GFEvent.py:1.16
--- gnue/gnuef/src/GFEvent.py:1.15      Wed Jun  6 18:46:53 2001
+++ gnue/gnuef/src/GFEvent.py   Thu Jun  7 09:58:15 2001
@@ -73,12 +73,12 @@
   # handle an incomming event
   #
   def processEvent(self, event):
-    try:
-#       GDebug.printMesg(3, "Event: %s " % (event.getEvent()))
+    #GDebug.printMesg(10, "Event: %s in %s" % (event.getEvent(), self))
+    if self.incommingEvent.has_key(event.event): 
        self.incommingEvent[event.event] (event)
-    except KeyError:
+    else: 
       GDebug.printMesg(3, "Unknown Event: %s " % (event.getEvent()))
-
+      GDebug.printMesg(3, "My events: %s" % (self.incommingEvent.keys()))
 
                                                                     
 
Index: gnue/gnuef/src/GFForm.py
diff -u gnue/gnuef/src/GFForm.py:1.97 gnue/gnuef/src/GFForm.py:1.98
--- gnue/gnuef/src/GFForm.py:1.97       Wed Jun  6 18:46:53 2001
+++ gnue/gnuef/src/GFForm.py    Thu Jun  7 09:58:15 2001
@@ -30,9 +30,9 @@
 import sys
 import os
 import string
-from gnue.common import GDebug
+from gnue.common import GDebug, openResource
 from gnue.common import GConfig            
-import GFOptions
+import GFOptions            
 import traceback
 
 from GFObjects import *
@@ -40,7 +40,9 @@
 from GFParser import *
 from GFError import DBError
 from GFTriggerError import *
-import GFParser
+from GFLibrary import * 
+import GFParser, GFTrigger
+import GFTrigger
 
 class GFForm(GFObj, GFEventAware):
   def __init__(self, parent=None, app=None):
@@ -73,6 +75,9 @@
 
   def initializeTree(self):
       
+    # Import all needed objects
+    self.walk(self.initImportedObjects)  
+
     # set the initial focus
     self.walk(self.setInitialFocus)
 
@@ -115,6 +120,84 @@
   # routines that are used by the walk() method
   # suggesting a better way probably exists :)
   #
+  def initImportedObjects(self, object): 
+    if isinstance(object, GFLibrary.GFImport): 
+      importAllDataSources = object.datasources == "*"
+      importAllPages = object.pages == "*"
+      importAllTriggers = object.triggers == "*"
+      importDataSources = string.split(string.replace(object.datasources,' 
',''),',')
+      importPages = string.split(string.replace(object.pages,' ',''),',')
+      importTriggers = string.split(string.replace(object.triggers,' ',''),',')
+
+      handle = openResource(object.library) 
+      form = GFParser.loadForm(handle, self._app, initialize=0) 
+      handle.close()
+
+      if importAllDataSources or len(importDataSources): 
+        for child in form._children: 
+          if isinstance(child, GFDataSource) and \
+             (importAllDataSources or child.name in importDataSources):  
+            child._parent = object 
+            child._IMPORTED = 1
+            object._children.append(child) 
+            child.buildObject()
+
+      if importAllPages or len(importPages):
+        for child in form._children:
+          if isinstance(child, GFPage) and \
+             (importAllPages or child.name in importPages):
+            child._parent = object 
+            child._IMPORTED = 1
+            object._children.append(child)
+            child.buildObject()
+
+      if importAllTriggers or len(importTriggers):
+        for child in form._children:
+          if isinstance(child, GFTrigger.GFTrigger) and \
+             (importAllTriggers or child.id in importTriggers):
+            child._parent = object 
+            child._IMPORTED = 1
+            object._children.append(child)
+            child.buildObject()
+
+ 
+    elif isinstance(object, GFLibrary.GFImportItem): 
+
+      handle = openResource(object.library)
+      form = GFParser.loadForm(handle, self._app, initialize=0)
+      handle.close()
+      id = 'id'
+      if hasattr(object,'name'): 
+        id = 'name'
+
+      rv = self.__findImportItem(object, form, id) 
+      if rv != None:  
+        rv._parent = object 
+        rv._IMPORTED = 1
+        object._children.append(rv)
+        for key in object._loadedxmlattrs.keys(): 
+          if key[0] != '_': 
+            rv.__dict__[key] = object._loadedxmlattrs[key]
+            print ">>> Moving %s" % key
+        rv.buildObject()
+        
+      
+  def __findImportItem(self, find, object, id): 
+    if isinstance(object, find._importclass) and \
+       hasattr(object, id) and \
+       object.__dict__[id] == find.__dict__[id]: 
+      return object 
+    elif hasattr(object,'_children'): 
+      rv = None 
+      for child in object._children: 
+        rv = self.__findImportItem(find, child, id) 
+        if rv: 
+          break
+      return rv
+    else: 
+      return None 
+        
+
   def setInitialFocus(self, object):
     if object.getObjectType() == 'GFBlock' and self._currentBlock == None:
       self._currentBlock = object
Index: gnue/gnuef/src/GFInstance.py
diff -u gnue/gnuef/src/GFInstance.py:1.8 gnue/gnuef/src/GFInstance.py:1.9
--- gnue/gnuef/src/GFInstance.py:1.8    Wed Jun  6 18:46:53 2001
+++ gnue/gnuef/src/GFInstance.py        Thu Jun  7 09:58:15 2001
@@ -34,7 +34,7 @@
 #
 # Copyright (c) 2000 Free Software Foundation
 #
-# $Id: GFInstance.py,v 1.8 2001/06/07 01:46:53 jamest Exp $
+# $Id: GFInstance.py,v 1.9 2001/06/07 16:58:15 jcater Exp $
 #
 
 import pstats
@@ -473,7 +473,7 @@
     ui = self._uiclass(self._disableSplash)
     ui.registerEventListener(self.processEvent)
     self.registerEventListener(ui.processEvent)
-            
+
     #
     # extract DB info and init datasources
     #
@@ -488,7 +488,7 @@
              [["user", "Username", 0], 
               ["passwd", "Password", 1]]]
 
-          # Returned data is in format of [ Completed, {dict of values} ]
+          # Returned data is in format of [ Completed?, {dict of values} ]
           self.dispatchEvent( GFEvent('getLogin', loginData) )
           results = loginData[3]  # Set by the login manager
           if not results[0]: 
Index: gnue/gnuef/src/GFObjects.py
diff -u gnue/gnuef/src/GFObjects.py:1.91 gnue/gnuef/src/GFObjects.py:1.92
--- gnue/gnuef/src/GFObjects.py:1.91    Wed Jun  6 18:46:53 2001
+++ gnue/gnuef/src/GFObjects.py Thu Jun  7 09:58:15 2001
@@ -16,7 +16,7 @@
 # write to the Free Software Foundation, Inc., 59 Temple Place 
 # - Suite 330, Boston, MA 02111-1307, USA.
 #
-# Copyright 2000 Free Software Foundation
+# Copyright 2000. 2001 Free Software Foundation
 #
 #
 # FILE:
@@ -34,10 +34,10 @@
 from gnue.common.GObjects import * 
 from gnue.common.dbdrivers.factory import factory
 from GFEvent import *
-from GFTrigger import *
 
 from gnue.common import GDebug
 from gnue.common import GConfig
+from gnue.forms.GFTrigger import GFTriggerAware
 
 import string
 import types
@@ -58,9 +58,9 @@
     self._type = 'GFObj'
     self.hidden = 0
     self.readonly = 0
-
     self._visibleIndex = 0
 
+
   #
   # get an Option 
   #
@@ -163,6 +163,10 @@
     GFObj.__init__(self, parent)
     self._type = "GFPage"
 
+    # Internally, we need a unique name for all pages
+    # so generate one if designer didn't
+    self.name = "__%s__" % self
+    
 #
 # GFBox
 #
@@ -188,6 +192,7 @@
     GFObj.__init__(self, parent)
     self._type = "GFButton"
     self.label = ""
+    self.name = "__%s__" % self
 
 #
 # GFOptions
@@ -216,8 +221,8 @@
     GFObj.__init__(self, parent)
     GFEventAware.__init__(self)
     self._type = "GFBlock"
+    self.buildObject()
     
-    self._form = self.findParentOfType('GFForm')
     self._dataSourceLink = None
     self.mode = 'normal'
     self._entryList = []
@@ -226,6 +231,7 @@
     self._recordCount = 0
 
   def initialize(self):
+    self._form = self.findParentOfType('GFForm')
     self.walk(self.buildEntryList)
 
     if hasattr(self,'datasource'):
@@ -414,13 +420,12 @@
   def __init__(self, parent=None, value=None):
     GFValue.__init__(self, parent, value)
     self._type = "GFEntry"
-
-    self._value=""
-    self._cursorPosition = len(self._value)
     self.height = float(GConfig.get('widgetHeight'))
-    self._block = self.findParentOfType('GFBlock')
+    self._value=""
 
   def initialize(self):
+    self._cursorPosition = len(self._value)
+    self._block = self.findParentOfType('GFBlock')
     if not hasattr(self,'field'):
       GDebug.printMesg(1,"%s" % self.getObjectType())
       GDebug.printMesg(1,"%s" % self.__dict__)
@@ -539,9 +544,10 @@
 
     self.sql = None
     
-    self._form = self.findParentOfType('GFForm')
     
   def initialize(self):
+    self._form = self.findParentOfType('GFForm')
+
     #self.emptyRecord = {}
     
     if hasattr(self,'database'):
Index: gnue/gnuef/src/GFParser.py
diff -u gnue/gnuef/src/GFParser.py:1.28 gnue/gnuef/src/GFParser.py:1.29
--- gnue/gnuef/src/GFParser.py:1.28     Wed Jun  6 18:46:53 2001
+++ gnue/gnuef/src/GFParser.py  Thu Jun  7 09:58:15 2001
@@ -36,6 +36,7 @@
 from GFObjects import *
 from GFForm import *
 import GFObjects
+import GFLibrary
 
 #######################################################
 # This method loads a form from an XML file and returns 
@@ -79,12 +80,19 @@
     self.xmlElements = { 
       'form':       (GFForm,       { 'title':       (0, 0, char, None),
                                      'readonly':    (0, 0, bool, 0   )}, 1),
+      'import':     (GFLibrary.GFImport,
+                                   { 'library':     (1, 0, char, None), 
+                                     'datasources': (0, 0, char, ""  ), 
+                                     'pages':       (0, 0, char, ""  ), 
+                                     'datasources': (0, 0, char, ""  ), 
+                                     'triggers':    (0, 0, char, ""  )}, 1), 
       'database':   (GFDatabase,   { 'name':        (1, 1, char, None), 
                                      'provider':    (1, 0, char, None), 
                                      'dbname':      (1, 0, char, None), 
                                      'host':        (1, 0, char, None)}, 1), 
+
       'datasource': (GFDataSource,  GDataSource.tagAttributes          , 1),
-      'page':       (GFPage,       {                                  }, 1), 
+      'page':       (GFPage,       { 'name':        (0, 1, char, None)}, 1), 
       'block':      (GFBlock,      { 'name':        (1, 1, char, None), 
                                      'master':      (0, 0, char, None), 
                                      'detail':      (0, 0, char, None), 
@@ -92,7 +100,8 @@
                                      'rowSpacer':   (0, 0, int,  None),
                                      'transparentBlock':(0, 0, bool, 0),
                                      'datasource':  (0, 0, char, None)}, 1), 
-      'label':      (GFLabel,      { 'text':        (1, 0, char, None), 
+      'label':      (GFLabel,      { 'name':        (0, 1, char, None), 
+                                     'text':        (1, 0, char, None), 
                                      'alignment':   (0, 0, char, None), 
                                      'width':       (0, 0, int,  None), 
                                      'x':           (1, 0, int,  None), 
@@ -128,7 +137,8 @@
                                      'height':      (1, 0, int,  None), 
                                      'x':           (1, 0, int,  None), 
                                      'y':           (1, 0, int,  None)}, 1), 
-      'button':     (GFButton,     { 'trigger':     (0, 0, char, None), 
+      'button':     (GFButton,     { 'name':        (0, 1, char, None), 
+                                     'trigger':     (0, 0, char, None), 
                                      'label':       (0, 0, char, None), 
                                      'width':       (1, 0, int,  None), 
                                      'height':      (1, 0, int,  None), 
@@ -152,7 +162,26 @@
 
 
     #
+    # Add importable elements
+    # If an object needs to be importable, 
+    # simply add its tag name to the tuple below
+    # and make sure it has either a name or id 
+    # (otherwise we don't know how to reference 
+    # it in the imported file).  
+    #
+    for key in ('datasource','page','block','trigger','button','entry'): 
+      name = "import-%s" % key
+      p = {}
+      for k in self.xmlElements[key][1].keys(): 
+        p[k] = self.xmlElements[key][1][k][:]
+      p['library'] = (1, 0, char, None)
+
+      self.xmlElements[name] = (GFLibrary.GFImportItem, p)
+ 
+
+    #
     # Add DataSource elements
     #
     self.xmlElements.update(GDataSource.xmlElements)
+
 
Index: gnue/gnuef/src/GFTrigger.py
diff -u gnue/gnuef/src/GFTrigger.py:1.27 gnue/gnuef/src/GFTrigger.py:1.28
--- gnue/gnuef/src/GFTrigger.py:1.27    Wed Jun  6 18:46:53 2001
+++ gnue/gnuef/src/GFTrigger.py Thu Jun  7 09:58:15 2001
@@ -107,9 +107,7 @@
       if self._parent:
         self._parent.addTrigger( self.type, self )
     else:
-      # Note have assumed that the parent of a named trigger
-      # is always a GFForm. Need a more general syntax ...
-      self._parent._triggerDictionary[self.id] = self
+      self.getParentOfType('GFForm')._triggerDictionary[self.id] = self
 
     if self.src == None: 
       self.setFunction( self.getChildrenAsContent(), self.language )



reply via email to

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