PhabCreateWidgets (widget_defs, parent, name_prefix)
A list of widget definitions most likely generated using the library functions PhabLoad or PhabReadWidgetFile and its related functions.
The parent for the new widgets. Pass nil for no parent.
A string prefix to use when creating names for newly created widgets. Pass nil to use existing widget names.
This function is used when creating new windows from a window definition. Typically, but not necessarily, the window template is created using PhAB. New names are optionally given to each window widget.
This example, ex_PhabCreateWidgets.g, is included in the product distribution.
#!/usr/cogent/bin/phgamma
/*
This example reads a widget file that contains 8 buttons with .gif
images on them. It creates the widgets and puts them into two
windows. The first window contains all of the widgets, while the
second window contains a widget of your choice, which you can enter as
the third argument on the command line. To run this example, you must
be in a directory that can access the .wgt file.
The example takes an argument, <button name>, which can be one of:
Go, Stop, Pause, Done, Increase, Decrease, Left or Right.
*/
arg = string(cadr(argv));
if(string_p(arg))
{
if((strcmp(arg, "Go") == 0) ||
(strcmp(arg, "Stop") == 0) ||
(strcmp(arg, "Pause") == 0) ||
(strcmp(arg, "Done") == 0) ||
(strcmp(arg, "Increase") == 0) ||
(strcmp(arg, "Decrease") == 0) ||
(strcmp(arg, "Left") == 0) ||
(strcmp(arg, "Right") == 0))
{
PtInit(nil);
/*
* Rename some car/cdr functions to facilitate understanding.
*/
PhabGetTop = car;
PhabGetRoot = car;
PhabGetChildren = cdr;
PhabGetLevel = car;
PhabGetType = cadr;
PhabGetName = caddr;
require_lisp("PhotonWidgets.lsp");
require_lisp("PhabTemplate.lsp");
/*
* Read the widget definitions, and access them.
*/
file = string(_os_, "-WidgetFiles/wgt/buttons.wgtw");
defs = PhabReadWidgetFile(file);
tree = PhabGetTop(defs);
children = PhabGetChildren(tree);
/*
* Make a function to index the buttons by number.
*/
function index_buttons(buttons)
{
local index = 1;
indexlist = list();
with button in buttons do
{
local name = PhabGetName(car(button));
local name = PhabGetName(car(button));
indexlist = cons(list(name, index), indexlist);
index ++;
}
indexlist;
}
/*
* Make a function to look up a requested button.
*/
function lookup (name, list)
{
car(assoc(name, list));
}
/*
* Make a new window, create all the buttons, and display them
* in the window.
*/
win = new(PtWindow);
win.SetArea(100,50,120,500);
win.title = "All";
for (i=0;i<8;i++)
{
eachbut = car(car(PhabCreateWidgets(list(car(nth_cdr(children,i)))
,nil,nil)));
eachbut.SetPos(25, (i * 60));
PtRealizeWidget(eachbut);
PtExtentWidget(win);
}
/*
* Find the requested button.
*/
buttonlist = index_buttons(children);
argument = cadr(argv);
found = lookup(symbol(argument), buttonlist);
index = cadr(found) - 1;
/*
* Make a new window, create the requested button, and display it.
*/
win2 = new(PtWindow);
win2.SetArea(250,50,100,140);
win2.title = "Request";
anybut = car(car(PhabCreateWidgets(list(car(nth_cdr(children,index)))
,nil,nil)));
anybut.SetPos(20, 20);
exitbut = new(PtButton);
exitbut.SetArea(30, 100, 40, 25);
exitbut.text_string = "Exit";
PtAttachCallback(exitbut,Pt_CB_ACTIVATE,#exit_program(1));
PtRealizeWidget(win);
PtMainLoop();
}
else
princ ("Please enter an argument, one of: Go Stop Pause Done Increase Decrease Left Right \n");
}
else
princ ("Please enter an argument, one of: Go Stop Pause Done Increase Decrease Left Right \n");
Copyright © 1995-2010 by Cogent Real-Time Systems, Inc. All rights reserved.