Forms Main Window: Select a Form
Each menu on this main screen offers a list of forms, loosely grouped by application or relevance. The user can start up as many of them simultaneously as the backend server will permit.
Selected Memes Form (empty)
I picked the Memes form from the Memes menu (other forms from that menu were Agents, Mpaths, etc).
Find Memes called PARANG
I enter PARANG as the meme name and hit FIND.
Pick from list of PARANG memes
A popup appears with a synoptic list of all the memes whose names start with PARANG. I double-click on the one I want.
This is the PARANG we were looking for
Information about the PARANG I picked now appears in the form.
Shift-Click on Fields to make a List
If I shift-click on form fields, they form an ordered list. If I then use the visible SQL generator, the FSE is derived from that list:
List Constrains SQL FSE
List Plus Match Values
I can also enter values to match, simultaneously with FSE constraint.
SQL FSE and RSE now Constrained
And to make my day complete, the SQL in this window is editable, so if I am SQL-literate, I can write my own query...
Results of Query
... and ViewData will bring up this handy results viewer, with some useful disposal options.
This is the form for the Agents table (see the Knowledge Base discussion in the Guided Tour).
Meme Paths (Info Flow) Form
This is the form for the Paths table (the table documenting information flow between Agents).
Mbundle Form (no sel)
Forms can show more than one record at once, as demonstrated here by the Mbundle form (shows the bundling of Memes into hierarchical structure). Here I see all children of a parent Meme.
Mbundle Form (rec sel)
Here I have selected one child of the parent Meme.
Memes Form looks at Memes Table (self ref)
The Memes form here shows the Meme for the Memes table. In other words, the form is looking at the Meme assigned to the table "Memes" in the DB.
Descriptions of each form and of all the widgets on each form live in the Forms table. Of course, there is a Form for looking at the Forms table.
Widgets on a form are created and edited by this popup editor. This editor allows the designer to insert, update, delete records in the Forms table in a more friendly way than the raw Forms form.
Different Server, Same Code
The same forms code can look at different servers. Here we've started a new forms session pointing at the Admin, rather than the Science, server.
A Boring Form (Mailing List)
Every database designer seems condemned to build at least a handful of Mailing Lists in a lifetime. Ugh. This is just one of several here at Lick -- it keeps track of visitors to our Mount Hamilton facility (a useful thing to do).
Ticketing Form with Data
We sell tickets to special events on the Mountain, like concerts and lectures. This form is used by the clerical staff who oversee that operation, to keep track of their ticket sales, donations, etc.
Ticketing Form with Data and Computation
As you can see, this person (who shall remain anonymous) was very generous and wrote us a check totalling $1000, somewhat in excess of the value of the tickets he received. The check totalling button is one of many handy sanity check features found all over our production forms. Since the whole application is Tcl, it's quite simple to add buttons with any arbitrary function. This form was designed, created, integrated with the pre-existing Mailing List, reviewed, redesigned completely, and in production in less than two days.