commit-gnue
[Top][All Lists]
Advanced

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

gnue/forms INSTALL.win32 setup.py doc/techref.t...


From: James Thompson
Subject: gnue/forms INSTALL.win32 setup.py doc/techref.t...
Date: Mon, 01 Jul 2002 20:32:48 -0400

CVSROOT:        /cvsroot/gnue
Module name:    gnue
Changes by:     James Thompson <address@hidden> 02/07/01 20:32:47

Modified files:
        forms          : INSTALL.win32 setup.py 
        forms/doc      : techref.txt 
        forms/src      : GFClient.py GFKeyMapper.py 

Log message:
        Removed references to PyXML
        UI driver load failure now generates error instead of fail silent
        Ctrl-UP/Ctrl-Down tied to First/Last record jump
        updated docs(i guess, it's been a while :)

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/INSTALL.win32.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/setup.py.diff?tr1=1.70&tr2=1.71&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/doc/techref.txt.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/GFClient.py.diff?tr1=1.45&tr2=1.46&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/GFKeyMapper.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text

Patches:
Index: gnue/forms/INSTALL.win32
diff -c gnue/forms/INSTALL.win32:1.4 gnue/forms/INSTALL.win32:1.5
*** gnue/forms/INSTALL.win32:1.4        Mon Nov  5 22:55:24 2001
--- gnue/forms/INSTALL.win32    Mon Jul  1 20:32:47 2002
***************
*** 6,13 ****
  Python 2.x+     www.python.org (1.X python will not work)
  wxPython        The GUI widget set
                  http://www.wxpython.org/download.php
- PyXML         XML parser tools
-                 http://sourceforge.net/projects/pyxml
  mxDateTime      http://www.lemburg.com/files/python/mxDateTime.html
  
  A supported DB driver (tested so far, others should work)
--- 6,11 ----
Index: gnue/forms/doc/techref.txt
diff -c gnue/forms/doc/techref.txt:1.5 gnue/forms/doc/techref.txt:1.6
*** gnue/forms/doc/techref.txt:1.5      Fri May 31 21:27:44 2002
--- gnue/forms/doc/techref.txt  Mon Jul  1 20:32:47 2002
***************
*** 1,34 ****
- 
- 
  GNU Entrprise - GNUe Forms
  Technical Reference
  
! This is version 0.1.5 of the Technical Reference it covers
! GNUe Forms 0.1.0
  
! The current copy is maintained as a LyX 1.1.6 file. If anyone
! knows of ways to get LyX to play nicer with regard to code
! samples please let us know. 
  
! This document is covered by the GNU Free Documentation License
! Version 1.1
  
- Introduction
  
- GNUE Forms aims to be the primary user interface to the GNU
- Enterprise system. It is comprised of two systems. GNUe
- Forms is responsible for displaying output and accepting
- user input. GNUe Designer allows a developer to produce
- the XML based form definition files utilized by GNUe Forms:
- Client.
  
! During development this document will serve as both a guide
! to the design of the GNUE Forms system and as a users guide.
  
   Features
  
! To facilitate the development of data entry screens GNUE
! Forms supports the following features
  
  
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  | Data-Aware Widgets   | Ties user interface widgets directly to underling 
data sources.                                                                   
                                                                                
                  |
--- 1,35 ----
  GNU Entrprise - GNUe Forms
  Technical Reference
  
! This is version 0.1.5 of the Technical Reference it 
! covers GNUe Forms 0.1.0
  
! The current copy is maintained as a LyX 1.1.6 file. If 
! anyone knows of ways to get LyX to play nicer with 
! regard to code samples please let us know. 
  
! This document is covered by the GNU Free Documentation 
! License Version 1.1
  
  
  
! Introduction
! 
! GNUE Forms aims to be the primary user interface to the 
! GNU Enterprise system. It is comprised of two systems. 
! GNUe Forms is responsible for displaying output and 
! accepting user input. GNUe Designer allows a developer 
! to produce the XML based form definition files utilized 
! by GNUe Forms: Client.
! 
! During development this document will serve as both a 
! guide to the design of the GNUE Forms system and as a 
! users guide.
  
   Features
  
! To facilitate the development of data entry screens 
! GNUE Forms supports the following features
  
  
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  | Data-Aware Widgets   | Ties user interface widgets directly to underling 
data sources.                                                                   
                                                                                
                  |
***************
*** 43,90 ****
  
   Design Overview
  
! GNUE Forms approaches the user interface differently than
! many applications. In GNUE Forms the user interface exists
! as two separate pieces. The first is a virtual form that
! exists in memory and reflects the structure and state of
! the user interface. The second is a slave hierarchy of widgets
! which are created by a UI driver to represent that specific
! driver's interpretation of the user interface describe by
! the first structure. An event mechanism allows the two separate
! pieces to communicate. The GNUE Forms tools will attempt
! to hide most of this separation of logic and UI from the
! application user and developer during typical usage.
  
   Virtual Form
  
! All the actual logic of the form is carried out in the virtual
! form and reflected by the UI driver. The UI driver passes
! requests back to the virtual form when the user requests
! that something be changed.
  
   UI System
  
! The widget hierarchy is the visible portion of an GNUE Forms
! application. Basically it's comprised of the various buttons,
! fields, menus, pictures, etc that are needed to build the
! user interface that manipulates the logical hierarchy to
! produce desired results. The user interface visible to the
! user isn't allowed to manipulate any data within the form
! and instead must pass requests back to the virtual form
! for processing.
  
   Logical Focus
  
! One major difference in GNUE Forms applications vs typical
! widget based applications is in regard to focus. Focus in
! an GNUE Forms application typically occurs at the logical
! hierarchy level and is then reflected in the UI.
! 
! Focus also follows the logical hierarchy of an application.
! Thus if focus currently resides in Block1.Field1 of an application
! and the user presses the Next Field key the focus of the
! application changes as follows assuming all triggers return
! successfully.
  
  Block1.Field1 Pre-Focus-Out Trigger fires if defined
  
--- 44,94 ----
  
   Design Overview
  
! GNUE Forms approaches the user interface differently 
! than many applications. In GNUE Forms the user 
! interface exists as two separate pieces. The first is a 
! virtual form that exists in memory and reflects the 
! structure and state of the user interface. The second 
! is a slave hierarchy of widgets which are created by a 
! UI driver to represent that specific driver's 
! interpretation of the user interface describe by the 
! first structure. An event mechanism allows the two 
! separate pieces to communicate. The GNUE Forms tools 
! will attempt to hide most of this separation of logic 
! and UI from the application user and developer during 
! typical usage.
  
   Virtual Form
  
! All the actual logic of the form is carried out in the 
! virtual form and reflected by the UI driver. The UI 
! driver passes requests back to the virtual form when 
! the user requests that something be changed.
  
   UI System
  
! The widget hierarchy is the visible portion of an GNUE 
! Forms application. Basically it's comprised of the 
! various buttons, fields, menus, pictures, etc that are 
! needed to build the user interface that manipulates the 
! logical hierarchy to produce desired results. The user 
! interface visible to the user isn't allowed to 
! manipulate any data within the form and instead must 
! pass requests back to the virtual form for processing.
  
   Logical Focus
  
! One major difference in GNUE Forms applications vs 
! typical widget based applications is in regard to 
! focus. Focus in an GNUE Forms application typically 
! occurs at the logical hierarchy level and is then 
! reflected in the UI.
! 
! Focus also follows the logical hierarchy of an 
! application. Thus if focus currently resides in 
! Block1.Field1 of an application and the user presses 
! the Next Field key the focus of the application changes 
! as follows assuming all triggers return successfully.
  
  Block1.Field1 Pre-Focus-Out Trigger fires if defined
  
***************
*** 116,137 ****
  
   Page
  
! The page object, when seen by a UI driver, suggests a visual
! separation of the UI is needed. However it is up the the
! UI driver to determine what, if any, type of visual separation
! is provided. Currently all UI drivers break these forms
! into actual pages. However nothing prevents the driver from
! using a notebook widget for separation or ignoring it altogether.
  
   Block
  
! Blocks provide a way to logically group form objects in memory
! and provide navigation logic to the form. It is always linked
! to a datasource (described below) to provide persistence
! to the entry objects it contains. Blocks that are not associated
! with a datasource by the form definition file have a non-persistent
! datasource created for them automatically. If information
! within such blocks requires saving it is up to the application
  developer to implement persistence via the Trigger system.
  
   Label
--- 120,143 ----
  
   Page
  
! The page object, when seen by a UI driver, suggests a 
! visual separation of the UI is needed. However it is up 
! the the UI driver to determine what, if any, type of 
! visual separation is provided. Currently all UI drivers 
! break these forms into actual pages. However nothing 
! prevents the driver from using a notebook widget for 
! separation or ignoring it altogether.
  
   Block
  
! Blocks provide a way to logically group form objects in 
! memory and provide navigation logic to the form. It is 
! always linked to a datasource (described below) to 
! provide persistence to the entry objects it contains. 
! Blocks that are not associated with a datasource by the 
! form definition file have a non-persistent datasource 
! created for them automatically. If information within 
! such blocks requires saving it is up to the application 
  developer to implement persistence via the Trigger system.
  
   Label
***************
*** 140,337 ****
  
   Entry
  
! Entry objects are the point at which information enters the
! system. They are mapped on a one-to-one basis with the fields
! contained within the datsource associated with the entry
! object's parent block. However it is possible to create
! entry object that does not map to any field in the datasource.
! When this happens a non persistant field is created in the
! datasource automatically. This is usefull for displaying
! information that is computed at run time. However this information
! will not be saved upon application exit.
  
   Button
  
! The button object allows you to place interactive spots on
! your form that when activated will fire a named trigger.
  
   Box
  
! The box object, when seen by a UI driver, suggests a border
! of some type is needed on the UI. However it is up the the
! UI driver to determine what, if any, type of border is provided. 
  
   Database
  
! Database objects provide the authenticated link to a specific
! data storage system. Various providers have been written
! to allow GNUE Forms to access different backends. A provider
! will provide the linkage to the GEAS system when it is completed.
! In fact it should be possible to write providers to access
! data from any external source of information as long as
! the provider presents its information in a record/field
! format.
  
   Datasource
  
! A datasource contains records and fields of information currently
! loaded into an active form. Typically it is linked to a
! defined database and associates itself with a specific source,
! like a table, in that database. However it is possible to
! have datasources that have no database link defined. These
! types of datasources cannot provide persistance to the information
! stored within themself.
  
   Master/Detail Relationships
  
! Datasources can also be associated with other datasoure in
! what we call a Master/Detail relationship. A master datasource
! has one or more detail datasources associated with itself.
! These detail datasources contain a foreign key which points
! back to a specific master datasource/field key. When navigation
! to a different record in the master datasource takes place
! all detail datasources auto navigate to the matching records
! within themselves to maintain integrity of the data being
! displayed. It's worth noting that a datasource can be both
! a detail and master datasource simultaneously.
  
   Record Caching/Prefetch
  
! In an effort to improve system performance datasources will
! eventually be able to be configured to cache records in
! memory. The application developer will have control over
! the number of records cached to allow them to balance memory
! usage vs system responsiveness. Currently the cache system
! in GNUe is, in reality, a pre-fetch system. When large numbers
! of records are requested from the database the system will
! fetch only the user-specified "cache
! amount" at a time. When the user moves beyond the
! number of records in memory, the system will automatically
! fetch another group of records. This allows the system to
! respond rapidly to user requests involving large number
! of records. 
  
   Triggers
  
! Triggers contain scripts of code that execute during specific
! events which "fire" the triggers. They can be attached to
! any of the components of the virtual form though some trigger
! events may not pertain to the component and, as such, will
! never fire.
! 
! Not implemented yet: Triggers normally return a True value
! upon sucessful completion. It is possible for the trigger
! script to return True or False values to influence the applications
! behaviour.
  
   Trigger Languages
  
! Currently, trigger scripts must be written in python. We
! would like to increase the number of supported languages
! as time permits.
  
   Trigger Events
  
! The following triggers are either implemented or planned
! for implementation in the GNUe Forms system. Unless specifically
! mentioned the return value of the script will not effect
! the application in any way.
  
! Note: The ability to return true false values is not yet
! implemented in GNUE Forms.
  
   Implemented
  
! Entry 
  
!  Pre-FocusOut - Fires prior to a component losing focus.
!   If the return value of the script is False then the focus
!   will not be switched.
  
!  Post-FocusOut - Fires after focus leaves a component but
!   prior to new component taking focus.
  
!  Pre-FocusIn - Fires prior to a component recieving focus. 
  
   Post-FocusIn - Fires after a component recieves focus.
  
! Block 
  
!  Pre-FocusOut - Fires prior to a component losing focus.
!   If the return value of the script is False then the focus
!   will not be switched.
  
!  Post-FocusOut - Fires after focus leaves a component but
!   prior to new component taking focus.
  
!  Pre-FocusIn - Fires prior to a component recieving focus. 
  
   Post-FocusIn - Fires after a component recieves focus. 
  
!  Pre-Commit - Fires once, for each record in the block marked
!   as either "new", "updated",
!   or "deleted", prior to commiting the
!   record into persistant storage. In the future, if the
!   return value of the script is False then the commit will
!   be aborted.
! 
!  Pre-Insert - Fires once, for each record in the block marked
!   as "new", and commiting the record into
!   persistant storage. In the future, if the return value
!   of the script is False then the commit will be aborted.
!   This event is called prior to the pre-commit event.
! 
!  Pre-Update - Fires once, for each record in the block marked
!   as "updated", prior to updating and
!   commiting the record into persistant storage. In the future,
!   if the return value of the script is False then the commit
!   will be aborted. This event is called prior to the pre-commit
!   event.
! 
!  Pre-Delete - Fires once, for each record in the block marked
!   as "deleted", prior to deleting and
!   commiting the record into persistant storage. In the future,
!   if the return value of the script is False then the commit
!   will be aborted. This event is called prior to the pre-commit
!   event.
  
   Post-Commit - Fires after data has been commited.
  
! Page 
  
!  Pre-FocusOut - Fires prior to a component losing focus.
!   If the return value of the script is False then the focus
!   will not be switched. 
  
!  Post-FocusOut - Fires after focus leaves a component but
!   prior to new component taking focus. 
  
!  Pre-FocusIn - Fires prior to a component recieving focus. 
  
   Post-FocusIn - Fires after a component recieves focus.
  
! Form 
  
!  Pre-Commit- Fires prior to commiting data into persistant
!   storage. If the return value of the script is False then
!   the commit will be aborted. 
  
   Post-Commit - Fires after data has been commited.
  
   Not Implemented
  
! Pre-Change - Fires prior to a change to an component. 
! If the return value of the script is False then the change
! will be aborted.
  
! Post-Change Fires after a change to an component.
  
! On-newrecord Fires whenever a new record is created.
  
   Example of Logical Hierarchy
  
! A visual representation of how these items fit together is
! in order. 
  
  Here is a simple data entry form:
  
--- 146,350 ----
  
   Entry
  
! Entry objects are the point at which information enters 
! the system. They are mapped on a one-to-one basis with 
! the fields contained within the datsource associated 
! with the entry object's parent block. However it is 
! possible to create entry object that does not map to 
! any field in the datasource. When this happens a non 
! persistant field is created in the datasource 
! automatically. This is usefull for displaying 
! information that is computed at run time. However this 
! information will not be saved upon application exit.
  
   Button
  
! The button object allows you to place interactive spots 
! on your form that when activated will fire a named trigger.
  
   Box
  
! The box object, when seen by a UI driver, suggests a 
! border of some type is needed on the UI. However it is 
! up the the UI driver to determine what, if any, type of 
! border is provided. 
  
   Database
  
! Database objects provide the authenticated link to a 
! specific data storage system. Various providers have 
! been written to allow GNUE Forms to access different 
! backends. A provider will provide the linkage to the 
! GEAS system when it is completed. In fact it should be 
! possible to write providers to access data from any 
! external source of information as long as the provider 
! presents its information in a record/field format.
  
   Datasource
  
! A datasource contains records and fields of information 
! currently loaded into an active form. Typically it is 
! linked to a defined database and associates itself with 
! a specific source, like a table, in that database. 
! However it is possible to have datasources that have no 
! database link defined. These types of datasources 
! cannot provide persistance to the information stored 
! within themself.
  
   Master/Detail Relationships
  
! Datasources can also be associated with other datasoure 
! in what we call a Master/Detail relationship. A master 
! datasource has one or more detail datasources 
! associated with itself. These detail datasources 
! contain a foreign key which points back to a specific 
! master datasource/field key. When navigation to a 
! different record in the master datasource takes place 
! all detail datasources auto navigate to the matching 
! records within themselves to maintain integrity of the 
! data being displayed. It's worth noting that a 
! datasource can be both a detail and master datasource 
! simultaneously.
  
   Record Caching/Prefetch
  
! In an effort to improve system performance datasources 
! will eventually be able to be configured to cache 
! records in memory. The application developer will have 
! control over the number of records cached to allow them 
! to balance memory usage vs system responsiveness. 
! Currently the cache system in GNUe is, in reality, a 
! pre-fetch system. When large numbers of records are 
! requested from the database the system will fetch only 
! the user-specified "cache amount" at a time. When the 
! user moves beyond the number of records in memory, the 
! system will automatically fetch another group of 
! records. This allows the system to respond rapidly to 
! user requests involving large number of records. 
  
   Triggers
  
! Triggers contain scripts of code that execute during 
! specific events which "fire" the triggers. They can be 
! attached to any of the components of the virtual form 
! though some trigger events may not pertain to the 
! component and, as such, will never fire.
! 
! Not implemented yet: Triggers normally return a True 
! value upon sucessful completion. It is possible for the 
! trigger script to return True or False values to 
! influence the applications behaviour.
  
   Trigger Languages
  
! Currently, trigger scripts must be written in python. 
! We would like to increase the number of supported 
! languages as time permits.
  
   Trigger Events
  
! The following triggers are either implemented or 
! planned for implementation in the GNUe Forms system. 
! Unless specifically mentioned the return value of the 
! script will not effect the application in any way.
  
! Note: The ability to return true false values is not 
! yet implemented in GNUE Forms.
  
   Implemented
  
!   Entry 
  
!  Pre-FocusOut - Fires prior to a component losing 
!   focus. If the return value of the script is False 
!   then the focus will not be switched.
  
!  Post-FocusOut - Fires after focus leaves a component 
!   but prior to new component taking focus.
  
!  Pre-FocusIn - Fires prior to a component recieving 
!   focus. 
  
   Post-FocusIn - Fires after a component recieves focus.
  
!   Block 
  
!  Pre-FocusOut - Fires prior to a component losing 
!   focus. If the return value of the script is False 
!   then the focus will not be switched.
  
!  Post-FocusOut - Fires after focus leaves a component 
!   but prior to new component taking focus.
  
!  Pre-FocusIn - Fires prior to a component recieving 
!   focus. 
  
   Post-FocusIn - Fires after a component recieves focus. 
  
!  Pre-Commit - Fires once, for each record in the block 
!   marked as either "new", "updated", or "deleted", prior to 
!   commiting the record into persistant storage. In the 
!   future, if the return value of the script is False 
!   then the commit will be aborted.
! 
!  Pre-Insert - Fires once, for each record in the block 
!   marked as "new", and commiting the record into 
!   persistant storage. In the future, if the return 
!   value of the script is False then the commit will be 
!   aborted. This event is called prior to the pre-commit event.
! 
!  Pre-Update - Fires once, for each record in the block 
!   marked as "updated", prior to updating and commiting 
!   the record into persistant storage. In the future, if 
!   the return value of the script is False then the 
!   commit will be aborted. This event is called prior to 
!   the pre-commit event.
! 
!  Pre-Delete - Fires once, for each record in the block 
!   marked as "deleted", prior to deleting and commiting 
!   the record into persistant storage. In the future, if 
!   the return value of the script is False then the 
!   commit will be aborted. This event is called prior to 
!   the pre-commit event.
  
   Post-Commit - Fires after data has been commited.
  
!   Page 
  
!  Pre-FocusOut - Fires prior to a component losing 
!   focus. If the return value of the script is False 
!   then the focus will not be switched. 
  
!  Post-FocusOut - Fires after focus leaves a component 
!   but prior to new component taking focus. 
  
!  Pre-FocusIn - Fires prior to a component recieving 
!   focus. 
  
   Post-FocusIn - Fires after a component recieves focus.
  
!   Form 
  
!  Pre-Commit- Fires prior to commiting data into 
!   persistant storage. If the return value of the script 
!   is False then the commit will be aborted. 
  
   Post-Commit - Fires after data has been commited.
  
   Not Implemented
  
! Pre-Change - Fires prior to a change to an component.  
! If the return value of the script is False then the 
! change will be aborted.
  
!   Post-Change Fires after a change to an component.
  
!   On-newrecord Fires whenever a new record is created.
  
   Example of Logical Hierarchy
  
! A visual representation of how these items fit together 
! is in order. 
  
  Here is a simple data entry form:
  
***************
*** 381,445 ****
  
  UI System
  
! The user interface in GNUe Forms is generated from the defined
! virutal form. Thus the form designer doesn't need to concern
! themself with the features of a specific widget set. Instead
! the form designer describes the form's function and a UI
! driver chooses the appropriate method of displaying that
! form based on the client's capabilities. However, this doesn't
! mean that the form designer has no control over how their
  form looks.
  
   Widget Coordinates
  
! The coordinate/layout system for widget in GNUE Forms needs
! to be able to deal with text based displays as well as GUI
! systems. Thus sizes and coordinates for widgets will need
! to be specified in character coordinates. Exceptions to
! this will include widgets that display pictures. Support
! for grid style coordinates will be first then we will look
! at layout managers that provide relative positioning similar
! to X/Java as well as character coordinates like curses.
  
  GNUE Forms: Client
  
   Basic Concepts
  
! GNUE Forms clients read form definitions from XML based .gfd
! files. The client reads in a form definition file which
! describes the virutal form. The client then generates a
! data entry form based upon this information, initializes
! the user interface, then begins to accept user input. It
! is up to the client to determine the best method of mapping
! user interface widgets within it's technological limitations.
! Thus each client may make compromises based upon what it
! is and is not capable of performing. For instance, a client
! written to display forms via a web browser using plain HTML
! would be incapable doing input validation at run time. It
! could however elect to perform the validation prior to submitting
! the data back to persistant storage. Since some user interfaces
! require certain features to be present to be useful the
! form definition language allows the developer to tag required
! features. A client that is incapable of supporting the features
! can gracefully abort the session.
! 
! Any application that can read and execute a .gfd file is
! in effect a GNUE Forms client. It should be possible to
! write clients for a varity of platforms and input/output
! devices.If a client meets the interface requirements set
! forth in this document and can provide the necessary basic
! features then all GNU Enterprise programs and screens should
! run without modification.
! 
! The remainder of this chapter covers the reference implementation
! of the GNUe Forms client which has been written in python.
  
   UI Drivers
  
! UI drivers are responsible for interacting with the user
! and passing user input back as requests to the virtual form.
! The following user interface drivers are available in the
! reference client.
  
  
+----------+---------------------------------------------------------------------------------------------+
  | UI Type  | Descrption                                                       
                           |
--- 394,463 ----
  
  UI System
  
! The user interface in GNUe Forms is generated from the 
! defined virutal form. Thus the form designer doesn't 
! need to concern themself with the features of a 
! specific widget set. Instead the form designer 
! describes the form's function and a UI driver chooses 
! the appropriate method of displaying that form based on 
! the client's capabilities. However, this doesn't mean 
! that the form designer has no control over how their 
  form looks.
  
   Widget Coordinates
  
! The coordinate/layout system for widget in GNUE Forms 
! needs to be able to deal with text based displays as 
! well as GUI systems. Thus sizes and coordinates for 
! widgets will need to be specified in character 
! coordinates. Exceptions to this will include widgets 
! that display pictures. Support for grid style 
! coordinates will be first then we will look at layout 
! managers that provide relative positioning similar to 
! X/Java as well as character coordinates like curses.
  
  GNUE Forms: Client
  
   Basic Concepts
  
! GNUE Forms clients read form definitions from XML based 
! .gfd files. The client reads in a form definition file 
! which describes the virutal form. The client then 
! generates a data entry form based upon this 
! information, initializes the user interface, then 
! begins to accept user input. It is up to the client to 
! determine the best method of mapping user interface 
! widgets within it's technological limitations. Thus 
! each client may make compromises based upon what it is 
! and is not capable of performing. For instance, a 
! client written to display forms via a web browser using 
! plain HTML would be incapable doing input validation at 
! run time. It could however elect to perform the 
! validation prior to submitting the data back to 
! persistant storage. Since some user interfaces require 
! certain features to be present to be useful the form 
! definition language allows the developer to tag 
! required features. A client that is incapable of 
! supporting the features can gracefully abort the session.
! 
! Any application that can read and execute a .gfd file 
! is in effect a GNUE Forms client. It should be possible 
! to write clients for a varity of platforms and 
! input/output devices.If a client meets the interface 
! requirements set forth in this document and can provide 
! the necessary basic features then all GNU Enterprise 
! programs and screens should run without modification.
! 
! The remainder of this chapter covers the reference 
! implementation of the GNUe Forms client which has been 
! written in python.
  
   UI Drivers
  
! UI drivers are responsible for interacting with the 
! user and passing user input back as requests to the 
! virtual form. The following user interface drivers are 
! available in the reference client.
  
  
+----------+---------------------------------------------------------------------------------------------+
  | UI Type  | Descrption                                                       
                           |
***************
*** 460,467 ****
  Running the client is rather simple. In it's most basic form
  
  gfclient formname.gfd
! The formname.gfd can be in the form of a normal file or a
! URL such as a web address
  
  To get a list of available options
  
--- 478,485 ----
  Running the client is rather simple. In it's most basic form
  
  gfclient formname.gfd
! The formname.gfd can be in the form of a normal file or 
! a URL such as a web address
  
  To get a list of available options
  
***************
*** 470,483 ****
  
   Symlinks
  
! gfclient also supports the use of symlinks to simplify execution
! of forms. The easiest way to describe this is by example.
! 
! If you have a form called contacts.gfd in the default location
! (specified in GFOptions.py). Then by placing into your path
! a symbolic link called contacts which points to the gfclient
! executable you will be able to execute the file by simply
! typing contacts.
  
  bash-2.03$ ln -s /usr/local/bin/gfclient /usr/local/bin/contacts
  bash-2.03$ contacts
--- 488,502 ----
  
   Symlinks
  
! gfclient also supports the use of symlinks to simplify 
! execution of forms. The easiest way to describe this is 
! by example.
! 
! If you have a form called contacts.gfd in the default 
! location (specified in GFOptions.py). Then by placing 
! into your path a symbolic link called contacts which 
! points to the gfclient executable you will be able to 
! execute the file by simply typing contacts.
  
  bash-2.03$ ln -s /usr/local/bin/gfclient /usr/local/bin/contacts
  bash-2.03$ contacts
***************
*** 485,492 ****
  
  GFD Structure
  
! Forms are described via a .gfd file. A GFD file always contains
! the following structure
  
   XML version
  
--- 504,511 ----
  
  GFD Structure
  
! Forms are described via a .gfd file. A GFD file always 
! contains the following structure
  
   XML version
  
***************
*** 532,539 ****
  
   Example
  
! <form title="My Form" width="40"
! height="40">
  
  Rest of form logic goes here
  
--- 551,557 ----
  
   Example
  
! <form title="My Form" width="40" height="40">
  
  Rest of form logic goes here
  
***************
*** 590,609 ****
  
   Example
  
! <block name="cities" datasource="city" master="state.st_code"
! detail="state">
  
  label and entry objects that are part of this block go here
  
  </block>
  
! The cities block defined in the above example is a detail
! block. It is linked to a datasource named city and it keeps
! the data displayed within itself in sync with the block
! named state. It does this by monitoring the entry named
! st_code in the state block, when that data changes it sets
! the entry within itself named state to match the value stored
! in st_code as querying data from the datasource.
  
   <label>
  
--- 608,628 ----
  
   Example
  
! <block name="cities" datasource="city" 
! master="state.st_code" detail="state">
  
  label and entry objects that are part of this block go here
  
  </block>
  
! The cities block defined in the above example is a 
! detail block. It is linked to a datasource named city 
! and it keeps the data displayed within itself in sync 
! with the block named state. It does this by monitoring 
! the entry named st_code in the state block, when that 
! data changes it sets the entry within itself named 
! state to match the value stored in st_code as querying 
! data from the datasource.
  
   <label>
  
***************
*** 613,619 ****
  | Attribute  | Datatype  | Default  | Description                             
                                                                                
                   |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------+
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------+
! |     x      |   int     |  none    | The text column starting position of 
the widget . Based upon leftmost column of screen being 0.                      
                      |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------+
  |     y      |   int     |  none    | The text row starting position of the 
widget. Based upon the top row of the screen being 0.                           
                     |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------+
--- 632,638 ----
  | Attribute  | Datatype  | Default  | Description                             
                                                                                
                   |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------+
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------+
! |     x      |   int     |  none    | The text column starting position of 
the widget . Based upon leftmost column of screen being  0.                     
                      |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------+
  |     y      |   int     |  none    | The text row starting position of the 
widget. Based upon the top row of the screen being 0.                           
                     |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------+
***************
*** 675,681 ****
  
+--------------------------+-----------+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  | foreign_key_descritpion  |  string   |          none            | The 
description used if a style of dropdown is selected. This fields value is 
displayed in the dropdown but the foreign_key value is actually stored in the 
field. This allows you to display something like the full name of a US state 
but only store it's 2 character abrievation. |
  
+--------------------------+-----------+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
! |          style           |  string   |          text            | The style 
of entry widget requested. Currently either text, label, checkbox, or dropdown. 
To use dropdown you are required to use both the foreign_key and 
foreign_key_descriptions attributes. The "label" style implies the readonly 
attribute.                                     |
  
+--------------------------+-----------+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  |         default          |  string   |          none            | The 
default value for any new records created. If the field is visible the user can 
override the value.                                                             
                                                                                
                                  |
  
+--------------------------+-----------+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
--- 694,700 ----
  
+--------------------------+-----------+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  | foreign_key_descritpion  |  string   |          none            | The 
description used if a style of dropdown is selected. This fields value is 
displayed in the dropdown but the foreign_key value is actually stored in the 
field. This allows you to display something like the full name of a US state 
but only store it's 2 character abrievation. |
  
+--------------------------+-----------+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
! |          style           |  string   |          text            | The style 
of entry widget requested. Currently either text, label, checkbox, or dropdown. 
To use dropdown you are required to use both the foreign_key and 
foreign_key_descriptions attributes. The ""label style implies the readonly 
attribute.                                     |
  
+--------------------------+-----------+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  |         default          |  string   |          none            | The 
default value for any new records created. If the field is visible the user can 
override the value.                                                             
                                                                                
                                  |
  
+--------------------------+-----------+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
***************
*** 701,711 ****
  
  A more complex example
  
! <entry name="state" field="state_code" x="17" y="2" width="15"
! visibleCount="15" uppercase="" 
  
! foreign_key="validator.state" foreign_key_description="description"
! style="dropdown">
  
   <button>
  
--- 720,730 ----
  
  A more complex example
  
! <entry name="state" field="state_code" x="17" y="2" 
! width="15" visibleCount="15" uppercase="" 
  
! foreign_key="validator.state" 
! foreign_key_description="description" style="dropdown">
  
   <button>
  
***************
*** 733,740 ****
  
   Example
  
! <button label="Press Me" x="1" y="1" width="10" height="1"
! trigger="HelloWorld"/>
  
   <box>
  
--- 752,759 ----
  
   Example
  
! <button label="Press Me" x="1" y="1" width="10" 
! height="1" trigger="HelloWorld"/>
  
   <box>
  
***************
*** 744,750 ****
  | Attribute  | Datatype  | Default  | Description                             
                                                         |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
! |     x      |   int     |  none    | The text column starting position of 
the widget . Based upon leftmost column of screen being 0.  |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
  |     y      |   int     |  none    | The text row starting position of the 
widget. Based upon the top row of the screen being 0.      |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
--- 763,769 ----
  | Attribute  | Datatype  | Default  | Description                             
                                                         |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
! |     x      |   int     |  none    | The text column starting position of 
the widget . Based upon leftmost column of screen being  0. |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
  |     y      |   int     |  none    | The text row starting position of the 
widget. Based upon the top row of the screen being 0.      |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
***************
*** 762,769 ****
  
   <scrollbar>
  
! Only partially implemented at this time. Will show on form
! but do nothing.
  
   Attributes
  
--- 781,788 ----
  
   <scrollbar>
  
! Only partially implemented at this time. Will show on 
! form but do nothing.
  
   Attributes
  
***************
*** 771,777 ****
  | Attribute  | Datatype  | Default  | Description                             
                                                         |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
! |     x      |   int     |  none    | The text column starting position of 
the widget . Based upon leftmost column of screen being 0.  |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
  |     y      |   int     |  none    | The text row starting position of the 
widget. Based upon the top row of the screen being 0.      |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
--- 790,796 ----
  | Attribute  | Datatype  | Default  | Description                             
                                                         |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
! |     x      |   int     |  none    | The text column starting position of 
the widget . Based upon leftmost column of screen being  0. |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
  |     y      |   int     |  none    | The text row starting position of the 
widget. Based upon the top row of the screen being 0.      |
  
+------------+-----------+----------+--------------------------------------------------------------------------------------------------+
***************
*** 809,816 ****
  
   Example
  
! <datasource name="customers" database="gnue" table="customer"
! order_by="name_last,name_first" prequery="" />
  
   <trigger>
  
--- 828,836 ----
  
   Example
  
! <datasource name="customers" database="gnue" 
! table="customer" order_by="name_last,name_first" 
! prequery="" />
  
   <trigger>
  
***************
*** 858,863 ****
--- 878,927 ----
  
  # import sys 
  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
  
blckPOItem.fields.ntryAmount=str(int(blckPOItem.fields.ntryQuantity)*float(blckPOItem.fields.ntryUnitPrice))
 
  
  </trigger>
***************
*** 878,908 ****
  
   Overview
  
! Forms supports libraries of common objects. There are two
! approaches to importing data in forms: 1) importing form-wide
! objects such as named triggers, pages, and datasources;
! and 2) importing individual objects, such as blocks, entries,
! triggers, pages, and datasources. Note that the first method
! works only for form-level objects, whereas the second method
! works for any "namable"
! form object (including namable form-level objects). 
! 
! There is no markup difference between a form library and
! a form definition. Forms can pull objects from other forms
! just as easily as from a library. For convenience, form
! definitions that are only used as libraries use the .gfl
! extension. 
! 
! All child objects of an imported item are imported as well.
! For example, when importing a page, all blocks, labels,
! etc. belowing to that page are imported as well.
  
   Importing Form-Level Objects
  
   Summary
  
