The window concept
Windows are containers for .42f forms.
Creating windows
The windows are created from programs; they define a display context for sub-elements like forms, menus, message and error lines.
A window can contain only one form at a time, but you can display different forms successively in the same window.
OPEN WINDOW
instruction, which also defines the window
identifier:OPEN WINDOW mywindow WITH FORM "myform"
Destroying windows
CLOSE WINDOW
instruction:CLOSE WINDOW mywindow
API for window objects
The ui.Window
built-in class can be
used to manipulate windows as objects.
The common practice is to get the current window with ui.Window.getCurrent()
, get the
current displayed form with the getForm()
window object method, and use it as ui.Form
object to manipulate its content.
Windows rendering context
When using the text mode (FGLGUI=0),
WINDOW
objects are displayed in the character terminal as fixed-size boxes, at a
given line/column position, width and height.
In graphical mode, all WINDOW
objects are displayed in a single resizable desktop window container or web browser frame (the
window container). The rendering of the window container can be customized. For more
details, see Containers for program windows.
A GUI application can run in traditional mode
(gui.uiMode="traditional"
FGLPROFILE setting), displaying windows as fixed static
frames inside the real graphical parent window.
Default SCREEN window
When a program starts, the runtime system creates a default window named
SCREEN
.
This default window can be used as a regular window: it can hold a menu and a form.
SCREEN
window, by using OPEN FORM
+ DISPLAY
FORM
:MAIN
-- The SCREEN window exists by default
...
OPEN FORM f_main FROM "customers"
DISPLAY FORM f_main -- displays in SCREEN
...
END MAIN
If needed, the default SCREEN
window can be closed with CLOSE WINDOW SCREEN
.
However, in most cases, you want to keep this default window and display the main form of the
program with OPEN FORM
+ DISPLAY FORM
.
Before invoking methods such as ui.Window.getCurrent()
to get the default screen
window object, and no other user interface instruction was used for this window, execute
CURRENT WINDOW IS SCREEN
before calling the ui.Window
methods.
The current window
A program with user interface must always have a current window.
Several windows can be created, but there can be only one current window when using modal dialogs (only one dialog is active at the time, thus only the current window can be active).
There is always a current window. The last created window becomes the current window. When the last created window is closed, the previous window in the window stack becomes the current window.
CURRENT
WINDOW
instruction to make a specific window current, before executing the
corresponding dialog that is controlling the window
content:OPEN WINDOW w_customers ...
OPEN WINDOW w_orders ...
...
CURRRENT WINDOW IS w_customers
...
CLOSE WINDOW w_customers
CURRRENT WINDOW IS w_orders
...
However, this practice is not commonly used: A regular Genero program starts with a main window/form and opens new windows in cascade that results in a tree of windows. The last created window is closed to go back to the previous window/form.
Displaying multiple forms in the same window
When there is a current window, it is possible to display several forms successively in that same window.
OPEN WINDOW mywindow WITH FORM "form1"
INPUT BY NAME ... -- uses form1 elements
...
OPEN FORM f1 FROM "form2"
DISPLAY FORM f1 -- removes "form1" from the window
INPUT BY NAME ... -- uses form2 elements
...
Window presentation styles
Window decoration and behavior options can be defined with a presentation style.
STYLE
attribute of the ATTRIBUTES
section of OPEN WINDOW
, or it can also be specified at form level, with the
WINDOWSTYLE
form attribute
in the LAYOUT
of the form
definition:OPEN WINDOW w_cust WITH FORM "f_cust" ATTRIBUTES(STYLE="common")
Normal and modal windows
If a window uses the style attribute windowType=modal
, it will appear in a modal
frame on top of the last displayed frame of a window using the default style attribute
windowType=normal
.
windowType=normal
style attribute (here we do not specify any
STYLE
attribute in OPEN
WINDOW
):OPEN WINDOW w_cust WITH FORM "f_cust"
windowType=modal
style attribute, such as the "dialog"
style:OPEN WINDOW w_print_options WITH FORM "f_print_options" ATTRIBUTES(STYLE="dialog")
For more details about Configuring windows with styles.