[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/gnuef samples/contact.gfd src/GFEvent.py s...
From: |
James Thompson |
Subject: |
gnue/gnuef samples/contact.gfd src/GFEvent.py s... |
Date: |
Fri, 06 Oct 2000 19:02:02 -0700 |
CVSROOT: /cvs
Module name: gnue
Changes by: James Thompson <address@hidden> 00/10/06 19:02:01
Modified files:
gnuef/samples : contact.gfd
gnuef/src : GFEvent.py GFForm.py GFObjects.py Makefile.am
Added files:
gnuef/samples : zip_code.gfd
gnuef/src : DBobjectserver.py DBpostgresql.py
Removed files:
gnuef/src : DSobjectServer.py DSpostgresql.py
Log message:
Partially functional query system
CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/samples/zip_code.gfd.diff?r1=NONE&r2=1.1
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/samples/contact.gfd.diff?r1=1.7&r2=1.8
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DBobjectserver.py.diff?r1=NONE&r2=1.1
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DBpostgresql.py.diff?r1=NONE&r2=1.1
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFEvent.py.diff?r1=1.4&r2=1.5
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFForm.py.diff?r1=1.13&r2=1.14
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFObjects.py.diff?r1=1.9&r2=1.10
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/Makefile.am.diff?r1=1.1&r2=1.2
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DSobjectServer.py.diff?r1=1.1&r2=NONE
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/DSpostgresql.py.diff?r1=1.3&r2=NONE
Patches:
Index: gnue/gnuef/samples/contact.gfd
diff -u gnue/gnuef/samples/contact.gfd:1.7 gnue/gnuef/samples/contact.gfd:1.8
--- gnue/gnuef/samples/contact.gfd:1.7 Thu Oct 5 22:25:10 2000
+++ gnue/gnuef/samples/contact.gfd Fri Oct 6 19:02:01 2000
@@ -8,12 +8,6 @@
<width>500</width>
</options>
-
- <database name="gnue" provider="postgresql" dbname="gnue" host="gnue"/>
- <dataset name="qrySomeQuery" databaseName="gnue_data"
- query="select * from country;"/>
- <datasource name="dtsrcCoolBeans" DataSet="qrySomeQuery"/>
-
<page>
<block dbName="test" tableName="country">
<label text="General" x="5" y="1"/>
Index: gnue/gnuef/src/GFEvent.py
diff -u gnue/gnuef/src/GFEvent.py:1.4 gnue/gnuef/src/GFEvent.py:1.5
--- gnue/gnuef/src/GFEvent.py:1.4 Tue Oct 3 22:04:58 2000
+++ gnue/gnuef/src/GFEvent.py Fri Oct 6 19:02:01 2000
@@ -60,7 +60,8 @@
#
def processEvent(self, event):
try:
-# print "Received ", event.getEvent()
+ if GFOptions.DEBUG > 99:
+ print "received %s event" % (event.getEvent())
self.incommingEvent[event.getEvent()] (event)
except KeyError:
if GFOptions.DEBUG > 99:
Index: gnue/gnuef/src/GFForm.py
diff -u gnue/gnuef/src/GFForm.py:1.13 gnue/gnuef/src/GFForm.py:1.14
--- gnue/gnuef/src/GFForm.py:1.13 Thu Oct 5 22:25:11 2000
+++ gnue/gnuef/src/GFForm.py Fri Oct 6 19:02:01 2000
@@ -25,8 +25,8 @@
GFEventAware.__init__(self)
self.type = "GFForm"
self.currentObject = [self]
+ self.mode = 'normal'
-
# Event processing
self.incommingEvent = {'requestNEXTENTRY' : self.nextEntry,
'requestPREVENTRY' : self.previousEntry,
@@ -46,8 +46,9 @@
'requestNEWRECORD' : self.newRecord,
-# 'requestQUERY' : self.requestQuery,
-# 'cancelQUERY' : self.requestQuery,
+ 'requestQUERY' : self.processQuery,
+ 'cancelQUERY' : self.processQuery,
+ 'executeQUERY' : self.processQuery,
'recordSWITCHED' : self.recordSwitched,
@@ -86,12 +87,13 @@
# set the initial focus
self.walk(self.setInitialFocus)
+ # Connect to the defined databases
+ self.walk(self.initDatabaseObjects)
+
# build the block list
self.walk(self.initBlocks)
self.walk(self.initEntries)
-
- # Connect to the defined databases
- self.walk(self.initDatabaseObjects)
+
if GFOptions.DEBUG > 50:
print "Database Dictionary"
print self.databaseDictionary
@@ -117,14 +119,16 @@
def initBlocks(self, object):
if object.getObjectType() == 'GFBlock':
self.blockList.append(object)
+ object.initialize()
def initEntries(self, object):
if object.getObjectType() == 'GFEntry':
- object.valueArray[0] = object.value
+ object.value = object.block.dataSource.getField(0,object.field)
def initDatabaseObjects(self, object):
- if object.getObjectType() =='GFDatasource':
+ if object.getObjectType() =='GFDataSource':
self.datasourceDictionary[object.name]=object
+ object.initialize()
if object.getObjectType() =='GFDatabase':
self.databaseDictionary[object.name]=object
@@ -164,9 +168,11 @@
# objects. Will eventually do more
#
def nextRecord(self, event):
+ print "Form next record received"
self.dispatchEvent(GFEvent('nextRECORD',self.currentBlock))
def prevRecord(self, event):
+ print "Form prev record received"
self.dispatchEvent(GFEvent('prevRECORD',self.currentBlock))
def newRecord(self, event):
@@ -395,10 +401,25 @@
# it has switched to a different record
#
def recordSwitched(self, event):
- print "We really should update ", event.data.getObjectType()
self.dispatchEvent(GFEvent('updateENTRY',event.data))
+ #
+ # processQuery
+ #
+ def processQuery(self, event):
+ if event.getEvent() == 'requestQUERY':
+ if self.mode != 'query':
+ self.mode = 'query'
+ # check the current data is saved
+ else:
+ self.mode = 'normal'
+
+ #clear the current datasource
+ elif event.getEvent() == 'processQUERY':
+ # to be done
+ pass
+
#
# requireLogin
#
Index: gnue/gnuef/src/GFObjects.py
diff -u gnue/gnuef/src/GFObjects.py:1.9 gnue/gnuef/src/GFObjects.py:1.10
--- gnue/gnuef/src/GFObjects.py:1.9 Thu Oct 5 22:25:11 2000
+++ gnue/gnuef/src/GFObjects.py Fri Oct 6 19:02:01 2000
@@ -11,7 +11,6 @@
# Copyright (c) 2000 James Thompson
#
-import DSobjectServer
from GFTrigger import *
from GFEvent import *
import GFOptions
@@ -83,36 +82,6 @@
return self.value
#
-# GFMultiValue
-#
-# An object that can store and retrieve a value
-#
-# Note: Do to the nature of the parser the
-# initial values of arguments are stored as
-# strings in the object. So we must keep a
-# seperate array to hold strings then
-# move them back and forth from the value attribute
-#
-class GFMultiValue(GFObj):
- # Add value attrib support
- def __init__(self, parent=None, value=None):
- self.value = value
-
- self.valueArray = []
- self.valueArray.append(value)
-
- self.type = "GFValue"
- GFObj.__init__(self, parent)
-
- def setValue(self, value):
- self.value = self.valueArray[self.block.currentRecord] = value
-
-
- def getValue(self):
- return self.value
-
-
-#
# GFPage
#
class GFPage(GFObj):
@@ -132,9 +101,91 @@
if not self.value:
GFValue.setValue(self,value)
+
+#
+# Data Access
#
-#GFDatabase
+
#
+#GFDataSource
+#
+# In memory store of data manipulated by forms
+#
+class GFDataSource(GFObj):
+ def __init__(self, parent=None):
+ GFObj.__init__(self, parent)
+ self.type = "GFDataSource"
+ self.emptyRecord = {}
+ self.resultSet = []
+ self.dataConnection = None
+ self.form = None
+
+ self.form = parent
+ while (self.form.getObjectType() != 'GFForm'):
+ self.form = self.form.parent
+
+
+ def initialize(self):
+ if GFOptions.DEBUG:
+ print "Initializing datasource %s" % (self.name)
+ #get the connection to database
+ self.dataConnection = self.form.databaseDictionary[self.database]
+
+ # Build an empty record for new records and query mask seed
+ for field in self.dataConnection.getFieldList(self.table).keys():
+ self.emptyRecord[field] = ""
+
+ # Set an initial empty record
+ self.resultSet = []
+ newentry = {}
+ for key in self.emptyRecord.keys():
+ newentry[key] = self.emptyRecord[key]
+ self.resultSet.append(newentry)
+
+ # just for the heck of it
+ self.query()
+
+ #
+ #
+ #
+ def getLastRecordNumber(self):
+ return len(self.resultSet)-1
+
+ def query(self,mask=None):
+ self.resultSet = self.dataConnection.query(self.table,mask)
+
+ def commit(self):
+ # go thru records
+ # see which have been altered
+ # pass those back for update/insert
+ # commit changes
+ pass
+
+ def rollback(self):
+ resultSet = []
+ pass
+
+ def new(self):
+ newentry = {}
+ for key in self.emptyRecord.keys():
+ newentry[key] = self.emptyRecord[key]
+ self.resultSet.append(newentry)
+
+ print self.resultSet
+
+ def getField(self,recordNumber,fieldName):
+ return self.resultSet[recordNumber][fieldName]
+
+ def setField(self,recordNumber,fieldName,value):
+ self.resultSet[recordNumber][fieldName] = value
+ #lock that record in the datasource
+
+ pass
+#
+# GFDatabase
+#
+# The connection to a specific chunk of data
+#
class GFDatabase(GFObj):
def __init__(self, parent=None):
GFObj.__init__(self, parent)
@@ -142,8 +193,8 @@
def initialize(self,user,passwd):
if self.provider == "postgresql":
- import DSpostgresql
- self.link = DSpostgresql.DSLink()
+ from DBpostgresql import DBpostgresql
+ self.link = DBpostgresql()
self.link.connect(self.host,self.dbname,user,passwd)
def query(self, table, mask):
@@ -160,30 +211,12 @@
def delete(self, table, mask):
self.link.insert(table,mask)
-
-#
-#GFDataSource
-#
-class GFDataSource(GFObj):
- def __init__(self, parent=None):
- GFObj.__init__(self, parent)
- self.type = "GFDataSource"
- self.resultSet = {}
+ def getFieldList(self,table):
+ return self.link.getFieldList(table)
- def initialize(self):
- pass
#
-#GFDataSet
-#
-class GFDataSet(GFObj):
- def __init__(self, parent=None):
- GFObj.__init__(self, parent)
- self.type = "GFDataSet"
-
-
-#
#
# More complex objects below
#
@@ -204,17 +237,16 @@
GFEventAware.__init__(self)
self.type = "GFBlock"
- self.datalink = None
-
+ self.dataSource = None
+
self.currentRecord = 0
self.recordCount = 0
# Event processing
- self.incommingEvent = {'nextRECORD' : self.switchRecord,
+ self.incommingEvent = {'newRECORD' : self.newRecord,
+ 'nextRECORD' : self.switchRecord,
'prevRECORD' : self.switchRecord,
- 'newRECORD' : self.newRecord,
- 'recordSWITCHED': self.recordSwitched,
- 'recordCREATED' : self.recordCreated
+ 'recordSWITCHED': self.recordSwitched
}
# register to recieve events from it's parent GFForm
@@ -226,7 +258,23 @@
#register the form to recieve events from the block
self.registerEventListener(self.form.processEvent)
+ def initialize(self):
+ self.dataSource = self.form.datasourceDictionary[self.datasource]
+ self.recordCount =
self.form.datasourceDictionary[self.datasource].getLastRecordNumber()
+
#
+ # Adds a black record to the current records in memory
+ #
+ def newRecord(self, event):
+ if event.data == self:
+ self.recordCount =
self.form.datasourceDictionary[self.datasource].getLastRecordNumber()
+
+ self.dataSource.new()
+ oldRecord = self.currentRecord
+ self.currentRecord = self.recordCount
+
self.dispatchEvent(GFEvent('switchRECORD',[oldRecord,self.currentRecord]));
+
+ #
# Moves the proper record into editing position
#
def switchRecord(self, event):
@@ -235,24 +283,15 @@
adjustment = -1
else:
adjustment = 1
-
+
+ oldRecord = self.currentRecord
self.currentRecord = self.currentRecord + adjustment
if self.currentRecord < 0 : self.currentRecord = self.recordCount
if self.currentRecord > self.recordCount : self.currentRecord = 0
- self.dispatchEvent(GFEvent('switchRECORD',self.currentRecord));
+
self.dispatchEvent(GFEvent('switchRECORD',[oldRecord,self.currentRecord]));
- #
- # Adds a black record to the current records in memory
- #
- def newRecord(self, event):
- if event.data == self:
- self.recordCount = self.recordCount + 1
- self.dispatchEvent(GFEvent('newRECORD',self.currentRecord));
-
- self.currentRecord = self.recordCount
- self.dispatchEvent(GFEvent('switchRECORD',self.currentRecord));
#
# recordSwitched
@@ -262,23 +301,6 @@
print event.data, " just switched records"
self.dispatchEvent(GFEvent('recordSWITCHED',event.data))
- #
- # recordCreated
- #
- def recordCreated(self, event):
- pass
- #self.dispatchEvent(GFEvent('recordCREATED',self))
-
-
- #def initDataSource(self):
- # try:
- # self.datalink =
DSobjectServer.DSdataLink(self.__dict__["dbName"],self.__dict__["tableName"])
- # except KeyError:
- # print "Not tied to db"
- # pass
-
-
-
#
# GFEntry
#
@@ -291,20 +313,17 @@
#
# It send events to its parent GFBlock
#
-class GFEntry(GFMultiValue, GFEventAware):
+class GFEntry(GFValue, GFEventAware):
def __init__(self, parent=None, value=None):
- GFMultiValue.__init__(self, parent, value)
+ GFValue.__init__(self, parent, value)
GFEventAware.__init__(self)
self.type = "GFEntry"
- if value != None:
- self.cursorPosition = len(value)
- else:
- self.cursorPosition = 0
+ self.value=""
+ self.cursorPosition = len(self.value)
# Event processing
- self.incommingEvent = {'switchRECORD': self.switchRecord,
- 'newRECORD' : self.newRecord
+ self.incommingEvent = {'switchRECORD': self.switchRecord
}
# register to recieve events from it's parent GFBlock
@@ -322,18 +341,24 @@
# Moves the proper record into editing position
#
def switchRecord(self, event):
- if GFOptions.DEBUG:
- print "Switching to record ",event.data
- self.value = self.valueArray[event.data]
- self.dispatchEvent(GFEvent('recordSWITCHED',self));
-
- #
- # Adds a black record to the current records in memory
- #
- def newRecord(self, event):
- self.valueArray.append("")
- self.dispatchEvent(GFEvent('recordCREATED',self));
-
+ print "Switching to record %s from record %s" % (event.data[1] ,
event.data[0])
+
+ self.block.dataSource.setField(event.data[0],self.field,self.value)
+ self.value = self.block.dataSource.getField(event.data[1],self.field)
+ #self.value = self.valueArray[event.data]
+ self.cursorPosition = len(self.value)
+ self.dispatchEvent(GFEvent('recordSWITCHED',self));
+#
+# Unused objects
+#
+#
+#GFDataSet
+#
+class GFDataSet(GFObj):
+ def __init__(self, parent=None):
+ GFObj.__init__(self, parent)
+ self.type = "GFDataSet"
+
Index: gnue/gnuef/src/Makefile.am
diff -u gnue/gnuef/src/Makefile.am:1.1 gnue/gnuef/src/Makefile.am:1.2
--- gnue/gnuef/src/Makefile.am:1.1 Thu Sep 21 16:52:50 2000
+++ gnue/gnuef/src/Makefile.am Fri Oct 6 19:02:01 2000
@@ -1,4 +1,6 @@
EXTRA_DIST = \
+ DBpostgresql.py \
+ DBobjectserver.py \
DPyGetOpt.py \
GFClient.py \
GFController.py \
@@ -7,6 +9,7 @@
GFEvent.py \
GFForm.py \
GFObjects.py \
+ GFOptions.py \
GFTrigger.py \
GFView.py \
UIbase.py \
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/gnuef samples/contact.gfd src/GFEvent.py s...,
James Thompson <=