! The first method of importing uses the <import> tag. The
! import tag takes four attributes: 
  
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
  |  Attribute   | Datatype  | Default  | Description                           
                                                                                
                       |
--- 942,972 ----
  
   Overview
  
! Forms supports libraries of common objects. There are 
! two approaches to importing data in forms: 1) importing 
! form-wide objects such as named triggers, pages, and 
! datasources; and 2) importing individual objects, such 
! as blocks, entries, triggers, pages, and datasources. 
! Note that the first method works only for form-level 
! objects, whereas the second method works for any "namable"
!  form object (including namable form-level objects). 
! 
! There is no markup difference between a form library 
! and a form definition. Forms can pull objects from 
! other forms just as easily as from a library. For 
! convenience, form definitions that are only used as 
! libraries use the .gfl extension. 
! 
! All child objects of an imported item are imported as 
! well. For example, when importing a page, all blocks, 
! labels, etc. belowing to that page are imported as well.
  
   Importing Form-Level Objects
  
   Summary
  
! The first method of importing uses the <import> tag. 
! The import tag takes four attributes: 
  
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
  |  Attribute   | Datatype  | Default  | Description                           
                                                                                
                       |
***************
*** 910,968 ****
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
  |   library    |  string   |  none    | The URL or file name of the form or 
