#!/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. Type the 2 arguments buttons and [button name] at the shell prompt, where [button name] can be one of: Go, Stop, Pause, Done, Increase, Decrease, Left or Right. */ PtInit(nil); /* * Create some convenience functions. */ 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)); 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); for (i=0;i<8;i++) { eachbut = car(car(PhabCreateWidgets(list(car(nth_cdr(children,i))) ,nil,nil))); if (eachbut.name == #Done) PtAttachCallback(eachbut, Pt_CB_ACTIVATE,#exit_program(-1)); eachbut.SetPos(25, (i * 60)); PtRealizeWidget(eachbut); PtExtentWidget(win); } /* * Find the requested button. */ buttonlist = index_buttons(children); if (cadr(argv)) argument = cadr(argv); else argument = "Go"; 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,120,120); anybut = car(car(PhabCreateWidgets(list(car(nth_cdr(children,index))) ,nil,nil))); anybut.SetPos(20,40); princ("Choose another button by using one of:\n", "Go, Stop, Pause, Done, Increase, Decrease, Left or Right\n", "as a command-line argument.\n"); PtRealizeWidget(win); PtMainLoop();
Copyright © 1995-2010 by Cogent Real-Time Systems, Inc. All rights reserved.