commit-gnue
[Top][All Lists]
Advanced

[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:



reply via email to

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