library to pull the imported data from.                                         
                         |
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
! | datasources  |  string   |  none    | Specifies a comma separated list of 
datasources by name to import. If set to "*", then loads all datasources from 
the library.               |
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
! |  triggers    |  string   |  none    | Specifies a comma separated list of 
named triggers by id to import. If set to "*", then loads all named triggers 
from the library.           |
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
! |    pages     |  string   |  none    | Specifies a comma separated list of 
names of pages to import. If set to "*", then loads all pages INCLUDING unnamed 
pages from the library.  |
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
  
  
   Example
  
  Import all datasources and the pages identified as "page1"
! and "page2": 
  
! <import library="mylibrary.gfl"
! datasources="*" pages="page1,page2"/>
  
   Importing Individual Objects
  
   Summary
  
! The second method of importing involves importing named objects.
! The currently importable objects are: datasource, page,
! block, trigger, button, and entry. 
! 
! The tag for importing these objects is the <import-[object]>
! tag, where [object] is the type of object being imported.
! For example, the tag for importing blocks is <import-block>. 
! 
! All <import-[object]> style tags take a minimum of two tags,
! location and name, plus any tags available to the imported
! tag. Location works the same as in the above table for form-level
! objects.
! 
! Any of these extra tags override the values of the imported
! tag. For example, the datasource tag supports the database
! tag. Therefore, the import-datasource tag also supports
! the database tag. If database is specified on the import-datasource
! tag, then this value overrides the value set in the library
! file. This is especially useful for master-detail datasources
! as a common detail block can be defined in a library, but
  the master datasource may be different in each form.
  
   Example
  
  Import a datasource: 
  
