4.8. Read and Print a Widget File

#!/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(); 
		

Copyright 1995-2002 by Cogent Real-Time Systems, Inc.