#!/usr/cogent/bin/phgamma
/*
* This example reads and prints a widget file locating each widget and
* printing its level, type, and name on one line, followed by its resources.
* The program reads a file name from the command line, using the argument
* (cadr(argv)). Our test file is a window that contains one button and
* two panes, each of which also contain buttons. Enter its name on the
* command line as: WidgetFiles/wgt/readtestfile.wgtw.
*/
PtInit(nil);
/*
* Define some PhabGet- functions. (These are scheduled to be added as
* library functions in the near future).
*/
PhabGetTop = car;
PhabGetRoot = car;
PhabGetChildren = cdr;
PhabGetLevel = car;
PhabGetType = cadr;
PhabGetName = caddr;
function PhabGetResources (wgt)
{
caddr(cdr(wgt));
}
require_lisp("PhotonWidgets");
require_lisp("PhabTemplate");
/*
* Read and print the complete widget file definition.
*/
defs = PhabReadWidgetFile(cadr(argv));
pretty_princ("The widget definition is:\n", defs, "\n\n");
tree = PhabGetTop(defs);
/*
* Make a function that deconstructs the widget file definition,
* extracting each widget definition in turn, and identifying
* each part of each definition.
*/
function print_tree(tree)
{
local root = PhabGetRoot(tree);
local level = PhabGetLevel(root);
local type = PhabGetType(root);
local name = PhabGetName(root);
local resources = PhabGetResources(root);
princ("The ", name, " widget is type ", type,
" at level ", level, ". \nIts resources are: \n");
pretty_princ(resources, "\n");
local children = PhabGetChildren(tree);
if (children)
{
pretty_princ("Its children are:\n", children, "\n\n");
}
else princ("It has no children.\n\n");
with child in children do {
print_tree(child);
}
}
/*
* Call the function, then create and realize the widgets as an illustration.
*/
print_tree(tree);
NewWindow = car(car(PhabCreateWidgets(defs, nil, nil)));
NewWindow.SetPos(250,50);
PtRealizeWidget(NewWindow);
PtMainLoop();