! <import-datasource location="mylibrary.gfl"
! name="dszipcodes"/>
  
  Import an entry, overriding the bounded field: 
  
! <import-entry location="mylibrary.gfl"
! name="zipentry" field="zipfield2"/>
  
   Complete Example
  
--- 974,1032 ----
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
  |   library    |  string   |  none    | The URL or file name of the form or 
library to pull the imported data from.                                         
                         |
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
! | datasources  |  string   |  none    | Specifies a comma separated list of 
datasources by name to import. If set to ""*, then loads all datasources from 
the library.               |
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
! |  triggers    |  string   |  none    | Specifies a comma separated list of 
named triggers by id to import. If set to ""*, then loads all named triggers 
from the library.           |
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
! |    pages     |  string   |  none    | Specifies a comma separated list of 
names of pages to import. If set to ""*, then loads all pages INCLUDING unnamed 
pages from the library.  |
  
+--------------+-----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+
  
  
   Example
  
  Import all datasources and the pages identified as "page1"
!  and "page2": 
  
! <import library="mylibrary.gfl" datasources="*" pages="page1,page2"/>
  
   Importing Individual Objects
  
   Summary
  
! The second method of importing involves importing named 
! objects. The currently importable objects are: 
! datasource, page, block, trigger, button, and entry. 
! 
! The tag for importing these objects is the 
! <import-[object]> tag, where [object] is the type of 
! object being imported. For example, the tag for 
! importing blocks is <import-block>. 
! 
! All <import-[object]> style tags take a minimum of two 
! tags, location and name, plus any tags available to the 
! imported tag. Location works the same as in the above 
! table for form-level objects.
! 
! Any of these extra tags override the values of the 
! imported tag. For example, the datasource tag supports 
! the database tag. Therefore, the import-datasource tag 
! also supports the database tag. If database is 
! specified on the import-datasource tag, then this value 
! overrides the value set in the library file. This is 
! especially useful for master-detail datasources as a 
! common detail block can be defined in a library, but 
  the master datasource may be different in each form.
  
   Example
  
  Import a datasource: 
  
