Change Log
What's new in brief: The query-concept introduced with GGF 3.3 has been enhanced.
Now its possible to retrieve a direct access link to a query. If a GGFControlBrowserWindow was opened from a query or
the current selections have been saved as a query, the little world icon in the system tray is the source for such
a direct access link. Note: direct access links on queries work only, if the modelobject of the browser window
is defined in the <appname>Model class.
ListAreas display datasets larger than largeListTreshold (see GGFSetup) per page (enabling
page-wise scrolling). The number of lines in such a page was fixed (see GGFSetup).
Now GGFControlBrowserWindows can adjust the number of lines to the actual window-size,
if Javascript and cookies are supported. This works after the second re-display (scrolling
or other event). Note that is not a strategy-change in GGF. Javascript is still not necessary, but it can
improve the appearance a bit.
GGF.sql : now inserts query for rooms with the correct browser class.
GGFControlBrowserWindow: introduced new instance variables $lineHeight and $pageOffset. These allow to
compute how many lines fit on a page (if Javascript and Cookies are supported),
New method resetQuery() is used to remove the query object from the model, if filter,
sorter or columnselection are changed.
Fixed bug in createStandardQuery() now the correct name of the browser class is used.
Enhanced mothod createPagesize(): compute $this->myModel['_pagesize'] from cookie, if supported.
Enhanced method createSELECT($noLimit=FALSE): in the same way
Enhanced method initModel(): to enable direct accesslinks, providing the query-ID as pkvalue
(sorry for the many print_r's, but that was rather tricky
method initWindow(): changed menu enabeling rules. If activated via direct access link (user not logged on)
select Query is possible.
new method directAccessURL()
Query object is reset in eventSelectColumnsReturn, eventUpdateSorterReturn, eventUpdateFilterReturn, eventSortColumn
eventSelectQueryReturn: now remebers query name in separate model object, so it is available, even is query object is reset.
eventSaveQuery: uses this
donotDelete: checks if user logged on
GGFListArea: method render adds a javascrip that sets a cookie with the pixelheight of the window.
See GGFControlBrowserWindow, createPagesize()
GGFControlWindow: constructor now takes care for direct access links to queries.
systemTray: now takes care for new direct access links.
GGFModelGeneratorDialog: improved method template donotDelete
GGFControlUpdateDialog: createSELECT now can create statements with LOCK IN SHARE MODE to be used in transactions.
This improves data security for longer transactions, relying on several reads.
method eventOK uses this new feature as a sample. Not really necessary here.
GGFQuerySelectDialog: initWindow now checks if user is logged on and disallows "manage Queries", if not
GGFRoomReservationDialog: initWindow now disables modifying buttons if user not logged on
GGFERFilterClauseDialog: implemented in eventSelectValue, eventSelectValueReturn a simple solution to select from more than 500 elements.
moved old classes into archive "deprecated_classes.zip".
What's new in brief: There are three major achievements. GGF
now supports a simple,
yet powerful concept for storing and retrieving queries:
These are Objects that encapsulate
a filter (WHERE...),
a column-selector (SELECT...) and
a sorter (ORDER BY ...)for a browser window.
The model generator now lets you create database table editors in minutes. As soon as
you have a database table defined, you can generate all the code needed to
- browse
- insert
- update and
- delete
database records.
Third is the new enhanced demo application, which now has some meaningful use case:
managing the table reservations in a restaurant. It also contains an interface to the
new query handling and the model generator.
GGF - new Function "MessagePrompter"
GGFControlBrowserWindow - new method createStandardQuery, initModel: interprets queries supplied as model-parameter
new menu items Queries, save Query, eventInsertContinue: now refreshes the model
GGFControlMainWindow - new menu entries for "Queries", Save "Queries", "Generate Code", "Test generated Code"
"Queries": allows to select a predefined query and apply its filter etc. on the Window
"Save "Queries": saves current filtering etc. as a new query definition
"Generate Code": starts the model generator (see below)
"Test generated Code" : allows to open a previously generated window
GGFControl:
new methods controlID, editRender : for future use
GGFListArea: supporting new view callback: See GGFQueryBrowserWindow for an example usage
new method: setViewCallback
GGFPushbutton: new method setCallback allows to modify the callback function after instantiating the button
GGFImagePushbutton: new method setImageURL allows to modify the callback function after instantiating the button
GGFControlPane: new method clearControls allows to remove all controls from the pane. This is useful to restrict
inheritance of layout for window classes. For an example see GGFQuerySaveDialog. The render method has an interface
to the planned method editRender.
GGFControlUpdateDialog: This was more or less a sample class in GGF 3.2. Now it works better as a generic base class
for all kinds of update dialogs. Methods createUPDATE, createSELECT eventOK now work for any table with a single primary key.
GGFNumAttribute: Method asSQL now returns 0 instead of an empty string in case the attribute is not set.
GGFEntityType: New method createUpdate generates an update statement for a row.
GGFERModel: Method intialize now defines the GGFQuery standard entity type. Queries are object that define filters,
columnselections and sorters for browser windows. They can be stored in the database and are used to setup
table browsers. See GGFControlMainWindow and GGFControlBrowserWindow.
Made method "add" public - thus allowing to add new Entitytypes "on the fly". See for instance GGFRoomBrowserWindow.
GGFSetup: New global EditMode reserved for future use. Must be set to 0.
GGFMessagePrompter: implements a message prompter dialog (see GGF.php)
GGFModelGeneratorDialog: This is the first GGF tool. It can be opened via the GGFDemo main window and allows to
generate browser, update dialog and insert dialog classes for MySQL tables. Note this works only with MySQL 5.x
because it accesses the new metadata structures of MySQL. The dialog allows to select host, database and table
and then generates GGF sourcecode.
GGFQuery: New class to encapsulate a record of the GGFQuery table. It holds the elements of a query. See GGFERModel
GGFQueryBrowserDialog: allows to view all stored queries.
GGFQuerySaveDialog: allows to save the current settings of a GGFControlBrowserWindow as a query.
GGFQuerySelectDialog: allows to select a query and set its filter etc. as current setting in a GGFControlBrowser window.
GGFQueryUpdateDialog: allows to update the name of a query.
GGFRoomBrowserWindow: This is the entry into a new section of the GGFDemo application. It shows a sample
application
that allows to reserve tables in a restaurant. Rooms can be defined to have several dining tables and
each table can be reserved or un-reserved.
GGFRoomReservationDialog: This shows a graphical representation of the room with its tables and their
reservation status. Clicking on a table reserves or unreserves it.
GGFRoomUpdateDialog: This allows to update a record of the demo table room.
GGFatableBrowserWindow: new demo class allows to browse the tables of a dining-room
GGFatableUpdateDialog: new demo class allows to edit the definition of a dining-table.
New directory GGFShapes: contains gif files used by the reservation demo.
HelloWorld: Now here it is - the inevitable "Hello World!"-example. It does not make too much sense,
but people keep asking for it.
HelloWorldMainWindoe: The only class required for the Hello World-example.
GGF.sql: creates a new enhanced GGF database with data for the demo application. The
new
standard table GGFQuery is defined and demo tables room and atable.
This release offers a new “sort by column” option for
GGFListArea controls and fixes some minor bugs. New is also a new document
describing the quick installation of a GGF
execution/development environment with XAMPP and the getting started document.
GGFLookupDialog: comment updated
GGFERFilterClauseDialog: fixed minor bugs with select/preselection
GGFERFilterDialog: fixed bug with OR clause Operator for subfilters
GGFSqlFilter: new method setClauseOperator($andor)
Version 3.2 - 2006-01-19
There is a
new Quick Installation Guide (160 KB zipped
pdf)
GGF.php errorstack object is created now before the database object is created. This results in more accurate error-messages when the database is not configured correctly in GGFSetup.php, new function mailErrorHandler()
GGFControlWindow: mode errorStack global in notesType(), replaced tray icons with gif files (better representation in Mozilla), eventFormProcessed() does not issue an error if button could not be identified
GGFControlBrowserWindow: new accessor order() delivers the sorter object, implements a sort callback method for GGFListArea, columns can now be sorted with a click on the headline. Sort criteria are numbered by their relevance.

GGFControls: added parameter to prototype setExtraHTML($html)
GGFControls/GGFListarea now allows to specify sort callback
NOTE: this is an interface change in the constructor
now now allows to click on column headers for sorting
sort indicators are shown in headline, if window has a sorter
GGFGenericControl: add setValue($html)
GGFSelectionControl: accessor for key added
GGFCheckBox, GGFCheckboxGroup: process request now always returns an array (empty array if nothing checked)
New icon files like GGF1asc.gif for sort indicators and system tray symbols
Version 3.1.1
There is a new getting started document
GGF.sql: now contains also the SQL for the todo tutorial
GGFCheckboxGroup: bug fixed in selection handling, now optionally horizontal and without groupBox around
GGFControlBrowserWindow: function PKValue() adapted to ERModel concept
GGFControlUpdateDialog: bug fixed in display of last change field
GGFERAttribute: now has interface to modify the external name.
GGFERFilter: count() enhanced to support complex entity types
GGFERFilterDialog: bugfix: checks now properly if clause is selected
GGFERFilterClauseDialog: now inherits from GGFERSqlFilterClauseDialog, sorts names of columns per name
GGFERModel: Entitytype now supports mapping to two or more tables (complex types). A new instancevariable "joinfilter" was introduced that allows defining the join conditions for the tables.
The function createSelect() has been greatly enhanced to support joinfilters.
A new function createExpandedType() creates a so called expanded entitytype.
GGFDemoModel: now defines an entitytype and two relationshiptypes for the todo tutorial
GGFRadiobuttonGroup: now optionally horizontal and without groupBox around
TODOMainWindow: now works with an expanded entity type
Version 3.1
Fixed bugs in GGFEntityType->primaryKey() and GGFSelectionControl->getSelectionIndex()
GGFCheckbox, GGFRadioGroup: now render a label, therefore they can be selected also by selecting the text
GGFControl: added accessors for tip texts
GGFEntryField: will be shown with grey background if set to read only
GGFListArea: now supports a copy icon. Important: interface of constructor changed, performance of render function improved
GGFListbox, Combobox: performance of render function
improved
GGFStaticHyperlinkfield: setURL is now public
A new generated class documentation
is now available.
GGF.php: instantiates the
applications ER-Model. See the description of ER model concepts.
GGFAllControlsDemo: now shows usage of new
GGFFieldsetPane (has a groupbox for entry-fields)
GGFCheckbox: new control to model a single checkbox
without an enclosing groupbox
GGFControlUpdateDialog: now writes entries into history
table on update
GGFControlMainWindow: system tray is now at the right
of the status area
System tray help now uses the &appnameHelp.htm
file (see GGFDemoHelp.htm below)
GGFDemoModel:
sample for an ER-Model description
GGFERFilter: new class. Use this instead of the old GGFSqlFilter.
GGFERFilterDialog: new class. Use this instead of the old
GGFSqlFilterDialog.
GGFERFilterClauseDialog: new class. Use this instead
of the old GGFSqlFilterClauseDialog.
GGFFieldsetPane: new class do create a groupbox
GGFSortDialog, GGFColumnsDialog: new functions add
all and remove all
PHP.ini: magic quotes were set to off
GGFControlWindow:
Slightly improved rendering of system tray.
GGFSqlFilterDialog:
Now opens the correct dialog when editing complex subfilters
GGFControlWindow:
Improved rendering of system tray. Added e-mail feedback to system tray
GGFControlNotesDialog: still preview, but can already
render.
GGFSetup: Added global variable for webmaster e-mail
GGFControlWindow, GGFMenuPane: prepared for
recursive, multi-level menus (not yet fully implemented)
GGFControlPane: Support for cell alignment in blind
tables.
GGFControlDialog: Interface for plausibility-check
implemented. See usage in GGFSqlFilterDialog.
Data export (creation of *.csv files)
GGFStaticHyperlinkfield now shows a tip text.
New demo GGFAllControlsDemo.php shows usage of all
control classes (see screenshot)
Bug fixed in GGF.php (errorhandling when database
access parameters are wrong)
Removed unneeded files from download archive.
New control
classes (GUI widgets) minimize need to deal with HTML for application
developers.
New window and
dialog classes that use the control classes.
New tutorial (see documentation.htm)
New table browser class GGFFramedBrowserWindow
New GGFSortDialog allows to edit
“ORDER BY” clauses / GGFSqlSorter objects
New GGFLookupDialog allows to select
a value from a predefined list
New convenient functions messagebox,
lookup to launch these dialogs
New trace level, threshold in
GGFSetup
New support for frames in GGFWindow,
GGFContext. (See GGFFramedBrowserWindow