[GRASS5] New gui.tcl generic user interface

I also think that, as many new convenienve functions get added to the
GUI forms, it will probably prove a better approach to not add icons or
buttons for all of them but rather have a regular menu bar at the
top of each form that can be conveniently enhanced with new functions
without having to think about form layout and GUI size each time.

A menubar on top of each form could easily provide room for entries for
such things as session management, outputing current option values to
an ASCII file (reading from on), a form list with open forms (grouped by
type), etc. All fancy stuff that could be added in the future!

Best,

Benjamin

----- Originalnachricht -----
Von: Cedric Shock <cedricgrass@shockfamily.net>
Datum: Dienstag, 14. März 2006 4:34 am
Betreff: [GRASS5] New gui.tcl generic user interface

Good evening,

I have hammered out a new gui.tcl. This is the file that produces
the generic
graphical user interface for all of the other programs.

Screenshots:

g.region, as it first comes up:
http://www.shockfamily.net/cedric/grass/newgui1.png

Sample output:
http://www.shockfamily.net/cedric/grass/newgui2.png

A fake test-script that shows guisections for a command like g.region
http://www.shockfamily.net/cedric/grass/newgui3.png

Output showing errors and progress bar:
http://www.shockfamily.net/cedric/grass/newgui7.png

File selection, very wide due to extremely long description text.
This module
would benefit from labels:
http://www.shockfamily.net/cedric/grass/newgui4.png

Multiple selection, same deal:
http://www.shockfamily.net/cedric/grass/newgui5.png

Dropdown box, nothing has changed:
http://www.shockfamily.net/cedric/grass/newgui6.png

Changes:

Options and Output are now displayed in tabs instead of panes

There is a new command label which shows the current command as it
is edited.
It has a button for copying the command to the clipboard. (Might be
worth
noting in wish 2074)

Programs reporting guisections will have a tab made for options in
each
toplevel section. Finer section grouping is obeyed, but no labels
are created
or displayed.

The options frames scroll with the mouse wheel.

If possible the window opens wide enough to display its contents.
This is
accomplished by adding a binding to the scrolled frames which
report their
widths to their parent frames.

Programs using the label and description attributes on options or
tabs will
now have the description displayed as balloon help.

The help button is not enabled if no help file exists for the
program. (closes
wish 3799)

The type and required text for options is displayed right justified.

Module information is displayed differently. Both the label and
description
are displayed if available. Module is displayed with an icon if a
matching
one can be found in $(GISBASE)/etc/icons. See /gui/icons/README for
more
information.

Buttons for file selection are displayed with an open file icon.

Buttons for selecting database elements and symbols are displayed
with an icon
if a matching one can be found in $(GISBASE)/etc/icons.

It is now possible to determine when a command has finished
executing. Output
text has an added graphic along with the command text when the
command is
run. When the command finishes another graphic is displayed along
with the
text "Done."

Testing:
Ran lots of different commands both from the console and from
gis.m. Only
tested against tcl/tk 8.4 on Ubuntu Linux.

Patch:
Patch of lib/gis/gui.tcl and gui/Makefile is attached

gui.tcl also needs icons. To get the icons directory do the
following in
grass6/:
tar xvfz gui-icons.tar.gz

I believe a "make install" is all that is needed, but I'm not sure.

Enjoy,

Cedric Shock

Benjamin, Michael, everyone,

I also think that, as many new convenienve functions get added to the
GUI forms, it will probably prove a better approach to not add icons or
buttons for all of them but rather have a regular menu bar at the
top of each form that can be conveniently enhanced with new functions
without having to think about form layout and GUI size each time.

The short answer: I think this belongs in the program that runs the grass
command, i.e. gis.m, bash, a shell script, etc.

This can't be done here. gui.tcl is designed to be called from inside other
GUIs. When it's called from parser.c it gets the default toplevel window that
wish already made for it. When its called from other programs, like gis.m, it
gets a window that the program makes and hands to it. I made a couple small
changes to gui.tcl that check before trying to set the window title, and now
it's perfectly happy being handed an arbitrary container instead of just a
toplevel window:

http://www.shockfamily.net/cedric/grass/sidebyside.png

On the plus side, a GUI like gis.m can make a window for a program and set the
menus in that window to get really tight integration. So I have added a few
tcl side interface commands to get and set the current command (as an argv
style list) that such a manager could use for loading and setting options.

I also modified parser.c so the call of G_gui from the existing --ui switch is
deferred until after setting answers from parsing the option on the command
line. I also added answer for flags to what is given to the tcl gui. This
means you can do something like g.region --ui -p rast=elevation and the user
interface will come up with Print already selected and rast set to elevation.
As a command line user myself I find this just about perfect for presets. It
makes scripts that bring up preset UIs very easy too.

Even though the parser.c stuff is independent I'll hold off on tossing out a
patch for either of these until the current patch hits CVS.

Actually, this would probably be the time to create a module
that let's users choose their prefered screen fonts (GUI and
console output), GUI colours and other things such as
tear-off menus True/False in gis.m.
This will also be useful once Tcl/Tk 8.5 comes out with a
lot more options on how to customize GUI look and feel.

Right now these are, except for the bubble help text which bwidgets would
default to 5 px, the defaults for tk. If we want to change them we'd need to
agree on a set of named fonts and make an include for gui.tcl that sets these
fonts if they arn't already set. The file to include could be an environment
variable so users can set their own. A GUI running gui.tcl would be wise to
set the fonts and colors up with its own style. I'll think about this, but
we'd be wise to get lots of Michael's input.

--Cedric Shock