! <import-datasource location="mylibrary.gfl" name="dszipcodes"/>
  
  Import an entry, overriding the bounded field: 
  
! <import-entry location="mylibrary.gfl" name="zipentry" field="
! zipfield2"/>
  
   Complete Example
  
***************
*** 983,990 ****
  
    </options>
  
!   <datasource name="country" database="gnue" table="country"
! order_by="country"/> 
  
    <page> 
  
--- 1047,1054 ----
  
    </options>
  
!   <datasource name="country" database="gnue" 
! table="country" order_by="country"/> 
  
    <page> 
  
***************
*** 992,1004 ****
  
        <label text="Country" x="1" y="1"/> 
  
!       <entry name="country" field="country"
! x="1" y="2" width="50" visibleCount="10" uppercase="" max_length="50"> 
  
          <options> 
  
!           <tip>The
! name of the country</tip> 
  
          </options> 
  
--- 1056,1068 ----
  
        <label text="Country" x="1" y="1"/> 
  
!       <entry name="country" field="country" x="1" y="2" 
! width="50" visibleCount="10" uppercase="" 
! max_length="50"> 
  
          <options> 
  
!           <tip>The name of the country</tip> 
  
          </options> 
  
***************
*** 1012,1070 ****
  
  Dealing with Technological Limitations
  
