This section deals with a number of classes from the library to simplify the creation of dialog windows.
Error,
and warning and informational messages are raised using the
->report or ->error method
defined on all XPCE objects. Basic error and
message handling is described in section 10.8.
The library
library(pce_report) defines the classes reporter and
report_dialog.
->report message to colour error
messages red.
An example using these classes is in section 11.3.2.
The library library(toolbar)
defines the classes tool_bar,
tool_button and tool_status_button to simplify the
definition of tool-bars.
vertical
Orientation they can be stacked top-to-bottom.
gap,
make a small gap to separate logical groups of buttons.
->activate to all member buttons, reflecting
whether they are ready to accept commands or `grayed-out'.
->append'. Action
is the action to execute. If this is a plain atom, this method without
arguments is invoked on the `tool_bar<-client'.
If it is a code object this code is simply executed. Label is
the label. Normally for toolbars this will be an image
object. Balloon defines the text for the popup-window if the
user rests the pointer long enough on the button. It it is a name, this
balloon is subject to
`name<-label_name'
(see section 11.7), otherwise it is passed
literally. Finally, if Condition is present it is evaluated
by
->activate to determine the activation-state of
the button.
<-condition is present, evaluate it and send ->active.
A tool_status_button is toggled between depressed state and
normal state on each click. If it has an atomic <-action
it will send action: @on to
the client when going to depressed state and action:@off
when returning to normal state. If the <-action
is a code object this boolean will for forwarded over the code object.
See section 10.2.
The example below uses these classes as well as class menu_bar to arrive at a typical modern application layout.
| Figure 20 : Simple application framework |
% Pull in the classes
:- pce_autoload(report_dialog, library(pce_report)).
:- pce_autoload(tool_bar, library(toolbar)).
:- pce_autoload(finder, library(find_file)).
:- pce_global(@finder, new(finder)).
% Define icons as program resources
resource(printer, image, image('16x16/print.xpm')).
resource(floppy, image, image('16x16/save.xpm')).
% Define the application as a subclass of frame.
:- pce_begin_class(myapp, frame,
"Frame representing the application").
initialise(MyApp) :->
send_super(MyApp, initialise, 'My application'),
send(MyApp, append, new(D, dialog)),
send(D, pen, 0),
send(D, gap, size(5, 5)),
send(D, append, new(menu_bar)),
send(D, append, new(tool_bar(MyApp))),
send(MyApp, fill_menu_bar),
send(MyApp, fill_tool_bar),
send(new(W, myapp_workspace), below, D),
send(new(report_dialog), below, W).
fill_menu_bar(F) :->
get(F, member, dialog, D),
get(D, member, menu_bar, MB),
send_list(MB, append,
[ new(File, popup(file)),
new(_Edit, popup(edit))
]),
send_list(File, append,
[ menu_item(load,
message(F, load),
end_group := @on),
menu_item(print,
message(F, print))
]).
fill_tool_bar(F) :->
get(F, member, dialog, D),
get(D, member, tool_bar, TB),
send_list(TB, append,
[ tool_button(load,
resource(floppy),
load),
gap, % skip a little
tool_button(print,
resource(printer),
print)
]).
print(MyApp) :->
"Print the document"::
send(MyApp, report, progress, 'Printing ...'),
get(MyApp, member, myapp_workspace, WS),
send(WS, print),
send(MyApp, report, progress, done).
load(MyApp) :->
"Ask a file and load it"::
get(@finder, file, @on, myp, File),
get(MyApp, member, myapp_workspace, WS),
send(WS, load, File).
:- pce_end_class(myapp).
% dummy class for the work-area of your application
:- pce_begin_class(myapp_workspace, window).
:- pce_end_class(myapp_workspace).
|