[Top][All Lists]
[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 )
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/gnuef/src GFEvent.py GFForm.py GFInstance....,
Jason Cater <=