! The design goals of GNUE Forms places some unique constraints
! upon the client applications. A form developer does not
! necessarily know the type technology that will be used to
! interact with his form.
! 
! It is quite possible that a form originally designed to run
! on a blazing fast workstation with a 21" color monitor could
! end up being utilized on a text only amber terminal. 
! 
! While GNUE Form client developers are encouraged to support
! as many widgets as is possible on their target technology. 
! We understand that some technology cannot physically accommodate
! every widget supported by GNUE Forms.
  
  We deal with this in following ways
  
   Best Judgment
  
! Client developers are given a lot of flexibility in implementing
! GNUE Forms clients. A client developer can decide that implementing
! a specific feature in a limited fashion is better than not
! implementing it at all.
! 
! An example of this would be in dealing with run time validation
! of input on the client side.
! 
! While the GTK based client developers would have no issues
! with implementing this feature, it would be impossible for
! an HTML-only browser based client written in PHP. The HTML
! client developers could realisticly claim that users of
! the browser are aware of the limitations of HTML form inputs.
! These users are willing to accept the loss of real time
! validation for the convenience of using a browser as their
! input device. The developers could design the client to
! perform the input validation upon submission of the form
! containing user data. 
! 
! Widgets that would be impossible to implement could simply
! be ignored. Thus if a form displayed a picture of an employee
! on his personal information screen, a text based client
! could simply choose to ignore the picture.
  
   Form Requirements
  
