[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/gnuef samples/geas/customer.gfd src/GFOpti...
From: |
James Thompson |
Subject: |
gnue/gnuef samples/geas/customer.gfd src/GFOpti... |
Date: |
Sun, 04 Mar 2001 16:54:18 -0800 |
CVSROOT: /cvs
Module name: gnue
Changes by: James Thompson <address@hidden> 01/03/04 16:54:18
Modified files:
gnuef/samples/geas: customer.gfd
gnuef/src : GFOptions.py UIcurses.py
gnuef/src/drivers/geas: DBdriver.py
Log message:
partial geas driver updates for geas:tng
partial curses rewrite
CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/samples/geas/customer.gfd.diff?r1=1.2&r2=1.3
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/GFOptions.py.diff?r1=1.21&r2=1.22
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/UIcurses.py.diff?r1=1.4&r2=1.5
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/gnuef/src/drivers/geas/DBdriver.py.diff?r1=1.11&r2=1.12
Patches:
Index: gnue/gnuef/samples/geas/customer.gfd
diff -u gnue/gnuef/samples/geas/customer.gfd:1.2
gnue/gnuef/samples/geas/customer.gfd:1.3
--- gnue/gnuef/samples/geas/customer.gfd:1.2 Fri Dec 22 15:14:43 2000
+++ gnue/gnuef/samples/geas/customer.gfd Sun Mar 4 16:54:17 2001
@@ -9,15 +9,10 @@
</options>
<database name="gnue" provider="geas" dbname="test" host="gnue"/>
- <datasource name="customer" database="gnue" table="customer"/>
+ <datasource name="country" database="gnue" table="country"/>
-<!--
- Uncomment this section and comment out database/datasource above
- to run as non data aware form.
- <datasource name="customer"/>
--->
<page>
- <block name="id" datasource="customer">
+ <block name="id" datasource="country">
<label text="ID" x="1" y="1"/>
<entry name="id" field="id" x="1" y="2" width="30" height="1">
<options>
@@ -29,13 +24,6 @@
<entry name="name" field="name" x="1" y="4" width="30" height="1"
uppercase="">
<options>
<tip>Don't accept rides from strangers.</tip>
- </options>
- </entry>
-
- <label text="Code" x="1" y="5"/>
- <entry name="code" field="countrycode" x="1" y="6" width="30" height="1"
max_length="5">
- <options>
- <tip>Don't ask, just back away.</tip>
</options>
</entry>
Index: gnue/gnuef/src/GFOptions.py
diff -u gnue/gnuef/src/GFOptions.py:1.21 gnue/gnuef/src/GFOptions.py:1.22
--- gnue/gnuef/src/GFOptions.py:1.21 Mon Feb 19 09:31:08 2001
+++ gnue/gnuef/src/GFOptions.py Sun Mar 4 16:54:17 2001
@@ -38,7 +38,8 @@
msg_query="Execute query using current mask."
msg_help="Display info about GNUe Forms."
-
+#
+GEASDIR="/home/jamest/cvs/gnue/geas/"
# GNUe logo
Index: gnue/gnuef/src/UIcurses.py
diff -u gnue/gnuef/src/UIcurses.py:1.4 gnue/gnuef/src/UIcurses.py:1.5
--- gnue/gnuef/src/UIcurses.py:1.4 Thu Jan 18 05:26:37 2001
+++ gnue/gnuef/src/UIcurses.py Sun Mar 4 16:54:17 2001
@@ -18,8 +18,13 @@
import curses
import string
-class GFCursesPanel:
-
+#
+# GFUserInterface
+#
+# The public interface to the User Interface
+# All UIs must provide this class
+#
+class GFUserInterface(GFUserInterfaceBase):
def __init__(self):
self.stdscr=None
self.stdscr=curses.initscr()
@@ -38,33 +43,11 @@
if not curses.isendwin():
curses.endwin()
atexit.register(cleanup)
-
- def __del__(self):
- curses.endwin()
- sys.exitclean=TRUE
-
- def handle(self,c):
- if self.kbdFuncs.has_key(c):
- self.ncform.form_driver(self.kbdFuncs[c])
- else:
- self.ncform.form_driver(c)
- self.panel.draw()
-#
-# GFUserInterface
-#
-# The public interface to the User Interface
-# All UIs must provide this class
-#
-class GFUserInterface(GFUserInterfaceBase,GFCursesPanel):
- def __init__(self, fp):
- GFCursesPanel.__init__(self)
- GFUserInterfaceBase.__init__(self,fp)
+ GFUserInterfaceBase.__init__(self)
self.incommingEvent.update({'msgBoxUI' : self.msgBox,
'getLogin' : self.getLogin
})
-
- def onInit(self):
self.widgetConstructorFunction['GFLabel'] = self.labelHandler
self.widgetConstructorFunction['GFEntry'] = self.entryHandler
self.widgetConstructorFunction['GFBox'] = self.boxHandler
@@ -108,7 +91,22 @@
self.currentPage = -1
self.buildUI()
-
+ def __del__(self):
+ curses.endwin()
+ sys.exitclean=TRUE
+
+ def handle(self,c):
+ if self.kbdFuncs.has_key(c):
+ self.ncform.form_driver(self.kbdFuncs[c])
+ else:
+ self.ncform.form_driver(c)
+ self.panel.draw()
+ #
+ # getModule
+ #
+ def getModule(self):
+ return GFUserInterface.__module__
+
def mainLoop(self):
self.doSplashScreen()
self.onMain()
@@ -219,6 +217,17 @@
# Methods called to deal with incomming events
#
+ #
+ # formAlert
+ #
+ # Rings a bell and alters the statusbar to display
+ # a line of text
+ #
+ def formAlert(self, event):
+ curses.beep()
+ # need to convert to curses model
+ #self.statusBar.SetStatusText(event.data,0)
+
def adjustMultiView(self, event):
block = event.data.block.form.currentBlock
@@ -438,17 +447,201 @@
panel.erase()
+
+#
+#
+# UI Objects
#
+# A set of standard UI objects that allow us to move more code into UIbase
+# These map generic functionality to the specific UI widget set in use by
+# this driver
#
-# Custom widgets to implement featuers in curses
#
+# UIHelper
#
+# Provides a UI widget set of std functions to reduce the number of functions
+# require in each UIclass listed below
+class UIHelper:
+ def showModal(self):
+ pass
+# self.ShowModal()
+
+ def show(self, flag=TRUE, index=None):
+ pass
+# if index:
+# self.widgets[index].Show(flag)
+# else:
+# self.Show(flag)
+
+ def destroy(self):
+ pass
+# self.Destroy()
+
+ def indexedFocus(self, index):
+ pass
+# self.widgets[index].SetFocus()
+ def setValue(self, value, index=0):
+ pass
+# self.widgets[index].SetEvtHandlerEnabled(FALSE)
+# self.widgets[index].SetValue(value)
+# self.widgets[index].SetEvtHandlerEnabled(TRUE)
+ def setCursorPosition(self, position, index=0):
+ pass
+# self.widgets[index].SetInsertionPoint(position)
+
+#
+# UILabel
+#
+# Widget set specific function that creates a single instance of a label
+#
+class UILabel(UIWidget, UIHelper):
+ def createWidget(self, object, container, textWidth, textHeight,
widgetWidth, widgetHeight,interface,spacer):
+ GFDebug.printMesg( 1, "Label container = %s"%container )
+ label = NCLabel( container, int(object.y), int(object.x), object.text)
+ GFDebug.printMesg( 1, "Don't forget to add page handling")
+ interface.newPage=0
+ return label
+
+
+#
+# UIBox
+#
+# Widget set specific function that creates a single instance of a border box
+#
+class UIBox(UIWidget, UIHelper):
+ def createWidget(self, object, container, textWidth, textHeight,
widgetWidth, widgetHeight,interface,spacer):
+ interface.panel.addBox( int(object.height), int(object.width),
+ int(object.y), int(object.x) )
+ return None
+
+###
+### UIScrollBar
+###
+### Widget set specific function that creates a single instance of a scroll
bar used
+### to navigate multiple records
+###
+##class UIScrollBar(UIWidget, UIHelper):
+## def createWidget(self, object, container, textWidth, textHeight,
widgetWidth, widgetHeight,interface,spacer):
+## newWidget =wxScrollBar(container,-1,
+##
wxPoint(int(object.x)*int(widgetWidth),(int(object.y)+spacer)*int(widgetHeight)),
+##
wxSize(int(object.width)*int(widgetWidth),int(object.height)*int(widgetHeight)),
+## wxSB_VERTICAL)
+## newWidget.SetFont(wxFont(GFOptions.pointSize,wxMODERN,wxNORMAL,wxNORMAL))
+## return newWidget
+###
+### UIButton
+###
+### Widget set specific function that creates a single instance of a button
+###
+##class UIButton(UIWidget, UIHelper):
+## def createWidget(self, object, container, textWidth, textHeight,
widgetWidth, widgetHeight,interface,spacer):
+## newWidget = wxButton(container,-1,str(object.label),
+##
wxPoint(int(object.x)*int(widgetWidth),(int(object.y)+spacer)*int(widgetHeight)),
+##
wxSize(int(object.width)*int(widgetWidth),int(object.height)*int(widgetHeight))
+## )
+
+## newWidget.SetFont(wxFont(GFOptions.pointSize,wxMODERN,wxNORMAL,wxNORMAL))
+## EVT_BUTTON(newWidget,newWidget.GetId(),interface.uiEventTrap)
+## return newWidget
+
+#
+# UIPage
+#
+# Widget set specific function that creates a single instance of a page
+#
+class UIPage(UIWidget, UIHelper):
+ def createWidget(self, object, container, textWidth, textHeight,
widgetWidth, widgetHeight,interface,spacer):
+ page = NCPage( container, interface.form.height, interface.form.width )
+ return page
+
+#
+# UIEntry
+#
+# Widget set specific function that creates a single instance of a data entry
widget
+#
+class UIEntry(UIWidget, UIHelper):
+ def createWidget(self, object, container, textWidth, textHeight,
widgetWidth, widgetHeight,interface,spacer):
+
+ if hasattr(object,'style'):
+ style = object.style
+ else:
+ style = 'text'
+
+ if style == 'dropdown':
+ choices = []
+ values = object.allowedValues()
+ for key in values.keys():
+ choices.append(values[key])
+ choices.sort()
+ field =
interface.addChoice(int(object.x),int(object.y)+spacer,int(object.width),
+ choices,self.newPage, object)
+ else:
+ field = NCEntry( container, int(object.y)+spacer, int(object.x), 1,
int(object.width) )
+ interface.newPage=0
+
+ if interface.ncfield == None:
+ interface.ncfield = widget[0]
+
+ return widget
+
+#
+# UIForm
+#
+# Widget set specific function that creates a single instance of a Form widget
+#
+class UIForm(UIWidget, UIHelper):
+ def createWidget(self, object, container, textWidth, textHeight,
widgetWidth, widgetHeight,interface,spacer):
+ interface.frame = NCMain()
+ return interface.frame
+
+## newWidget = wxPanel(interface.mainWindow.panel,-1, wxDefaultPosition)
+## EVT_CLOSE(interface.mainWindow,interface.closeTrap)
+
+## return newWidget
+
+###
+### UIAbout
+###
+### A dialog box providing about info
+###
+##class UIAbout(wxMessageDialog, UIHelper):
+## def __init__(self, interface, programVersion, formName, formVersion,
author, description):
+## wxMessageDialog.__init__(self, interface,
+## "GNUE Forms\n"
+## " Version : %s\n"
+## " Driver : UIwxpython\n"
+## "-= Form Info =-\n"
+## " Name : %s\n"
+## " Version: %s\n"
+## " Author : %s\n"
+## " Description: %s\n"
+## % (programVersion, formName
,formVersion,author,description),
+## "About", wxOK | wxICON_INFORMATION)
+###
+### UImessageBox
+###
+### A dialog box providing basic message info
+###
+##class UIMessageBox(wxMessageDialog, UIHelper):
+## def __init__(self, interface, message, caption):
+## wxMessageDialog.__init__(self, interface, message, caption,
style=wxOK|wxICON_EXCLAMATION)
+
+
+#############################################################################
+#
+# NC Widgets
+#
+# Custom widgets to implement featuers in curses.
+#
+
+#
+# NCWidget
+#
+#A simple base class representing a curses widget
+#
class NCWidget:
- #
- #A simple base class representing a curses widget
- #
def __init__(self, parent):
self.children = []
self.parent = parent
@@ -529,10 +722,12 @@
self.window.move( wy, wx )
self.window.refresh()
+#
+# NCForm
+#
+# A class representing a curses window/subwindow
+#
class NCForm(NCWidget):
- #
- #A class representing a curses window/subwindow
- #
def __init__(self, parent, lines, cols, by, bx):
NCWidget.__init__(self, parent)
if (parent == None):
@@ -550,10 +745,14 @@
def waitKey(self):
self.window.getch()
+#
+# NCPage
+#
+#
+# A class representing a page
+#
class NCPage(NCWidget):
- #
- #A class representing a page
- #
+
def __init__(self, parent, lines, cols):
NCWidget.__init__(self, parent)
#self.window = curses.newpad( lines, cols )
@@ -578,10 +777,12 @@
def draw(self):
pass
+#
+# NCLabel
+#
+# A class representing a label on a curses form
+#
class NCLabel(NCWidget):
- #
- #A class representing a label on a curses form
- #
def __init__(self, parent, line, col, text, attr=curses.A_BOLD):
NCWidget.__init__(self, parent)
@@ -606,10 +807,12 @@
#self.window.insstr( 0, 0, self.text, self.attr )
+#
+# NCEntry
+#
+# A class representing an entry on a curses form
+#
class NCEntry(NCWidget):
- #
- #A class representing an entry on a curses form
- #
def __init__(self, parent, line, col, height, width, password = 0):
NCWidget.__init__(self, parent)
self.realx = col
@@ -649,9 +852,11 @@
def getText(self):
return self.text
+#
+# NCMain
#
-#Class to simulate splitting screen into title bar status bar etc.
-#also deals with ncurses specific context sensitive help.
+# Class to simulate splitting screen into title bar status bar etc.
+# also deals with ncurses specific context sensitive help.
#
class NCMain(NCForm):
def __init__(self):
Index: gnue/gnuef/src/drivers/geas/DBdriver.py
diff -u gnue/gnuef/src/drivers/geas/DBdriver.py:1.11
gnue/gnuef/src/drivers/geas/DBdriver.py:1.12
--- gnue/gnuef/src/drivers/geas/DBdriver.py:1.11 Fri Dec 22 10:44:49 2000
+++ gnue/gnuef/src/drivers/geas/DBdriver.py Sun Mar 4 16:54:17 2001
@@ -1,28 +1,25 @@
#
# GEAS database driver
#
-# $Id: DBdriver.py,v 1.11 2000/12/22 18:44:49 jmeskill Exp $
+# $Id: DBdriver.py,v 1.12 2001/03/05 00:54:17 jamest Exp $
#
import sys
import md5
import string
+from gnue.forms import GFDebug
from gnue.forms import GFOptions
try:
import CORBA
+ CORBA.load_idl(GFOptions.GEASDIR+"idl/geas.idl")
+ import GEAS
+
except ImportError,ex:
print "Failed to load CORBA module."
print "Please see http://projects.sault.org/orbit-python/ for the required
python CORBA bindings"
sys.exit(0)
-try:
- from gnue.geas import IDLDIR
-except ImportError,ex:
- print "Failed to load geas module."
- print "Please see http://www.gnue.org for details"
- sys.exit(0)
-
class DBdriver:
def __init__ (self):
if GFOptions.DEBUG:
@@ -36,20 +33,20 @@
self.objlist = {}
def connect(self, host, dbname, user, passwd):
+ print "connect"
# find the object server base object
- ## Need to find a better way to find this file...
- idlfile = "%s/geas.idl" % (IDLDIR)
if GFOptions.DEBUG:
- print "IDL being loaded from %s" % (idlfile)
+ print "IDL being loaded from %s" %
(GFOptions.GEASDIR+"idl/geas.idl")
try:
- CORBA.load_idl(idlfile)
+ CORBA.load_idl(GFOptions.GEASDIR+"idl/geas.idl")
+ import GEAS
except (CORBA.SystemException), ex:
print "*** Error: could not find IDL files, please recompile"
print " and ./configure --with-idldir=/path/to/idl"
print
self.orb = CORBA.ORB_init(() , CORBA.ORB_ID)
try:
- self.ior = open("/tmp/databasefactory.ior").readline()
+ self.ior = open(GFOptions.GEASDIR+"src/geas-server.ior").readline()
except (IOError), ex:
print "*** Error: ior file for geas was not found... is geas
running?"
print
@@ -71,8 +68,9 @@
digest = self._make_passkey(user, passwd, random)
self.database = self.factory.getConnection(user, digest)
+ print self.database
## Now make connection
- self.database.connect()
+ #self.database.connect()
except (GEAS.UnknownConnection,
GEAS.ServerError,
GEAS.ConnectionFailed),ex:
@@ -83,10 +81,12 @@
print "Connected to database"
def disconnect(self):
+ print "disconnect"
self.database.disconnect();
self.database.release();
def query(self, table, mask = None, order_by=None):
+ GFDebug.printMesg(3, "query mask %s" % mask)
(objectID, mask) = self.filterMask(mask)
self.objlist = {}
rs = []
@@ -119,12 +119,15 @@
return rs
def commit(self):
+ print "commit"
pass
def rollback(self):
+ print "rollback"
pass
def insert(self,table,mask):
+ print "insert"
(objectID, mask) = self.filterMask(mask)
obj = self.database.newObject(table)
for m in mask.keys():
@@ -139,6 +142,7 @@
return mask
def delete(self,table,mask):
+ print "delete"
(objectID, mask) = self.filterMask(mask)
obj = self.objlist[objectID]
if obj:
@@ -146,6 +150,7 @@
obj.flush()
def update(self,table,mask):
+ print "update"
(objectID, mask) = self.filterMask(mask)
obj = self.objlist[objectID]
if obj:
@@ -157,32 +162,40 @@
return [self.buildMask(obj)]
def getFieldList(self,table):
+ print "getFieldList"
+
list = {}
self.fieldlist = {}
- cd = self.database.getFullClassDefinition(table)
- if cd:
- for field in cd.fields:
- if field.type == 1:
- list[field.name] = field.type
-
+ #
+ # commented out as geas can't return this info yet
+ #cd = self.database.getFullClassDefinition(table)
+ #if cd:
+ # for field in cd.fields:
+ # if field.type == 1:
+ # list[field.name] = field.type
+ #
self.fieldlist = list
return list
def getUniqueKey(self, table):
+ print "getUniqueKey"
return self.uniqueKey
def filterMask(self, mask):
+ print "fliterMask", mask
objectID = None
nmask = {}
- for k in mask.keys():
- if k == 'objectID':
- objectID = mask[k]
- else:
- nmask[k] = mask[k]
+ if mask != None:
+ for k in mask.keys():
+ if k == 'objectID':
+ objectID = mask[k]
+ else:
+ nmask[k] = mask[k]
return (objectID, nmask)
def buildMask(self, obj):
+ print "buildMask"
r = {}
# add objectID into field list
r[self.uniqueKey] = obj.objectID
@@ -192,10 +205,12 @@
return r
def _make_passkey(self, user, passwd, random):
+ print "_make_passkey"
m = md5.new(user + '-' + passwd + '-' + random)
return self._hexstr(m.digest())
def _hexstr(self, s):
+ print "hexstr"
h = string.hexdigits
r = ''
for c in s:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/gnuef samples/geas/customer.gfd src/GFOpti...,
James Thompson <=