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).