! Sometimes the omission of the data in the form might render
! a form useless. The loss of the ability to display the employee's
! picture in the above example might not be critical. However,
! a form whose sole purpose is to display scanned images would
! be worthless on a text only client.
! 
! Form designer have the ability to tag certain features as
! critical to the forms ability to operate. When a client
! is unable to provide a feature it must
  
   Notify the user of the missing feature
  
--- 1076,1137 ----
  
  Dealing with Technological Limitations
  
! The design goals of GNUE Forms places some unique 
! constraints upon the client applications. A form 
! developer does not necessarily know the type technology 
! that will be used to interact with his form.
! 
! It is quite possible that a form originally designed to 
! run on a blazing fast workstation with a 21" color 
! monitor could end up being utilized on a text only 
! amber terminal. 
! 
! While GNUE Form client developers are encouraged to 
! support as many widgets as is possible on their target 
! technology.  We understand that some technology cannot 
! physically accommodate every widget supported by GNUE Forms.
  
  We deal with this in following ways
  
   Best Judgment
  
! Client developers are given a lot of flexibility in 
! implementing GNUE Forms clients. A client developer can 
! decide that implementing a specific feature in a 
! limited fashion is better than not implementing it at all.
! 
! An example of this would be in dealing with run time 
! validation of input on the client side.
! 
! While the GTK based client developers would have no 
! issues with implementing this feature, it would be 
! impossible for an HTML-only browser based client 
! written in PHP. The HTML client developers could 
! realisticly claim that users of the browser are aware 
! of the limitations of HTML form inputs. These users are 
! willing to accept the loss of real time validation for 
! the convenience of using a browser as their input 
! device. The developers could design the client to 
! perform the input validation upon submission of the 
! form containing user data. 
! 
! Widgets that would be impossible to implement could 
! simply be ignored. Thus if a form displayed a picture 
! of an employee on his personal information screen, a 
! text based client could simply choose to ignore the picture.
  
   Form Requirements
  
