Read and Print a Widget File

Gamma/Photon: Using Gamma™ with the Photon microGUIŽ, Version 4.0
Prev | Chapter 4. Building Applications - a Tutorial | Next

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

Prev | Home | Next
Set, Test, and Clear Widget Flags | Up | Extract Certain Widgets

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