! Sometimes the omission of the data in the form might 
! render a form useless. The loss of the ability to 
! display the employee's picture in the above example 
! might not be critical. However, a form whose sole 
! purpose is to display scanned images would be worthless 
! on a text only client.
! 
! Form designer have the ability to tag certain features 
! as critical to the forms ability to operate. When a 
! client is unable to provide a feature it must
  
   Notify the user of the missing feature
  
Index: gnue/forms/setup.py
diff -c gnue/forms/setup.py:1.70 gnue/forms/setup.py:1.71
*** gnue/forms/setup.py:1.70    Mon Jun  3 15:19:39 2002
--- gnue/forms/setup.py Mon Jul  1 20:32:47 2002
***************
*** 29,43 ****
  from src import VERSION
  
  #
- # Leftover from initial attempt to create a .exe setup file for windows
- #
- try:
-   import py2exe
- except:
-   pass
- 
- 
- #
  # hack to deal w/ fact distutils won't
  # allow us to set absolute path prefix
  # on windows
--- 29,34 ----
***************
*** 56,62 ****
  try:
    from distutils.core import setup
    from distutils.command.build_scripts import build_scripts
- #  from setupext import Data_Files, install_Data_Files
  except ImportError:
    print """
  Setup requires that python's distutils be
--- 47,52 ----
***************
*** 94,118 ****
  
  
  if ('build' in sys.argv) or ('install' in sys.argv):
-   # Verify that gnue-common is installed
- #  try:
- #    print "Checking for GNUe-Common....",
- #    from gnue import common
- #    if common.__dict__.has_key('VERSION'):
- #      print "OK (version %s)" % common.VERSION
- #    else:
- #      print "OK"
- #  except ImportError:
- #    print """
- #You will need to install gnue-common
- #before gnuef will function.  You can
- #obtain a copy from
- #
- #http://www.gnuenterprise.org/download.php
- #"""
- #    sys.exit()
- 
- 
    #
    # Verify at least one UI is installed
    #
--- 84,89 ----
Index: gnue/forms/src/GFClient.py
diff -c gnue/forms/src/GFClient.py:1.45 gnue/forms/src/GFClient.py:1.46
*** gnue/forms/src/GFClient.py:1.45     Tue Jun  4 19:20:47 2002
--- gnue/forms/src/GFClient.py  Mon Jul  1 20:32:47 2002
***************
*** 112,122 ****
          self._ui = dyn_import("gnue.forms.uidrivers.%s" % (self.ui_type))
          uiloaded = 1
        except ImportError, err:
!         GDebug.printMesg(0,'Unable to load UI driver %s' % (self.ui_type))
          GDebug.printMesg(1,err)
          if self.ui_type != 'nstti':
            self.ui_type = 'nstti'
          else:
            sys.exit()
  
      self.loadKeyMappings()
--- 112,123 ----
          self._ui = dyn_import("gnue.forms.uidrivers.%s" % (self.ui_type))
          uiloaded = 1
        except ImportError, err:
!         GDebug.printMesg(1,_("Unable to load UI driver")+" %s" % self.ui_type)
          GDebug.printMesg(1,err)
          if self.ui_type != 'nstti':
            self.ui_type = 'nstti'
          else:
+         self.handleStartupError(_("Unable to load any valid UI drivers.  
Aborting."))
            sys.exit()
  
      self.loadKeyMappings()
Index: gnue/forms/src/GFKeyMapper.py
diff -c gnue/forms/src/GFKeyMapper.py:1.8 gnue/forms/src/GFKeyMapper.py:1.9
*** gnue/forms/src/GFKeyMapper.py:1.8   Tue May  7 13:24:13 2002
--- gnue/forms/src/GFKeyMapper.py       Mon Jul  1 20:32:47 2002
***************
*** 278,283 ****
--- 278,285 ----
        (vk.DELETE,   0, 0, 0) : 'DELETE',
        (vk.UP,       0, 0, 0) : 'PREVRECORD',
        (vk.DOWN,     0, 0, 0) : 'NEXTRECORD',
+       (vk.UP,       0, 1, 0) : 'FIRSTRECORD',
+       (vk.DOWN,     0, 1, 0) : 'LASTRECORD',
        (vk.F2,       0, 0, 0) : 'JUMPRECORD',
        (vk.F5,       0, 0, 0) : 'MARKFORDELETE',
        (vk.F6,       0, 0, 0) : 'COMMIT',



reply via email to

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