iwidgets-4.1.1/0000755003604700454610000000000013254754500011734 5ustar dgp771diviwidgets-4.1.1/configure.in0000644003604700454610000000562513254753513014260 0ustar dgp771divdnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during [incr Tcl] dnl installation to configure the system for the local environment. # RCS: $Id: configure.in,v 1.17 2017/06/28 20:03:21 dgp Exp $ AC_INIT([iwidgets], [4.1.1]) TEA_INIT([3.2]) AC_CONFIG_AUX_DIR(tclconfig) AC_CONFIG_SRCDIR([generic/buttonbox.itk]) #-------------------------------------------------------------------- # See if there was a command-line option for where Tcl or Tk is; if # not, search for Tcl and/or Tk. #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG TEA_PATH_TKCONFIG TEA_LOAD_TKCONFIG TEA_PATH_CONFIG(itcl) TEA_LOAD_CONFIG(itcl) AC_PROG_INSTALL #-------------------------------------------------------------------- # See if --with-itcl was specified to give the [incr Tcl] and [incr Tk] # source code location. If not, then we'll assume that the Iwidgets # package is being installed directly beneath the toplevel Itcl directory. #-------------------------------------------------------------------- #AC_ARG_WITH(itcl, [ --with-itcl=DIR use Itcl 3.0 binaries from DIR], # itcl_search=$withval, itcl_search=`cd ${srcdir}/..; pwd`) ITCL_LIB_DIR="" if test -r $itcl_SRC_DIR/library/itcl.tcl; then ITCL_LIB_DIR=$itcl_SRC_DIR/library fi if test -z "$ITCL_LIB_DIR"; then AC_MSG_ERROR([Can't find Itcl source. Use --with-itcl to specify the the toplevel [incr Tcl] directory on your system. This directory should contain library/itcl.tcl.]) fi AC_ARG_WITH(itk, [ --with-itk=DIR use Itk 3.0 binaries from DIR], itk_search=$withval, itk_search=`cd ${srcdir}/..; pwd`) ITK_LIB_DIR="" if test -r $itk_search/library/itk.tcl; then ITK_LIB_DIR=$itk_search/library ITK_SRC_DIR=$itk_search fi if test -z "$ITK_LIB_DIR"; then AC_MSG_ERROR([Can't find Itk source. Use --with-itk to specify the the toplevel [incr Tk] directory on your system. This directory should contain library/itk.tcl.]) fi #-------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before $prefix is used. #-------------------------------------------------------------------- TEA_PREFIX #-------------------------------------------------------------------- # Needed for running the test suite #-------------------------------------------------------------------- TEA_CONFIG_CFLAGS([]) TEA_PROG_TCLSH TEA_PROG_WISH #-------------------------------------------------------------------- # Fill in template files with the proper info. #-------------------------------------------------------------------- AC_SUBST(TCL_SRC_DIR) AC_SUBST(TK_SRC_DIR) AC_SUBST(ITCL_LIB_DIR) AC_SUBST(ITK_LIB_DIR) AC_SUBST(ITK_SRC_DIR) AC_SUBST(IWIDGETS_SRC_DIR) AC_OUTPUT([Makefile iwidgets.tcl pkgIndex.tcl]) iwidgets-4.1.1/CHANGES0000644003604700454610000017153513254753470012750 0ustar dgp771div[incr Widgets] CHANGES ---------------------- ========================================================================== CURRENT VERSION: 4.1.1 PREVIOUS VERSION: 4.1.0 ========================================================================== CURRENT VERSION: 4.1.0 PREVIOUS VERSION: 4.0.2 ========================================================================== CURRENT VERSION: 4.0.2 PREVIOUS VERSION: 4.0.1 ========================================================================== CURRENT VERSION: 4.0.1 PREVIOUS VERSION: 4.0.0 DATE: 9/16/02 CONTACT: Chad Smith (itclguy@attbi.com) This is primarily a bug-fix release of the [incr Widgets]. Please see the ChangeLog for a detailed explanation of the changes made to the various widgets and the SourceForge tickets to which each change is associated. Check out the incoming/demos directory. I've added a couple new widgets that were submitted to SourceForge. Let me know if you think they are useful or not. If so, they can be added to the distribution in a future release. Many thanks to Marty Backe for his tireless efforts closing out numerous SF tickets for this release! ========================================================================== ========================================================================== -------------------------- iwidgets-4.0.0 ------------------------------ -------------------- CHANGES FROM iwidgets-3.1.0 ----------------------- ========================================================================== DATE: 8/07/01 CONTACT: Chad Smith (itclguy@yahoo.com) -------- CHANGES: -------- This release of the [incr Widgets] marks the first time they are released independently of the [incr Tcl] distribution. The Iwidgets package is now separate from Itcl and can be optionally downloaded and built as a true extension to Itcl (well actually Itk). Along with the Makefile/configuration-type changes necessary for removing the Iwidgets from Itcl, there are many other changes you should note in this release. I'll try to list each of these: o - The most important change is that doing a 'package require Iwidgets' no longer pulls the itcl namespace commands into the global namespace. Previously, this was done because none of the itcl-specific commands such as class, configbody, etc. were properly resolved in the [incr Widgets] classes. Now, all references to itcl commands use proper namespace resolution. For example, "class iwidgets::Checkbox" is now replaced with "itcl::class iwidgets::Checkbox". Here is a list of itcl commands that are now properly scoped: class body configbody scope code There are likely many folks in the community that have come to rely on the exporting of itcl commands into the global namespace, so if you're one of these folks you have two choices if you want to use this version of the [incr Widgets]: (1) You can add a "namespace import -force itcl::*" at the beginning of your application (this is what 'package require Iwidgets' used to do); or (2) you can add "itcl::" in front of each of the itcl-specific commands in your code. o - A new mega-widget, extbutton, was added to the distribution. Note that this new widget will only work with Tk 8.4 or later. A man page and test case is available in the distribution. o - "readonly" was added as a new value for the combobox's -state option. o - A new option, -gmt, was added to the datefield. It accepts boolean values. o - A new option, -state, was added to the radiobox. o - A new method, bbox, was added to tabset to return the bounding box that will completely enclose all tabs. o - A new option, -automount, was added to extfileselectionbox and fileselectionbox. o - Error checking was added to hierarchy's -alwaysquery option to enforce boolean values, and some memory leaks were plugged in the 'clear' method. ========================================================================== ========================================================================== -------------------------- iwidgets-3.0.0 ------------------------------ -------------------- CHANGES FROM iwidgets-2.2.0 ----------------------- ========================================================================== [incr Widgets] version 3.0.0 is compatable with itcl3.0 [incr Widgets] has undergone a major overhaul between the last version and 3.0.0. Since so many changes have taken place it made more since to list them by widget class name rather than the old style of new features and bug fixes. The majority of the changes are under the covers and will have minimal impact of existing scripts, but there are a few that may bite you. To locate possible incompatabilities, just search this file for the key words "POSSIBLE INCOMPATIBILITY". In addition, quite a few new widgets have been added to the set. They include the following: Calendar Checkbox Dateentry Datefield Disjointlistbox Extfileselectionbox Extfileselectiondialog Finddialog Hierarchy Labeledframe Mainwindow Messagebox Scrolledwidget Timeentry Timefield Watch Thanx to the following contributors who have been kind enough to help me support this effort through enhancements, bug fixes, and new widgets. John Tucker jatucker@austin.dsccc.com Mitch Gorman emrys@net-gate.com John Reekie johnr@EECS.Berkeley.EDU Alfredo Jahn ajahn@spd.dsccc.com Michael McLennan mmclennan@lucent.com Labeledwidget ______________________________________________________________________________ >> Reimplemented geometry management using the grid instead of the packer. >> Changed component option basis to be that of the "usuals". >> Removed a redundant frame component named "shell" just below the hull. >> Corrected labelvariable bug. Setting the labelvariable had no effect. The code has been corrected such that a trace is installed on the variable which forces an update of the label text upon writes to the variable. >> Removed the labmargin frame component used for implementing a margin. This is now accomplished via the grid by maintaining an empty row/column for the margin and adjusting its minsize. >> POSSIBLE INCOMPATIBILITY - The childsite is now a protected component. If you need access to it, use the childsite command. >> Added new label position orientation settings. The current label positions are nw, n, ne, sw, s, se, en, e, es, wn, w, and ws. >> Updated the test script and man page. Scrolledlistbox ______________________________________________________________________________ >> Derived from the Scrolledwidget class which provides the vertical and horizontal scrollbars along with the options to control their display. >> Reimplemented geometry management using the grid instead of the packer. >> Changed component option basis to be that of the "usuals". >> Added a -state option that allows you to disable the listbox. Selection is blocked. The foreground of the scrolledlistbox label is changed to disbabledforeground. >> Fixed the infinite looping problem which would occur with -hscrollmode set to dynamic and a really long line added just out of the view port. As you'd scroll down the horizontal scrollbar bar would start flashing on and off. >> Removed the margin frame components used for implementing a margin between the listbox and scrollbars. This is now accomplished via the grid by maintaining an empty row/column for the margin and adjusting its minsize. >> POSSIBLE INCOMPATIBILITY - Removed -items option. This was originally put in as a convienence, but it turns out to be quite costly in terms of performance. It had to go. The insert/delete/get commands can be used instead which is much more in line with Tk. >> Updated the test script, demo, and man page. Entryfield ______________________________________________________________________________ >> Reimplemented geometry management using the grid instead of the packer. >> Modified the real type validation to except exponents. Patch provided by evans@engineous.com (Rick Evans). >> The -state option changes the label to disabledforeground when the entryfield is disabled. >> Changed component option basis to be that of the "usuals". >> Added a -pasting configuration option to allow user to enable/disable pasting into the entry component of the entryfield. csmith@adc.com (Chad Smith) >> Removed hardcoded state comparisons in the _keyPress method and replaced with code to mask out and keypress events. csmith@adc.com (Chad Smith) Pushbutton ______________________________________________________________________________ >> Changed component option basis to be that of the "usuals". >> POSSIBLE INCOMPATABILITY - The pushButton component has been changed to pushbutton. >> POSSIBLE INCOMPATABILITY - The following options have been removed and are not directly available in the pushbutton anymore: -anchor -justify -textvariable The underlying button component still maintains them , but not the pushbutton itself. You can still set them via the component command, i.e. ".pb component pushButton configure -justify left" Buttonbox ______________________________________________________________________________ >> Changed component option basis to be that of the "usuals". Shell ______________________________________________________________________________ >> Changed component option basis to be that of the "usuals". >> Added a -width and -height option. A value of zero causes the width and/or height to be adjusted to the required value based on the size requests of the components placed in the childsite. Otherwise, the width and/or height is fixed. The default is zero. >> Added -width and -height tests to the test script and updated the man page. >> The activate method no longer returns an error if it is called when the shell is already active. Instead, the shell is just raised. Dialogshell ______________________________________________________________________________ >> Reimplemented geometry management using the grid instead of the packer. >> Changed component option basis to be that of the "usuals". >> Updated the test script and man page, adding the -width and -height options that are inherited from the shell. Dialog ______________________________________________________________________________ >> Updated the test script and man page, adding the -width and -height options that are inherited from the shell. Selectionbox ______________________________________________________________________________ >> Reimplemented geometry management using the grid instead of the packer. >> Changed component option basis to be that of the "usuals". >> Modified the insert and delete methods to use the items insert and delete method rather than configuring the -items option which has been removed from the underlying scrolledlistbox. >> Removed the margin frame component used for implementing a margin between the items and selection. This is now accomplished via the grid by maintaining an empty row for the margin and adjusting its minsize. >> Removed the unecessary frame that was used to contrain the width and height of the widget. This is now performed directly on the widget hull. >> POSSIBLE INCOMPATABILITY - The following options have been removed and are not directly available in the selectionbox anymore: -hscrollmode -itemslabelpos -labelmargin -margin -relief -sbwidth -scrollmargin -selectionlabelpos -vscrollmode The underlying components still maintain them, but not the selectionbox itself. You can still set them via the component command, i.e. ".sb component selection configure -labelpos nw" or ".sb component items configure -hscrollmode static" >> Added a -width and -height option. A value of zero causes the width and/or height to be adjusted to the required value based on the size requests of the components placed in the childsite. Otherwise, the width and/or height is fixed. The default is zero. >> Updated the test script, demo, and man page. Selectiondialog ______________________________________________________________________________ >> Pack propagation is now handled by the shell class. >> Modified the insert and delete methods to use the insert and delete method rather than configuring the -items option which has been removed from the underlying scrolledlistbox. >> Changed component option basis to be that of the "usuals". >> POSSIBLE INCOMPATABILITY - The "sb" component has been renamed to be "selectionbox". This is much more descriptive. >> POSSIBLE INCOMPATABILITY - The following options have been removed and are not directly available in the selectiondialog anymore: -hscrollmode -itemslabelpos -labelmargin -margin -relief -sbwidth -scrollmargin -selectionlabelpos -vscrollmode The underlying components still maintain them, but not the selectiondialog itself. You can still set them via the component command, i.e. ".sd component selectionbox configure -margin 10" or ".sd component selectionbox component items configure -hscrollmode static" >> The -width and -height options are now controlled by the shell class. A value of zero causes the width and/or height to be adjusted to the required value based on the size requests of the components. Otherwise, the width and/or height is fixed. The default is zero. Scrolledtext ______________________________________________________________________________ >> Derived from the Scrolledwidget class which provides the vertical and horizontal scrollbars along with the options to control their display. >> Reimplemented geometry management using the grid instead of the packer, eliminating quite a few unneeded frames along the way. >> Changed component option basis to be that of the "usuals". >> Removed the margin frame components used for implementing a margin between the text and scrollbars. This is now accomplished via the grid by maintaining an empty row/column for the margin and adjusting its minsize. >> The -state option changes the label to disabledforeground when the scrolledtext is disabled. >> Fixed the infinite looping problem which would occur with -wrap set to none, -hscrollmode set to dynamic and a really long line added just out of the view port. As you'd scroll down the horizontal scrollbar bar would start flashing on and off. >> Added an index argument to the import method so a file can be imported into the text area at positions other than just the end. >> Updated the test script and man page. Feedback ______________________________________________________________________________ >> Corrected namspace problem by removing global scope qualifier from class definition as well as method and option bodies. Bug report and patch provided by evans@engineous.com (Rick Evans). Hyperhelp ______________________________________________________________________________ >> Corrected namspace problem by removing global scope qualifier from class definition as well as method and option bodies. Bug report provided by evans@engineous.com (Rick Evans). Scrolledhtml ______________________________________________________________________________ >> Corrected namspace problem by removing global scope qualifier from class definition as well as method and option bodies. Bug report provided by evans@engineous.com (Rick Evans). Canvasprintbox ______________________________________________________________________________ >> Added tcl_platform to list of global variables declared in print method. Bug report provided by evans@engineous.com (Rick Evans). Scrolledcanvas ______________________________________________________________________________ >> Derived from the Scrolledwidget class which provides the vertical and horizontal scrollbars along with the options to control their display. >> POSSIBLE INCOMPATIBILITY - The ScrCanvas component has been renamed canvas. >> The -state option changes the label to disabledforeground when the scrolledcanvas is disabled. >> Reimplemented geometry management using the grid instead of the packer. >> Changed component option basis to be that of the "usuals". >> Removed the margin frame components used for implementing a margin between the canvas and scrollbars. This is now accomplished via the grid by maintaining an empty row/column for the margin and adjusting its minsize. >> Updated the test script, demo, and man page. Scrolledframe ______________________________________________________________________________ >> Derived from the Scrolledwidget class which provides the vertical and horizontal scrollbars along with the options to control their display. >> POSSIBLE INCOMPATIBILITY - The childsite is now a protected component. If you need access to it, use the childsite command. >> POSSIBLE INCOMPATIBILITY - The scrCanvas component has been renamed canvas and the scrFrame component to sfchildsite. >> Reimplemented geometry management using the grid instead of the packer. >> Changed component option basis to be that of the "usuals". >> Fixed the infinite looping problem which would occur with -hscrollmode set to dynamic and a really long component added just out of the view port. As you'd scroll down the horizontal scrollbar bar would start flashing on and off. >> Removed the margin frame components used for implementing a margin between the canvas and scrollbars. This is now accomplished via the grid by maintaining an empty row/column for the margin and adjusting its minsize. >> Updated the test script, demo, and man page. Promptdialog ______________________________________________________________________________ >> Changed component option basis to be that of the "usuals". >> POSSIBLE INCOMPATABILITY - Renamed the "ef" component to "prompt". >> POSSIBLE INCOMPATABILITY - The following options have been removed and are not directly available in the promptdialog anymore: -fixed -justify -labelbitmap -labelimage -labelmargin -state -textvariable -width The underlying components still maintain them, but not the promptdialog itself. You can still set them via the component command, i.e. ".pd component prompt configure -labelpos w" >> Updated the test script, demo, and man page. Messagedialog ______________________________________________________________________________ >> Changed component option basis to be that of the "usuals". >> POSSIBLE INCOMPATABILITY - Renamed the "msg" component to "message". >> POSSIBLE INCOMPATABILITY - The following options have been removed and are not directly available in the messagedialog anymore: -anchor -justify -wraplength The underlying components still maintain them, but not the messagedialog itself. You can still set them via the component command, i.e. ".md component message configure -justify left" >> Reimplemented geometry management using the grid instead of the packer. >> Updated the test script, demo, and man page. Hierarchy ______________________________________________________________________________ >> New iwidgets hierarchical data viewer mega-widget which manages a list of nodes that can be expanded or collapsed. Individual nodes can be highlighted. Clicking with the right mouse button on any item brings up a special item menu. Clicking on the background area brings up a different popup menu. >> Many thanks to Michael McLennan who provided the nucleus of this code. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the hierarchy demo. Checkbox ______________________________________________________________________________ >> New iwidget checkbox mega-widget which manages a group of check buttons quite similar to that of the existing radiobox. >> Thanks to John Tucker for the contributed code. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the checkbox demo. Radiobox ______________________________________________________________________________ >> Changed component option basis to be that of the "usuals". >> Changed the base class to be labeledframe. >> Updated the test script, demo, and man page. Spinner ______________________________________________________________________________ >> Reimplemented geometry management using the grid instead of the packer. >> Removed a redundant frame component named "arrowFrame". >> Removed the use of the option database to set the option values. Spinint ______________________________________________________________________________ >> Removed the use of the option database to set the option values. Datefield ______________________________________________________________________________ >> New iwidget. The datefield is a smart date entry field with adjustable built-in intelligence levels. It can be made smart enough not to accept any bad dates or made dumb enough to accept any old thing typed. Since it is derived from the labeledwidget, it also includes an optional label. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the datefield demo. Calendar ______________________________________________________________________________ >> New iwidget. The calendar widget provide for the selection and/or display of dates. It displays a single month at a time. Buttons exist on the top to change the month in effect turning th pages of a calendar. As a page is turned, the dates for the month are modified. Selection of a date visually marks that date. The selected value can be monitored via the -command option or just retrieved using the get method. Methods also exist to select a date and show a particular month. The option set allows the calendars appearance to take on many forms. For example, the background of the weekdays and weekends can be independently changed, the starting day of the week can be set to any of the days, the titles and fonts of everything is configurable, and an outline can be displayed around the each day. >> Many thanks to Michael McLennan who provided me a early copy of his book which gave me the example on which this code is based. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the calendar demo. Dateentry ______________________________________________________________________________ >> New iwidget. Dateentry is a quicken style date entry field with a popup calendar produced by combining the datefield and calendar widgets together. This allows a user to enter the date via the keyboard or by using the mouse by selecting the calendar icon which brings up a popup calendar. Since it is based on both the datefield and calendar, both option sets exists under the same roof in the dateentry. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the dateentry demo. Messagebox ______________________________________________________________________________ >> New iwidget. Implements an information messages area widget with scrollbars. Message types can be user defined and configured. Their options include foreground, background, font, bell, and their display mode of on or off. This allows message types to defined as needed, removed when no longer so, and modified when necessary. The number of lines that can be displayed may be limited. When this limit is reached, the oldest line is removed. There is also support for saving the contents to a file, using the standard file selection dialog. >> Many thanks to Alfredo Jahn who came up with idea and provided me a very stable working version which I extended to support user defined message types. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the messagebox demo. Spintime ______________________________________________________________________________ >> Reimplemented geometry management using the grid instead of the packer. >> Removed the margin frame component used for implementing a margin between the hour, minute and second components. This is now accomplished via the grid by maintaining an empty row for the margin and adjusting its minsize. >> POSSIBLE INCOMPATIBILITY - The delete, clear, and insert methods have been removed. Use the show method to set the time. >> POSSIBLE INCOMPATIBILITY - The get method has been changed such that it returns the time as either a colon separated string or a clock clicks value. >> Added a show method to be used to set the time. The method takes as an argument either a valid time string, a clock clicks value, or the keyword now. >> The current time will now appear as the default. >> Updated the test script, demo, and man page. Spindate ______________________________________________________________________________ >> Reimplemented geometry management using the grid instead of the packer. >> Removed the margin frame component used for implementing a margin between the month, day and year components. This is now accomplished via the grid by maintaining an empty row for the margin and adjusting its minsize. >> Spindate now uses the clock command during the spinning of the date components. Only valid dates are spun now. >> POSSIBLE INCOMPATIBILITY - Changed the -monthformat option to be string, brief, and full doing away with the optional user specified list. >> POSSIBLE INCOMPATIBILITY - The delete, clear, and insert methods have been removed. Use the show method to set the date. >> POSSIBLE INCOMPATIBILITY - The get method has been changed such that it returns the date as either a string or a clock clicks value. >> Added a show method to be used to set the time. The method takes as an argument either a valid time string, a clock clicks value, or the keyword now. >> The current date will now appear as the default. >> Selection and keyboard entry of values has been disabled. The value may only be changed via the spinners which insures correct operation. >> Updated the test script, demo, and man page.. Feedback ______________________________________________________________________________ >> Reimplemented geometry management using the grid instead of the packer. >> Made all the itk_components public. >> Added a trough which appears beneath the feedback widget. It has a -troughcolor option to set its color. Scrolledhtml ______________________________________________________________________________ >> Added -alink (same as -linkhighlight, but matches html naming) and -update options. >> Added new tags to come up to html3.2: basefont div font table td th tr >> Added numbering formats for
  • tag. >> Fixed to delete images after page is cleared. >> Fixed to bring anchor points to middle when moving down to a nearby anchor point. >> Fixes to regular expression matches. >> Performance enhancements with stack algorithm and regular expression searches. Hyperhelp ______________________________________________________________________________ >> Added -closecmd and -maxhistory options. >> Made itk_components public/private (which could conceivably break someone, if they were using a component directly that is now private) >> Fixed bindings. Toolbar ______________________________________________________________________________ >> Added a destructor to cancel the possibly pending after command request to display the popup help. >> Corrected the vertical packing such that items are expanded horizontally. Finddialog ______________________________________________________________________________ >> New iwidget. Finddialog works in conjunction with a text or scrolledtext widget to provide a means of performing search operations. The user is prompted for a text pattern to be found in the text or scrolledtext widget. The search can be for all occurances, by regular expression, considerate of the case, or backwards. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the finddialog demo. Panedwindow ______________________________________________________________________________ >> Corrected show/hide bug which caused the placement of the sash and separator to be incorrect. If you added a couple of panes and then hid them all of them followed by showing them, the sash distribution was wrong. >> Corrected a divide by zero problem which occurred when you hid all of the panes. Combobox ______________________________________________________________________________ >> Mitch Gorman (emrys@net-gate.com) has taken over maintenance of the combobox from John Sigler. >> Entry completion has been added. Should your typing in the entry field match an item in the list, it is completed for you automatically. This feature is switchable via the -completion option. The default is on. >> It now utilizes a true button for the arrowBtn component. >> The -state option has been fixed such that it can be truly disabled. >> Reimplemented geometry management using the grid instead of the packer. >> A -grab option has been added to do both local and global grabs of the drop-down listbox. >> POSSIBLE INCOMPATIBILITY - Removed -items option. This was originally put in as a convienence, but it turns out to be quite costly in terms of performance. It had to go. The insert/delete/get commands can be used instead which is much more in line with Tk. >> POSSIBLE INCOMPATIBILITY - The following options have been removed: -autoclear and -fliparrow. >> The combobox now utilizes built-in bitmaps for button glyphs. >> Removed the margin frame component used for implementing a margin between the entry and arrow button. This is now accomplished via the grid by maintaining an empty column for the margin and adjusting its minsize. >> List elements are preserved when switching between drop-down and simple styles via the -dropdown option. >> The functionality of the -state and -editable options have been made completely independent of each other. It can be editable/normal, non-editable/normal, or disabled, and toggling one option will not impact the other option when the first is toggled back >> Corrected the validation processing in the -unique option. >> Fixed various error messages returned due to bad arguments, options, etc. Fileselectionbox ______________________________________________________________________________ >> Reimplemented geometry management using the grid instead of the packer. >> Changed component option basis to be that of the "usuals". >> Removed frame components used for margins. This is now accomplished via the grid by maintaining an empty row/column for the margin and setting its minsize. >> Changed the default value of -nomatchstring to "". >> The directory and files lists are now shown without the leading directory name. Although this differs from the Motif standard, it keeps the fileselectionbox more in line with the tk_getSaveFile dialog. >> POSSIBLE INCOMPATIBILITY - The -style option which allowed you to display the fileselectionbox in a "notif" style using comboboxes for the filter and selection and kept the lists in a panedwindow has been removed. A related option, -dirsfraction is also gone. This feature caused the fileselectionbox to be much slower during construction than anticipated. If you liked the "notif" style, it exists in a new mega-widget call extfileselectionbox and extfileselectiondialog. >> POSSIBLE INCOMPATIBILITY - The childsite is now a protected component. If you need access to it, use the childsite command. >> POSSIBLE INCOMPATABILITY - The following options have been removed and are not directly available in the fileselectionbox anymore: -relief -repeatdelay -repeatinterval -labelmargin -hscrollmode -sbwidth -scrollmargin -vscrollmode -dirslabelpos -fileslabelpos -filterlabelpos -selectionimage- selectionlabelpos -filterfocuscommand -selectionfocuscommand -dbldirscommand -dblfilescommand The underlying components still maintain them , but not the fileselectionbox itself. You can still set them via the component command, i.e. ".fsb component dirs configure -hscrollmode none" >> POSSIBLE INCOMPATIBILITY - The -horizmargin and -vertmargin options have been removed. I doubt if anybody other than the most picky of people will be effected. >> Added new childsite position orientation settings. The new positions are n, s, e, w, top, bottom, and center. >> Updated the test script and man page. Extfileselectionbox ______________________________________________________________________________ >> New Iwidget. The extfileselectionbox is basically the "notif" portion of the previous version of the fileselectionbox. It was separated from the fileselectionbox for performance reasons. >> Created test script, demo and man page. >> The catalog demo has been updated to include the extfileselectionbox demo. Tabset ______________________________________________________________________________ >> Corrected tab display problem which was occurring on HP machines. Some additional updates were installed in tab selection and deselection. They will only be invoke should the os be HP-UX. Also, the ability to scroll the tabs via MB2 has been disabled for HPs. Thanks to tilt@designacc.com (Thomas Tempero) for first reporting the problem mikesz@pcs.mot.com (Michael Szilagyi) for sending me the fix which was implemented. Timefield ______________________________________________________________________________ >> New iwidget. The timefield is a smart time entry field. It verifies user time input prior to its display. Since it is derived from the labeledwidget, it also includes an optional label. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the timefield demo. Watch ______________________________________________________________________________ >> New iwidget. The watch widget displays a simple clock face. Methods exist to set/get the time. The hands can be adjusted via mouse selection with the new setting being retrievable via the get method. It is very configurable. The colors of the hands, face, and marks can all be changed to suit your needs. >> Many thanks to John Tucker who developed this nice widget. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the watch demo. Timeentry ______________________________________________________________________________ >> New iwidget. Timeentry, like the dateentry, is along the quicken lines as well. It displays a timefield with a watch icon button beside it. Selection of button presents a popup watch which enables you to select the time by dragging the hands about the face. The popup has a close button that removes the popup and sets the timefield to the value previously displayed in the watch. You can also just enter the time directly as you would in the standard timefield. >> Man page, test script, and demo have been produced. >> The catalog demo has been updated to include the timeentry demo. ========================================================================== -------------------------- iwidgets-2.1.1 ------------------------------ -------------------- CHANGES FROM iwidgets-2.1.0 ----------------------- ========================================================================== [incr Widgets] version 2.1.1 is compatable with itcl2.1 NEW FEATURES ------------------------------------------------------------------------------ >> Added pagecget method to notebook class. Patch supplied by Tom Tromey (tromey@cygnus.com). >> Added buttoncget method to buttonbox class. Patch supplied by Tom Tromey (tromey@cygnus.com). >> Added buttoncget method to dialogshell class. Patch supplied by Tom Tromey (tromey@cygnus.com). >> Added -closecmd option to the hyperhelp mega-widget. Previously, closing the hyperhelp widget deleted the object which was deemed to be user hostile. Now, there exists a -closecmd option which defaults to just deactivating the widget. Should you wish to destroy the widget, either do so explictly or modify the -closecmd to do it. BUG FIXES ------------------------------------------------------------------------------ >> Corrected selectborderwidth option class name in the toolbar The class name was set to SelectBorderWidth rather than BorderWidth. This created problems when attempting to use the toolbar with other widgets like the scrolledcanvas. Bug report by csmith@adc.com (Chad Smith). >> Allow negative indexes in scrolledlistbox Negative indicies are reasonable and valid. Bug report by wfarel@cas.org (Bill Farel). >> Corrected problem with caps-lock and num-lock in entryfields Validation was not being being done if the num-lock or caps-lock keys are down. Bug report by ronnie@r2d2.wink.com (Ronnie Carpio). >> Corrected problem with special character entry in entryfields Upon entry of a special character in the entry field like \ or [ an error would be reported: "Error: missing "". The substitutions being performed in iwidgets::Entryfield::_keyPress have been corrected. Bug report and patch provided by ronnie@r2d2.wink.com (Ronnie Carpio). >> Made the relayout method in pushbutton protected. The relayout method in the pushbutton needed to be changed from private to protected so parent classes can have access. Bug discovered by Mario Weilguni >> Corrected html tag parsing in scrolledhtml mega-widget Fixed regular expressions parsing html tags to ignore text in quotes and only examine first attribute in list. >> Corrected optionmenu insert bug The option menu would not allow you to insert an entry beyond the current length of the popup menu. It should just default to using the end in this case. >> Corrected scrolledtext import method newline insertion problem There was a bug in the scrolledtext widget. It always inserted a newline before the text of the file when doing an "import". And it didn't correctly preserve a trailing newline on the file. Reported by Tom Tromey (tromey@cygnus.com) >> Corrected minor problems in notebook class. The index method gave an error if (eg) "select" wass passed but there is no selection. Instead it should return -1 as documented. Changed it to always return -1 in case of error. This makes more sense. If there are no items in the notebook, the -scrollcommand should still be run (if it is set). Otherwise, you end up with a scrollbar that looks odd, and when you try to scroll you get errors. Changed it so that it will tell the scrollbar that the entire notebook is being displayed. Reported by Tom Tromey (tromey@cygnus.com) >> Corrected menubar menucget command to return errors for bad options. The command " menucget .element" returned something other than an error message. This has been corrected. Reported by Tom Tromey (tromey@cygnus.com) >> Corrected menubar man page. The usage for the menubar menucget command was wrong and has been fixed. Reported by Tom Tromey (tromey@cygnus.com) INCOMPATIBLE CHANGES ------------------------------------------------------------------------------ ========================================================================== -------------------------- iwidgets-2.1.0 ------------------------------ -------------------- CHANGES FROM iwidgets-2.0.1 ----------------------- ========================================================================== [incr Widgets] version 2.1.0 is compatable with itcl2.1 NEW FEATURES ------------------------------------------------------------------------------ >> Eliminated unneeded update idletask calls. Went through many of the [incr Widgets] and got rid of those update idletask calls that were not really needed. This should speed a few of them up a bit. >> The hyperhelp mega-widget has been enhanced such that topic items don't need to be in the help directory. It's just an added option in specifying topics. To use it, you would replace '-topics {topic1 topic2 topic3}' with '-topics {topic1 {topicname2 filename2} {topic3 filename3}}'. In other words, you only have to change where you want to specify a pathname. If you don't specify a filename, everything works the same. >> Added a -autoclear option to the combobox. The combobox was doing an automatic erasure of the entry field contents upon hitting return. With this option, you can turn that off but it still puts the string in the list. >> Added a -master option to the shell class. The shell made all instances transient with "." as the master. With this option, you can change the master to other toplevels. The default is no master for shells, and "." for all dialogs which are derived from shell. >> Added a -style option to the fileselectionbox and fileselection dialog. Tony Parent did a great job of augmenting the fileselectionbox with a style option that allows you to change the layout from the standard motif look-and-feel to a better than motif layout. This new layout is called notif and features comboboxes for the filter and selection entry fields and a paned window contains the two listboxes allowing you to change the allocation of space for the lists. >> Removed the center childsite position for the fileselectionbox. This is a side effect of the notif change made by Tony Parent. It just isn't easy to have a center position when your in a pane window. It is a small sacrifice for the having an alternate layout of the fileselectionbox. BUG FIXES ------------------------------------------------------------------------------ >> The makefile was amended to install the unknown.gif file correctly. The hyperhelp and scrolledhtml widgets need an unknown gif file that is used when unable to load an image. The makefile was not properly installing it. >> The scrolledhtml.n man page was fixed to allow man2html to work. The scrolledhtml.n file had a bug which would hang man2html during a "make install-html". The bug affected only the htmling of the file not the man page itself. INCOMPATIBLE CHANGES ------------------------------------------------------------------------------ ========================================================================== -------------------------- iwidgets-2.0.1 ------------------------------ -------------------- CHANGES FROM iwidgets-2.0.0 ----------------------- ========================================================================== [incr Widgets] version 2.0.1 is compatable with itcl2.0 NEW FEATURES ------------------------------------------------------------------------------ >> Added extra frame around canvas widget in Scrolledcanvas class The borderwidth, relief, and hightlight options have been removed from the canvas widget and placed on the new encompassing frame widget. This fixes the problem with canvas widgets including the border and highlight ring in the clipping region. >> Added extra frame around text widget in Scrolledtext class The borderwidth, relief, and hightlight options have been removed from the text widget and placed on the new encompassing frame widget. This fixes the problem with text widgets including the border and highlight ring in the clipping region. >> The canvasprintbox stamp supports resizing and default print buttons Tako Schotanus updated the canvasprintbox such that the stamp now gets updated whenever the window is resized. Also, he modified the dialog default buttons to be Print, Apply and Cancel. Apply does a refresh and Print does what you'd expect. >> Added feedback mega-widget to [incr Widgets] The feedback widget is a gage for displaying process status. Display is given as a percentage and as a thermometer type bar. Options exist for adding a label and controlling its position. Special thanks go to Sam Shen(SLShen@lbl.gov), as this code is based on his feedback.tcl code from tk inspect. The original code is copyright 1995 Lawrence Berkeley Laboratory. >> Added scrolledhtml mega-widget to [incr Widgets] The scrolledhtml widget implements a scrollable html text widget through inheritance from scrolledtext. Import reads from an html file, while export still writes plain text. Also provides a render command, to display html text passed in as an argument. Special thanks go to Sam Shen(SLShen@lbl.gov), as this code is based on his tkhtml.tcl code from tk inspect. The original code is copyright 1995 Lawrence Berkeley Laboratory. >> Added hyperhelp mega-widget to [incr Widgets] The hyperhelp widget implements a help facility using html formatted hypertext files. Special thanks go to Sam Shen(SLShen@lbl.gov), as this code is based on his help.tcl code from tk inspect. >> Added menubar mega-widget to [incr Widgets] Actually it was kind-of already an iwidget. It was living in the incoming directory for a time. No one had a complaints about it so now it is a full citizen. BUG FIXES ------------------------------------------------------------------------------ >> Corrected spurious quote in toolbar.itk Thanks to Tom Tromey for finding this elusive little buglet and sending the patch. Wish all problems were reported in this manner. >> Corrected problem with dialogs being unable to acquire a grab. The dialogshell activate method would generate an error if unable to acquire a grab for application and global modal dialogs. The fix installed adds a catch and a reattempt loop with a delay. In other words, the dialog shell will continuously attempt to acquire the grab with a delay between attempts. >> Corrected problem with pushbutton not displaying the tab traversal ring. The pushbutton would not display the tab traversal ring when the default ring was enabled. This has been corrected. >> Corrected scrolledlistbox getcurselection method with multiple selectmode. If the current scrolledlistbox selectmode is multiple, then the getcurselection method should always return the selected items as a list, regardless of the number of items selected. It used to return a list only if more than one item is selected. >> Buttonbox wasn't adjusting geometrically following hides if not mapped. Bernard Johnson from TI was good enough to find this one. It could be seen by creating a dialog, activating, deactivating, then hiding a button. Next, activate it again and you'd notice that the dialog's buttonbox had not been resized. The problem was that the resizing of the buttonbox was bound to the map event, which once mapped, was removed when it shouldn't have been. >> Buttonbox wasn't adjusting properly following button additions which were preceeded by deletions. Greg McFarlane found this one. The buttonbox needed to do perform and update idletasks following the sizing of the box during a deletion. Otherwise, the values returned by winfo were incorrect during a subsequent button addition. >> Removed underlining of listbox items in the combobox. Milind Khandekar requested that this feature be removed. It was annoying. INCOMPATIBLE CHANGES ------------------------------------------------------------------------------ ========================================================================== -------------------------- iwidgets-2.0.0 ------------------------------ -------------------- CHANGES FROM iwidgets-2.0b4 ----------------------- ========================================================================== [incr Widgets] version 2.0.0 is compatable with itcl2.0 NEW FEATURES ------------------------------------------------------------------------------ >> The copyright has been assigned to DSC Communications Corporation. The copyright has been transferred from private individuals to DSC. It is still an open copyright, just changes in the legalize wording. >> Added several new mega-widgets. The new mega-widgets include the toolbar, tabnotebook, tabset, and notebook. Check the man pages for details. >> Added demo catalog. The demos directory now contains a catalog program. It displays the code for each demo upon single select. Double-click starts the demo. >> Added incoming directory for experimental mega-widgets. An incoming directory exists in the distribution which contains beta state mega-widgets. They are not installed, but do include the needed doc, demos, and tests. These mega-widgets may or may not make the cut. Please send feedback on their viability. If enough positive response is felt, then they will be moved up. Otherwise, I'll move them to an outgoing directory and later delete them altogether. >> With the introduction of the new itcl-2.0b3 code command, the following changes were required. All "bind" and "after" commands now use "code". All "-command" options and scrollbar commands now use "code". Removed "uplevel /scope" combinations from command type options. Replaced "eval" with "uplevel #0" for evaluation of command options. >> Added curselection method to selectionbox and selectiondialog class. The curselection command from the contained listbox of the selectionbox has been thinwrapped. >> Removed BLT dependency for implementing application modal dialogs. The dialogshell class no longer uses blt_busy for application modal dialogs. Instead, local grabs are performed. The benefits are speed and extension independence. Minus is the loss of the watch cursor which blt_busy used. I figure, programmers wanting the cursor action can implement it themselves on an as needed basis. >> Added a grab stack in the dialogshell. The dialogshell uses a grabstack to keep track of the current blocking levels. Thus a application modal dialog can activate another one and upon closing the last one, the next one in the stack gets the block. This feature did not exist before. >> Replace "after 1" commands with "after idle" This produces the same result, but makes for a cleaner syntax. >> Added center command to the dialogshell. The dialogshell provides a center command which takes an optional argument of the path for another widget. Upon activation, the dialogshell will be centered with respect to it. The command may also be invoked with no arguments to center the dialogshell on the screen as a whole. Since all other dialog classes are derived from dialogshell, all dialogs now have the center command available. >> Made the Help button hidden by default for dialogs Most people turn it off right away anyway. It is still there. Just need to do a "show Help" if you need it back. >> Comboxbox now derived from entryfield. The combobox structure has been modified to be derived from the entryfield class. Now combobox labels can be aligned using the labeledwidget alignlabels method along with optionmenus, entryfields and such. >> Added -justify and -wraplength to Messagedialog. The justify and wraplength options are now kept for the label in the messagedialog widget. >> Added a man page generator for itcl. In the doc directory is a new utility called mkitclman. It does a good job at an initial pass of man page generation for new iwidget classes. You still need to get in there and beef up the man page which is produced, but it is better than starting from scratch. >> Added the canvasprintbox and canvasprintdialog mega-widgets. Two new mega-widgets, canvasprintbox and canvasprintdialog, have been contributed to [incr Widgets]. Thanks to Tako Schotanus, Tako.Schotanus@bouw.tno.nl. >> Added the textbackground option to the scrolledcanvas widget The textbackground option has been added to the scrolledcanvas widget similarly to the scrolledlistbox and entryfield widgets. BUG FIXES ------------------------------------------------------------------------------ >> Enabled repeat action in spinners. This was available in iwidgets two versions ago. I made in incorrect merge and lost the change. It has now been added back into the spinner. >> Eliminated use of #auto in panedwindow. Using #auto made the test script fail should you run it two times in a row. Instead, the class keeps its own unique counter which is always reset upon construction. This was more of an annoyance than a bug. >> Corrected selection problem in selectiondialog. The selectiondialog wasn't configuring the itemscommand properly, so selection of an item was not reflected in the selection entryfield. >> Corrected index usage problem in buttonbox insert method. The buttonbox insert method didn't correctly convert the index argument prior to inserting the new pushbutton. This has been fixed. >> Corrected flicker problem in scrolled* widgets. Modified the scrolled* widgets to only change the current scrollbar display if different than the current setting. This fixes the flicker problem which was apparent during horizontal scrolling. >> Entryfield command option performs a break. Following evaluation of the command option for entryfield widgets, a break is performed. This caused a problem when entryfields were in a dialog. Hitting return in the entryfield, invoked the dialogs default button. This has been fixed. INCOMPATIBLE CHANGES ------------------------------------------------------------------------------ >> Removed -highlightbackground option from mega-widgets All the -highlightbackground options have been renamed to be -background. This was always an annoyance anyway. Now, setting the -background changes all the highlightbackgrounds as well. Should anybody still for some odd reason need -highlightbackground, just access the component with the "component name configure" command. ========================================================================== -------------------------- iwidgets-2.0b0 ------------------------------ -------------------- CHANGES FROM iwidgets-2.0b1 ----------------------- ========================================================================== [incr Widgets] versions b1, b2, b3, and b4 are compatable with itcl-2.0b2 NEW FEATURES ------------------------------------------------------------------------------ >> A secondary lower case mega-widget command now exits. Mega-widgets can now be created using the new lower case, more tk'ish method or still using the class name. Entryfield .ef and entryfield .ef both perform the same operation. >> The demos should now all work. The correct wish is now called. itkwish instead of the old itcl_wish. >> The man pages have all been updated to the best of my ability. >> A new more minimal format for the code style has been implemented. The class declaration only contains declarations. All implementation is spearate. This creates a much more readable class. >> All class file names as well as the tests, doc, and demos are all lower case. >> Several new validate types such as hexidecimal and real have been added to the Entryfield. >> The Panedwindow class additional commands: A paneconfigure command exists for configuring indiviual tagged panes. panedwindow .pw .pw add first .pw add last .pw paneconfigure first -margin 10 An insert command exists. It takes an index and tag as arguments followed by optional arguments to be applied to the pane. .pw insert end second -minimum 20 >> The Buttonbox class now has additional commands: A buttonconfigure command exists for configuring indiviual tagged buttons. buttonbox .bb .bb add OK -text OK .bb add Cancel -text Cancel .bb buttonconfigure OK -command [list puts OK] An insert command has been added. It takes an index as the first arg, followed by the tag and button arguments. .bb insert Cancel Apply -text Apply The invoke command no long excepts a list of buttons to invoke. That didn't make much sense. It takes an optional index for a single button to invoke. Without any arguments, the default button is invoked. BUG FIXES ------------------------------------------------------------------------------ >> Corrected scrolled* packing The packing order of all the scrolled* mega-widgets has been modified such that the scrollbars are the last to be clipped. >> Corrected buttonbox single button centering The buttonbox has been modified such that a box with only one button will be correctly centered. >> scrolledlist selection corrected The -selectioncommand is now invoked following any selection of an item, regardless if it was already selected. The programmer must now determine if the selected item has changed if necessary. The previous approach of only invoking the -selectioncommand if the selection has changed caused too many problems, making it behave erraticly. >> Corrected problems preventing classes being derived from scrolled* classes Several variables were incorrectly declared to be private rather than protected. Also, the _scroll* method was incorrectly declared private instead of protected. These problems prevented inheritance from the scrolled* classes. INCOMPATIBLE CHANGES ------------------------------------------------------------------------------ >> The class names are now upper case on the first character only. Class names have been changed to be upper case on the first character only to be more X'ish. Old class names like EntryField are now Entryfield. >> All public methods are now all lowercase. This effects the typical common method such as childsite. Others effected include : ::iwidgets::Labeledwidget::alignlabels >> Labeledwidget class changes: The -labelon option has been removed. The mega-widget now unpacks both the label and margin if neither the -labeltext, -labelbitmap, or -labeimage have a value. The -font option has been removed. The -labelfont option should be used instead. >> Entryfield class changes: The -labelon option is not inherited by the Entryfield anymore. See the Labeledwidget changes above. The Entryfield fixed option has a different meaning. It now specified the maximum number of characters allowed. A value of zero is unlimited. This frees up the width option to be able to specify a greater number of characters than the fixed amount for visual effect. The -type and -validate options have been combined to just -validate which now takes either a type keyword or a command. The command receives additional trailing arguments consisting of the input character and the the widget. I hope to change this soon to use substitutions like %c for the character at a later date. The -background option has been removed. The -textbackground option should be used instead. The -validate option now has several substitution strings which may be passed to the validation script. >> ScrollBar class changes: It has been deleted. It wasn't a big win. The only benefit was that the -background option automatically calculated the troughcolor at 80% of its value. It's just as easy to use the option database and change the Tk scrollbar troughcolor to whatever value is desired. The various scrolled* classes now all use the straight Tk scrollbar. >> Panedwindow class changes: Panes are now tagged. This means the add, and insert methods take an additional argument which is the tag for that pane. The panedwindow index method now takes the tag as well as the number and keyword "end". Other methods such as delete, hide, and show now can use the pane tag as an index. panedwindow .pw .pw add bottom .pw insert 0 top .pw insert 1 middle .pw delete middle The refresh method has been renamed to reset. The semi-private -state option has been removed. The only method of controlling the display of panes is via the hide and show methods. >> Dialogshell class changes: The modality option value of "system" has been renamed to be "global" >> Dialog class changes: All the options for the buttons have been removed. The buttonconfigure method should be used instead. The class simply creates the standard OK, Apply, Cancel, and Help buttons tagged by their default labels. The buttonconfigure method can be used to make modifications to the buttons. The hide and show methods should now be used instead of the the -disp* options. dialog .d .d buttonconfigure OK -text Enter .d hide Help .d hide Apply The -orient option is no longer kept. It seemed rarely used if at all. The -buttonboxpos option handles the mojority of the cases as is. >> Scrolledcanvas class changes: The binditem method is now been renamed back to bind. This is what it should have been all along. A problem in the alpha version of [incr Tcl] prevented use of this word. iwidgets-4.1.1/ChangeLog0000644003604700454610000014412411602441614013506 0ustar dgp771div2011-06-28 Andreas Kupries * configure.in: Modified --with-itcl to look for DIR/library/itcl.tcl, not DIR/itcl/library/itcl.tk. Further added the option --with-itk to look for DIR/library/itk.tcl. Done to handle the split of the itcl/itk CVS repository into two fossil repositories. * configure: (Regenerated). 2008-08-20 Jeff Hobbs * generic/disjointlistbox.itk (::iwidgets::disjointlistbox): fix 8.5 grid anchoring. [Bug 2062394] 2007-06-10 Jeff Hobbs * generic/shell.itk (::iwidgets::shell): fix problem with "tkwait visibility" in iwidget's dialog box (allaert) * generic/pushbutton.itk (::iwidgets::pushbutton): handle Tk 8.4 frame padx/y changes. * iwidgets.tcl.in: don't add non-existent path to auto_path * generic/datefield.itk (::iwidgets::datefield): use string match instead of regexp 2007-05-24 Jeff Hobbs * generic/combobox.itk: use -state readonly for combobox. [Bug 998874] (griffin) * generic/calendar.itk: 8.5-compatible last day of month calculation. [Bug 1311531] (broeken) * demos/catalog: make location independent. [Bug 1631754] (kupries) 2006-04-11 Jeff Hobbs * generic/extfileselectionbox.itk (iwidgets::Extfileselectionbox::_setDirList): set currentIndex to default value 2005-04-11 Jeff Hobbs * configure, tclconfig/tcl.m4: TEA 3.2 update * configure.in (AC_PROG_INSTALL): add back @INSTALL*@ check 2005-01-24 Jeff Hobbs * tclconfig/install-sh, tclconfig/tcl.m4 (new): * tcl.m4 (removed): * Makefile.in, aclocal.m4: Updated to TEA 3.1 build system * configure, configure.in: * iwidgets.tcl.in, pkgIndex.tcl.in: 2002-10-25 Andreas Kupries * configure.in: Added determination of EXEEXT or else SC_PROG_TCLSH may pick up the wrong file as executable (In my case it mistook tclsh83g.pdb for the tclsh). Regen'd configure. 2002-09-25 Jeff Hobbs * Makefile.in: improved libdir support (steffen) 2002-09-22 Marty Backe * generic/shell.itk: SF ticket 611739 Changed _return from a private to protected. * generic/entryfield.itk bindings are now passed to the parent unless the -command option is defined. 2002-09-09 Chad Smith ******************************** **** IWIDGETS 4.0.1 RELEASE **** ******************************** * Makefile.in: SF ticket 227921 Updated man page installation such that "iwidgets_" is now prepended to the man page filename. This is done to avoid naming conflicts with man pages in other extensions. 2002-09-09 Chad Smith * generic/scrolledtext.itk * doc/scrolledtext.n * doc/scrolledhtml.n * demos/html/scrolledtext.n.html * demos/html/scrolledhtml.n.html * tests/scrolledtext.test * tests/scrolledhtml.test SF ticket 532602: added -tabs to scrolledtext (and scrolledhtml due to inheritance) 2002-09-08 Marty Backe * generic/combobox.itk Fixed SF bug 501300 - keyboard navigation was not working properly if any items were null 2002-09-06 Chad Smith * generic/hierarchy.itk: SF ticket 596111 After reconfiguring -querycommand, the text component lost its tag configuration. Added code to reset the hilite, lowlite, and info tags. 2002-09-05 Chad Smith * generic/hierarchy.itk: SF ticket 600941 Marked node lost its highlighting when parent folder closed and reopened 2002-09-05 Chad Smith * generic/canvasprintbox.itk: SF ticket 560153 Wouldn't print to a filename other than "canvas.ps". 2002-09-05 Chad Smith * generic/tabnotebook.itk: SF ticket 514222 Patch added for infinite loop problem introduced by new -padx and -pady Tk frame widget options in 8.4 2002-09-05 Chad Smith * generic/tabnotebook.itk: SF ticket 603823 Patch for bugs related to the -int option * generic/calendar.itk: SF ticket 603823 Found bug while testing the dateentry patch. Several methods expected -int to be set to "yes" or "no" 2002-03-24 Marty Backe * generic/disjointlistbox.itk Applied patch sumitted by Brett Schwarz to add two new sort options which determine how items are added to each scrolledlistbox. Did some various code formatting cleanup. * doc/disjointlistbox.n Updated the man page to reflect the addition of the two sort options. * demos/html/disjointlistbox.n.html Updated the html version of the man page * tests/disjointlistbox.test Added tests for the the two new options. 2002-03-19 Marty Backe * generic/messagebox.itk Modified the save method to center the tk_getSaveFile dialog on the messagebox window. 2002-03-16 Marty Backe * generic/scrolledlistbox.itk: SF Patch 494696 Applied patch submitted by Brett Schwarz to change the sort method to accept any sort arguments allowed by Tcl's lsort. Modified patch to generate an appropriate error message if an invalid sort argument is provided. * doc/scrolledlistbox.n Updated the man page to reflect the new sort arguments. * demos/html/scrolledlistbox.n.html Updated per change to doc/scrolledlistbox.n * tests/scrolledlistbox.test Updated the 'fail test' to reflect the new error message generated by an invalid sort argument. * tests/combobox.test Updated the sort 'failed test' to reflect the new error message generated by an invalid sort argument. Fallout from patch to scrolledlistbox.itk. See above. 2002-03-15 Marty Backe * generic/messagebox.itk Fixed a couple of bugs relating to the popup menu 'Save' function: 1) The filename that was saved to was also echoed to the messagebox. Unfortunately the variable referenced was not valid, so a stack trace followed any Save operation. 2) The message 'issued' to the messagebox from item 1) above used the tag INFO, which doesn't exist by default. I choose to remove the 'issue' after a file Save. The widget really shouldn't contribute anything to the messagebox output. The user of the messagebox iwidget should have control over what gets displayed. Changed the 'export' method to directly use the scrolledtext 'export' method instead of re-implementing it within this widget. Rearranged the layout of the popup menu. Moved the 'Clear' menu to the end of the list. It was too easy to generate the popup and accidentally choose the 'Clear' function. * generic/hyperhelp.itk Removed the 'error' statement that would cause any application that used Hyperhelp to stacktrace if a file to be rendered couldn't be opened. It's now just a silent error. Perhaps a -errorcommand option could be added later. 2002-03-10 Marty Backe * generic/extfileselectionbox.itk: SF ticket 482080 Fixed SF ticket 482080 - wrapped _pwd in quotes Fixed newly discovered bug: When the current directory contains a directory named after a punctuation mark (e.g., ! '). Method _setDirList was always setting the Dir listbox selection to index 0, which is normally ".", unless the directory contains a directory named after a punctuation mark. Now it gets set to "." regardless. 2002-02-26 Marty Backe * generic/radiobox.itk: SF ticket 521332 Fixed various bugs: 1) Traces weren't being released when the object was destroyed. 2) Small memory leak - _modes($this) array element not deleted when the object was destroyed. 3) If the -command option was defined, the command would be triggered when the first radiobutton was added via the add method. Added a destructor to fix bugs 1 & 2. Modified the constructor to fix bug 3. * generic/extfileselectiondialog.itk: SF ticket 521335 Added the -sashcursor option (was already defined in the man page, but wasn't implemented). * tests/radiobox.test: Added test to check for bug number 3 above. * tests/extfileselectiondialog.test: Added 2 option tests for -sashcursor & -labelfont. Updated the option count test. 2002-02-24 Marty Backe * generic/datefield.itk Fixed bugs introduced in previous patch - unbraced 'if' conditionals * generic/tabset.itk Fixed bug introduced in previous patch - 'code' used instead of 'itcl::code'. * generic/shell.itk: SF ticket 521338 The 'center' method now properly centers windows that have been resized between calls to center. * generic/scrolledlistbox.ikt: SF ticket 521326 The binding was removed to eliminate multiple triggers of the command specified by the -selectioncommand option if the mouse is moved while the item is being selected. 2002-02-16 Marty Backe * generic/scrolledhtml.itk: SF ticket 481956 Fixed potential for lengthy page renderings to throw a bgerror. 2001-12-11 Chad Smith * generic/combobox.itk: SF ticket 474817 Fixed an auto-completion problem. 2001-12-07 Chad Smith * generic/tabset.itk: Added patch submitted by Reinhard Max to optimize tab addition. 2001-11-29 Chad Smith * configure.in: * Makefile.in: SF tickets 462528 and 486735 Removed a lot of unnecessary variables. Updated configure.in so that autoconf-generated version matches the configure script that is included (thanks Andreas). Removed --with-itk and changed --with-itcl to be required if Iwidgets is not installed direcly underneath toplevel Itcl directory. 2001-09-20 Chad Smith * generic/shell.itk: SF ticket 227885 Added an 'update idletasks' to flush the event loop after activating a shell iwidgets. 2001-09-18 Chad Smith * generic/radiobox.itk: SF ticket 227923 Added code to keep users from modifying -variable and -value radiobutton component options. 2001-09-17 Chad Smith * generic/entryfield.itk: SF ticket 227912 Corrected some pasting problems. 2001-09-14 Chad Smith * generic/tabset.itk: SF ticket 460879 Commented out a line of code to keep the tab from forcing focus on the hull frame on . 2001-09-14 Chad Smith * generic/tabnotebook.itk: SF tickets 452803 and 461471 Had to do an "undo" of some previous code that was causing an infinite resizing on events. 2001-08-07 Chad Smith ******************************** **** IWIDGETS 4.0.0 RELEASE **** ******************************** * Merged iwidgets_overhaul branch to CVS head. This branch included all modifications necessary to extract the iwidgets from the itcl distribution. 2001-07-17 Jeff Hobbs * Makefile.in: removed attempt to install $(GENERIC_DIR)/*.tcl from install-libraries target as there aren't any .tcl files there since the removal of generic/scopedobject.tcl. This was resulting in an error on install. 2001-05-24 davygrvy * ChangeLog (added): Auto gen'd this from output of `cvs log`. This will help us make a nice quality digest of the changes done for a release. 2001-05-23 davygrvy * .cvsignore: * configure: * configure.in: Updated patch level to 3.0.2 in prep for a release. 2001-05-22 davygrvy * win/iwidgets.tcl: * win/makefile.vc: * win/pkg.vc: makefile.vc actually works again. * win/pkgIndex.tcl: we'll auto gen these from the makefile * win/makefile.vc: got catalog.tcl installing 2001-05-21 davygrvy * demos/demo.html: Moved change on the old iwidget3.0.0 to the new repository tree for Iwidgets 2001-05-19 davygrvy * generic/menubar.itk: * generic/tabnotebook.itk: Moved Chad's changes to the new repository files from the old iwidgets3.0.0 2001-05-18 davygrvy * generic/scopedobject.tcl: removed due to copy 2001-04-25 davygrvy * generic/colors.itk: * win/catalog.bat: * win/makefile.bc: * win/tclIndex: cleaning of prior 2.2.0 import to match the correct HEAD * CHANGES: * Makefile.in: * README: * aclocal.m4: * configure: * configure.in: * demos/buttonbox: * demos/canvasprintdialog: * demos/catalog: * demos/combobox: * demos/demo.html: * demos/dialog: * demos/dialogshell: * demos/entryfield: * demos/feedback: * demos/fileselectionbox: * demos/fileselectiondialog: * demos/html/buttonbox.n.html: * demos/html/canvasprintbox.n.html: * demos/html/canvasprintdialog.n.html: * demos/html/combobox.n.html: * demos/html/dialog.n.html: * demos/html/dialogshell.n.html: * demos/html/entryfield.n.html: * demos/html/feedback.n.html: * demos/html/fileselectionbox.n.html: * demos/html/fileselectiondialog.n.html: * demos/html/hyperhelp.n.html: * demos/html/iwidgets2.2.0UserCmds.html: * demos/html/labeledwidget.n.html: * demos/html/menubar.n.html: * demos/html/messagedialog.n.html: * demos/html/notebook.n.html: * demos/html/optionmenu.n.html: * demos/html/panedwindow.n.html: * demos/html/promptdialog.n.html: * demos/html/pushbutton.n.html: * demos/html/radiobox.n.html: * demos/html/scrolledcanvas.n.html: * demos/html/scrolledframe.n.html: * demos/html/scrolledhtml.n.html: * demos/html/scrolledlistbox.n.html: * demos/html/scrolledtext.n.html: * demos/html/selectionbox.n.html: * demos/html/selectiondialog.n.html: * demos/html/shell.n.html: * demos/html/spindate.n.html: * demos/html/spinint.n.html: * demos/html/spinner.n.html: * demos/html/spintime.n.html: * demos/html/tabnotebook.n.html: * demos/html/tabset.n.html: * demos/html/toolbar.n.html: * demos/hyperhelp: * demos/images/mag.gif: * demos/images/poly.gif: * demos/images/ruler.gif: * demos/images/select.gif: * demos/iwidgets.gif: * demos/labeledwidget: * demos/menubar: * demos/messagedialog: * demos/notebook: * demos/optionmenu: * demos/panedwindow: * demos/promptdialog: * demos/pushbutton: * demos/radiobox: * demos/scrolledcanvas: * demos/scrolledframe: * demos/scrolledhtml: * demos/scrolledlistbox: * demos/scrolledtext: * demos/selectionbox: * demos/selectiondialog: * demos/spindate: * demos/spinint: * demos/spinner: * demos/spintime: * demos/tabnotebook: * demos/tabset: * demos/toolbar: * doc/buttonbox.n: * doc/canvasprintbox.n: * doc/canvasprintdialog.n: * doc/combobox.n: * doc/dialog.n: * doc/dialogshell.n: * doc/entryfield.n: * doc/feedback.n: * doc/fileselectionbox.n: * doc/fileselectiondialog.n: * doc/hyperhelp.n: * doc/iwidgets.ps: * doc/labeledwidget.n: * doc/man.macros: * doc/menubar.n: * doc/messagedialog.n: * doc/mkitclman: * doc/notebook.n: * doc/optionmenu.n: * doc/panedwindow.n: * doc/promptdialog.n: * doc/pushbutton.n: * doc/radiobox.n: * doc/scrolledcanvas.n: * doc/scrolledframe.n: * doc/scrolledhtml.n: * doc/scrolledlistbox.n: * doc/scrolledtext.n: * doc/selectionbox.n: * doc/selectiondialog.n: * doc/shell.n: * doc/spindate.n: * doc/spinint.n: * doc/spinner.n: * doc/spintime.n: * doc/tabnotebook.n: * doc/tabset.n: * doc/tk2html: * doc/tk2html.awk: * doc/tk2html.perl: * doc/tk2html2.awk: * doc/toolbar.n: * generic/buttonbox.itk: * generic/canvasprintbox.itk: * generic/canvasprintdialog.itk: * generic/colors.itk: * generic/combobox.itk: * generic/dialog.itk: * generic/dialogshell.itk: * generic/entryfield.itk: * generic/feedback.itk: * generic/fileselectionbox.itk: * generic/fileselectiondialog.itk: * generic/hyperhelp.itk: * generic/labeledwidget.itk: * generic/menubar.itk: * generic/messagedialog.itk: * generic/notebook.itk: * generic/optionmenu.itk: * generic/pane.itk: * generic/panedwindow.itk: * generic/promptdialog.itk: * generic/pushbutton.itk: * generic/radiobox.itk: * generic/scrolledcanvas.itk: * generic/scrolledframe.itk: * generic/scrolledhtml.itk: * generic/scrolledlistbox.itk: * generic/scrolledtext.itk: * generic/selectionbox.itk: * generic/selectiondialog.itk: * generic/shell.itk: * generic/spindate.itk: * generic/spinint.itk: * generic/spinner.itk: * generic/spintime.itk: * generic/tabnotebook.itk: * generic/tabset.itk: * generic/tclIndex: * generic/toolbar.itk: * generic/unknownimage.gif: * incoming/README: * incoming/doc/man.macros: * incoming/tests/all: * incoming/tests/defs: * iwidgets.tcl.in: * license.terms: * outgoing/README: * pkgIndex.tcl.in: * tests/all: * tests/all.tcl: * tests/buttonbox.test: * tests/canvasprintbox.test: * tests/canvasprintdialog.test: * tests/combobox.test: * tests/defs: * tests/dialog.test: * tests/dialogshell.test: * tests/entryfield.test: * tests/feedback.test: * tests/fileselectionbox.test: * tests/fileselectiondialog.test: * tests/hyperhelp.html: * tests/hyperhelp.test: * tests/labeledwidget.test: * tests/menubar.test: * tests/messagedialog.test: * tests/notebook.test: * tests/optionmenu.test: * tests/panedwindow.test: * tests/promptdialog.test: * tests/pushbutton.test: * tests/radiobox.test: * tests/scrolledcanvas.test: * tests/scrolledframe.test: * tests/scrolledhtml.test: * tests/scrolledlistbox.test: * tests/scrolledtext.test: * tests/selectionbox.test: * tests/selectiondialog.test: * tests/shell.test: * tests/spindate.test: * tests/spinint.test: * tests/spinner.test: * tests/spintime.test: * tests/tabnotebook.test: * tests/tabset.test: * tests/toolbar.test: * tests/usual.test: * win/catalog.bat: * win/iwidgets.tcl: * win/makefile.bc: * win/makefile.vc: * win/pkgIndex.tcl: * win/tclIndex: import of current 2.2.0 * win/pkg.vc: moved the info about the iwidget version for makefile.vc 2001-04-04 smithc * generic/menubar.itk: Fixed stack trace that would occur if the programmer attempted to create two menu items with the same command name. 2000-12-19 smithc * generic/combobox.itk: Fixed 3 bugs: 1) bug with -state config option 2) added some performance enhancements 3) added code to restore grabs following dropdown listbox unmap 2000-12-06 smithc * generic/hierarchy.itk: Added patches submitted by Martin Backe on 12/5/00. One was for a memory leak in the clear() method, and the other was to correct %n substitution in the _select() method. * doc/hierarchy.n: Added -selectcommand to the man page. 2000-08-25 csmith * generic/scrolledlistbox.itk: Patch submitted by Shaun Lowry - I don't know the ticket number, but here's part of the ticket description: Name: Shaun Lowry email: slowry@iss.net Support: Gold Severity: 2 OperatingSystem: Windows NT OperatingSystemVersion: NT4 SP6 Machine: Beige :-) (home built PC) Synopsis: scrolledlistbox "pattern" based selection doesn't work properly ReproducibleScript: package require Iwidgets iwidgets::scrolledlistbox .f .f insert end "friendly" .f insert end "hostile" .f get host* .f get friend* 2000-08-22 welch * configure: * configure.in: Bumped version number to 3.0.1 (PARTS LIST NOTICE) * generic/scrolledlistbox.itk: Added catch around -listvariable option so this can be used with older versions of Tk that do not have this option on listboxes. 2000-08-17 csmith * generic/timeentry.itk: Same problem as dateentry. See documentation for dateentry version 1.2 in CVS. I don't have a ticket number. -chad smith * generic/dateentry.itk: While documenting the iwidgets last year in my book, I came across a bug where destroying a component didn't remove it from the composite options list. I told Michael about it, and he's fixed it in 3.2. This broke the dateentry because it was explicitly unsetting the component from the itk_component array. I simply deleted that line of code. I need to make a pass at the rest of the iwidgets to see which other ones were also unsetting the component. -chad smith 2000-08-08 csmith * generic/hierarchy.itk: Several enhancements and bug fixes added by Doug Howard. Doug added the following configuration options: -dblclickcommand -icondblcommand -imagecommand -imagedblcommand -imagemenuloadcommand -textmenuloadcommand He also added two public methods: expanded and expState. Multiple non-public methods were added to support the new configuration options. I have updated the man page for each new option and public method. * doc/hierarchy.n: Man page updated per the additional configuration options and public methods added by Doug Howard. * tests/hierarchy.test: Needed to change the number of configuration options per additions by Doug Howard so hierarchy would pass the 'make test'. 2000-08-07 welch * configure: Ran autoconf 2000-08-02 welch * Makefile.in: * configure: Changed this to use installFiles.tcl instead of install-sh 2000-07-29 welch * configure: * configure: Ran autoconf 2000-07-14 welch * configure: Updated configure 2000-07-06 mmc * generic/timefield.itk: * tests/all: * tests/all.tcl: * tests/defs: * tests/menubar.test: * tests/notebook.test: * tests/tabnotebook.test: * tests/tabset.test: * tests/toolbar.test: * unix/Makefile.in: * unix/configure.in: * unix/install-sh: * unix/iwidgets.tcl.in: * unix/pkgIndex.tcl.in: 6/26/00 (bug fix) Fixed Itcl_ClassVarResolver so that the formal parameters in a method/proc take precedence over class data members. 6/30/00 (bug fix) Fixed all itcl/itk/iwidgets3.0.0 tests to run cleanly with the new tcltest package. 7/1/00 (bug fix) Fixed "itk_component delete" so that the composite option list is cleaned up whenever a component is deleted. For example, suppose a component is the sole contributor of -font. When that component is removed via "itk_component delete", the -font option goes away as well. Also fixed the handling of the itk-delete-* binding for the component. When the component is removed, the binding tag is also removed by itk::remove_destroy_hook. 7/5/00 (bug fix) Fixed the check done during object creation to avoid clobbering existing commands. Previously, itcl would look for any command-- in the local *and* global namespace--that might be clobbered. Now, it looks for commands only in the local namespace, since those are the only ones that could truly be clobbered. 7/5/00 (cleanup) Removed obsolete Makefile/configure files in the various "unix" directories. Makefiles and configure files now reside one level above, in the standard TEA place. 2000-06-06 wart * Makefile.in: * configure: * configure.in: * tests/all.tcl: * tests/buttonbox.test: * tests/calendar.test: * tests/canvasprintbox.test: * tests/canvasprintdialog.test: * tests/checkbox.test: * tests/combobox.test: * tests/dateentry.test: * tests/datefield.test: * tests/dialog.test: * tests/dialogshell.test: * tests/disjointlistbox.test: * tests/entryfield.test: * tests/extfileselectionbox.test: * tests/extfileselectiondialog.test: * tests/feedback.test: * tests/fileselectionbox.test: * tests/fileselectiondialog.test: * tests/finddialog.test: * tests/hierarchy.test: * tests/hyperhelp.test: * tests/labeledframe.test: * tests/labeledwidget.test: * tests/menubar.test: * tests/messagebox.test: * tests/messagedialog.test: * tests/notebook.test: * tests/optionmenu.test: * tests/panedwindow.test: * tests/promptdialog.test: * tests/pushbutton.test: * tests/radiobox.test: * tests/regexpfield.test: * tests/scrolledcanvas.test: * tests/scrolledframe.test: * tests/scrolledhtml.test: * tests/scrolledlistbox.test: * tests/scrolledtext.test: * tests/selectionbox.test: * tests/selectiondialog.test: * tests/shell.test: * tests/spindate.test: * tests/spinint.test: * tests/spinner.test: * tests/spintime.test: * tests/tabnotebook.test: * tests/tabset.test: * tests/timeentry.test: * tests/timefield.test: * tests/toolbar.test: * tests/usual.test: * tests/watch.test: Modified tests to run with TEA Makefile 2000-06-02 csmith * generic/timefield.itk: Here are the comments from an itcl mailing list poster as well as my comments interspersed. iwidgets::timefield 2000-04-26 csmith * generic/checkbox.itk: Bug fix - patch by Mark Wilson added to select method to handle boolean (other than 0,1) -onvalue options. 2000-04-19 mmc * configure: * configure.in: - fixed itcl::find to find classes/objects in *all* namespaces - fixed tests to run cleanly 2000-03-28 csmith * generic/scrolledhtml.itk: Applied patches submitted by Brian Griffin. The patches are as follows: *** scrolledhtml.itk 1999/02/21 02:50:38 1.3 --- scrolledhtml.itk 2000/03/14 18:07:27 *************** class iwidgets::Scrolledhtml { *** 141,146 **** --- 141,147 ---- itk_option define -unknownimage unknownimage File {} itk_option define -textbackground textBackground Background {} itk_option define -update update Update 1 + itk_option define -debug deBug Debug 0 =20 public method import {args} public method clear {} *************** body iwidgets::Scrolledhtml::import {arg *** 544,550 **** append _cwd [file dirname $filename] } else { set f [open $filename r] ! g set _cwd [file dirname $filename] } } } --- 545,551 ---- append _cwd [file dirname $filename] } else { set f [open $filename r] ! set _cwd [file dirname $filename] } } } *************** body iwidgets::Scrolledhtml::render {htm *** 611,618 **** [lindex $entity 1]] "" entity set cmd [string tolower [lindex $entity 0]] if {[info command _entity_$cmd]!=3D""} { ! catch {eval _entity_$cmd [lrange $entity 1 end]} } set html \ [string range $html [expr [lindex $match 1]+1] end] } --- 612,624 ---- [lindex $entity 1]] "" entity set cmd [string tolower [lindex $entity 0]] if {[info command _entity_$cmd]!=3D""} { ! if {[catch {eval _entity_$cmd [lrange $entity 1 end]} bad]} { ! if {$itk_option(-debug)} { ! global errorInfo ! puts stderr "render: _entity_$cmd [lrange $entity 1 end] = Error:$bad\n$errorInfo" ! } } + } set html \ [string range $html [expr [lindex $match 1]+1] end] } *************** body iwidgets::Scrolledhtml::_append_tex *** 728,743 **** if ![string length $text] return } if {!$_pre && !$_intitle} { ! set p [$_hottext get "end - 2c"] set n [string index $text 0] if {$n =3D=3D " " && $p =3D=3D " "} { set text [string range $text 1 end] } ! $_hottext insert end $text $_tag return } if {$_pre && !$_intitle} { ! $_hottext insert end $text $_tag return } append _title $text --- 734,757 ---- if ![string length $text] return } if {!$_pre && !$_intitle} { ! if {[catch {$_hottext get "end - 2c"} p]} { ! set p "" ! } set n [string index $text 0] if {$n =3D=3D " " && $p =3D=3D " "} { set text [string range $text 1 end] } ! if {[catch {$_hottext insert end $text $_tag}]} { ! set pht [winfo parent $_hottext] ! catch {$pht insert end $text $_tag} ! } =20 return } if {$_pre && !$_intitle} { ! if {[catch {$_hottext insert end $text $_tag}]} { ! set pht [winfo parent $_hottext] ! catch {$pht insert end $text $_tag} ! } =20 return } append _title $text *************** body iwidgets::Scrolledhtml::_set_tag {} *** 807,813 **** if {![info exists _tagl($_tag)]} { set _tagfont($_tag) 1 eval $_hottext tag configure $_tag \ ! -foreground $_color \ -lmargin1 ${_left}m \ -lmargin2 ${_left2}m $args if [catch {eval $_hottext tag configure $_tag \ --- 821,827 ---- if {![info exists _tagl($_tag)]} { set _tagfont($_tag) 1 eval $_hottext tag configure $_tag \ ! -foreground \$_color \ -lmargin1 ${_left}m \ -lmargin2 ${_left2}m $args if [catch {eval $_hottext tag configure $_tag \ *************** body iwidgets::Scrolledhtml::_entity_tab *** 2127,2133 **** # end table # ------------------------------------------------------------------ body iwidgets::Scrolledhtml::_entity_/table {} { ! if $_intable { _pop tableborder set table [[_pop table] childsite] _pop row --- 2141,2147 ---- # end table # ------------------------------------------------------------------ body iwidgets::Scrolledhtml::_entity_/table {} { ! if {$_intable} { _pop tableborder set table [[_pop table] childsite] _pop row *************** body iwidgets::Scrolledhtml::_entity_/ta *** 2150,2155 **** --- 2164,2181 ---- set _link [_pop link] set _alink [_pop alink] foreach x [grid slaves $table] { + set text [$x get 1.0 end] + set tl [split $text \n] + set max 0 + foreach l $tl { + set len [string length $l] + if {$len > $max} { + set max $len + } + } + if {$max > [$x cget -width]} { + $x configure -width $max + } if {[$x cget -height] =3D=3D 1} { $x configure -height [lindex [split [$x index "end - 1 chars"] "."] = 0] } *************** body iwidgets::Scrolledhtml::_entity_td=20 *** 2219,2227 **** set cellspacing [_peek cellspacing] set _hottext $table.cell[incr _counter] text $_hottext -relief flat -width $ar(width) -height $ar(height) = \ ! -foreground $_color -background $_bgcolor = -highlightthickness 0 \ ! -wrap word -cursor $itk_option(-cursor) \ -padx $cellpadding -pady $cellpadding if [info exists ar(nowrap)] { $_hottext configure -wrap none } --- 2245,2258 ---- set cellspacing [_peek cellspacing] set _hottext $table.cell[incr _counter] text $_hottext -relief flat -width $ar(width) -height $ar(height) \ ! -highlightthickness 0 -wrap word -cursor $itk_option(-cursor) \ -padx $cellpadding -pady $cellpadding + if {$_color !=3D ""} { + $_hottext config -foreground $_color + } + if {$_bgcolor !=3D ""} { + $_hottext config -background $_bgcolor=20 + } if [info exists ar(nowrap)] { $_hottext configure -wrap none } *************** body iwidgets::Scrolledhtml::_entity_td=20 *** 2229,2235 **** --- 2260,2272 ---- $_hottext configure -relief sunken } set row [_peek row] + if {$row < 0} { + set row 0 + } set column [_pop column] + if {$column < 0} { + set column 0 + } while {[grid slaves $table -row $row -column $column] !=3D ""} { incr column } * generic/shell.itk: Reversed these two lines of code in the activate() method. wm deiconify $itk_component(hull) raise $itk_component(hull) This fixes a problem mentioned by Brett Schwarz with a particular window manager he was using with Linux. After testing this code change on a number of other platforms/WMs (Solaris, Windows, HP-UX -- OLVWM, CDE, GNOME, FVWM) it does not appear to affect behavior on any of these other systems. 2000-03-21 csmith * generic/fileselectionbox.itk: From a patch I received from Brett Schwarz: BUG --- When the -fileson option is set to false, then only the directory listing is shown. It is implied that this becomes a directory selector. However, when single clicking on a directory, the selection entry widget only gets updated with the tail of the directory name (what is actually in the directory listbox), not the whole path. DESIRED BEHAVIOR * generic/extfileselectionbox.itk: From a patch I received from Brett Schwarz: BUG --- When the -fileson option is set to false, then only the directory listing is shown. I is implied that this becomes a directory selector. However, when single clicking on a directory, the selection entry widget only gets updated with the tail of the directory name (what is actually in the directory listbox), not the whole path. DESIRED BEHAVIOR 2000-03-10 csmith * doc/checkbox.n: Updated man page to reflect addition of new config option: orient. * generic/radiobox.itk: Added a new configuration option to the radiobox: -orient, which specifies the orientation of the radiobuttons within the radiobox. * generic/checkbox.itk: Added a new config option to the checkbox: -oritent, which allows the user to specify the orientation of the checkbuttons, either horizontally or vertically (default). * doc/radiobox.n: Updated man page to reflect the new config option I added: orient. 2000-03-09 csmith * doc/scrolledlistbox.n: Updated man page to include -listvariable associated option and itemconfigure associated method. * generic/spinint.itk: Added patch submitted by Brett Schwarz. When a value outside the specified range is typed into the entryfield component, the spinint will beep if the up or down arrow is pressed. We decided it was better to change the value back to within the valid range. For example, if the range is from 10 to 20: user types 50 in entryfield: up arrow results in 10 down arrow results in 20 user types 5 in entryfield: up arrow results in 10 down arrow results in 20 * generic/feedback.itk: This is to close ticket #2881. While implementing the fix, I found another bug where resizing of the window did not update the trough. So I did not add the patch from this ticket. Rather, I added a new binding in the class constructor on the hull such that events invoke the _display method to update the trough. This binding fixes both cases and does not introduce any performance problems. * doc/scrolledtext.n: Updated man page to include image associated method. 2000-03-08 csmith * generic/hierarchy.itk: Implemented and tested bug fix for ticket #3444. csmith: 3/8/00 4:02pm 2000-03-02 csmith * generic/scrolledlistbox.itk: Added a wrapper method for the new tk8.3 itemconfigure command for the listbox. * generic/scrolledtext.itk: This is to close bug report #3446. I added a wrapper method for the text widget's new image function per request. * unix/Makefile.in: This is to close ticket #3958. Removed the "iwidgets.tcl and pkgIndex.tcl" targets from 'make clean'. * generic/scrolledlistbox.itk: Added -listvariable to the list of options kept with the listbox component is added so that this option is available at the mega-widget level. 2000-01-31 csmith * generic/combobox.itk: Small bug fix in the delete method when deleting text from the entry component. 2000-01-26 csmith * generic/disjointlistbox.itk: This mega-widget is setting tk_strictMotif to 1. Several emails circulated around the itcl mailing list about problems that this caused. disjointlistbox is the only mega-widget that set this global variable, so I've removed the line of code that did this. After a brief sanity check, things look fine without this line of code. 2000-01-24 wart * configure: Regenerated configure scripts to pick up changes to tcl.m4 * configure: Regenerated configure scripts to pick up recent changes to tcl.m4 2000-01-07 csmith * generic/messagedialog.itk: Added -wraplength and -justify to configuration options. I don't know why these were removed from version 2.2, but they're useful and should be there. 2000-01-03 csmith * generic/combobox.itk: One typo dealing with -state with -dropdown is false ("info exists" should have been "winfo exists"). Also added a conditional in the delete method to avoid a possible stack dump. * generic/watch.itk: -tickcolor was not working - simple fix to modify the canvas option from -fill to -outline * generic/timefield.itk: Patch by Massimo Morin to add -gmt and -textvariable options to the timefield. * generic/optionmenu.itk: The 'select' method was not working properly when passed the "end" argument. Modified the 'select' method to check for a bad index value - did not use the patch attached to the bug report. * generic/canvasprintbox.itk: minor bug fix, -pagesize was not updating the optionmenu * generic/calendar.itk: Fixed a bug with -buttonforeground when photos used instead of bitmaps. * generic/spindate.itk: datemargin was not working properly. Bug fixed by Brett Schwarz. * generic/finddialog.itk: Patch by Brett Schwarz to fix -clearcommand and -matchcommand options, which were not working. * generic/extfileselectionbox.itk: A few public methods should be private: _selectDir _dblSelectDir _selectFile * Makefile.in: Patch submitted by Andreas Gustafsson: 'make clean' removes files generated by the configure script and should only remove files generated by make. 1999-12-20 csmith * generic/labeledframe.itk: Fixed some access level inconsistencies with some class methods. One public method (smt) should not be public. Actually, I can't find anywhere in any code where this method is called. Maybe it should be deleted? I made it protected along with 3 private methods that were labeled as protected in the method comment block. * generic/checkbox.itk: 1) I removed the following configuration option definitions from the class definition: -command, -disabledforeground, and -selectcolor. These options are now only applicable after checkbuttons have been added to the checkbox. a) The -command option never worked anyway. It was defined via 'itk_option define' but was not implemented. The easiest solution was to keep this option when adding a new checkbutton. This at least adds -command functionality but doesn't provide for % variable substitutions, which would be a nice addition for future revisions. b) The -disabledforeground and -selectcolor options were valid options for initial checkbox creation but had no error checking. You could therefore create a new checkbox with -selectcolor set to "foo bar" and it would work OK. When you tried to add a new checkbutton via the add() method, however, it would fail until the class level -selectcolor was modified. This could lead to confusion, so these two options are now only valid after (or during) the addition of checkbuttons. Tk then handles the error checking. 2) Added -state to the keep fragment during checkbutton addition. So in a nutshell, these 4 options are now valid checkbox options after at least one checkbutton has been added: -command -disabledforeground -selectcolor -state 1999-12-16 wart * Makefile.in: Install a few extra useful files (license.terms, catalog.bat) 1999-12-16 csmith * generic/menubar.itk: public method _helpHandler should be private. Not sure how this originally happened unless just an oversight on the author's part. 1999-12-15 csmith * generic/feedback.itk: Modified the _display method per a bug report submitted by Kory Hopkins on 9/24/99 (at least that's when I got it). There was a simple code change to fix a problem with the trough calculation when stepping. 1999-11-24 wart * configure: regenerated configure scripts to pick up tcl.m4 changes * configure: tcl.m4: Updated to reflect recent TEA changes */configure: Regnereated with new tcl.m4 iwidgets2.2.0/Makefile.in: Don't copy nonexistent files 1999-11-18 csmith * generic/optionmenu.itk: Modified a ternary expression to a simple if:then conditional because of some problems with exponentials. * generic/optionmenu.itk: Just for clarity, changed the menubutton component's designated "-indicator" option to "-indicatoron". Someone noticed it and actually submitted a bug report on it. Geez. * doc/toolbar.n: Removed the -relief option from the list of standard options. * generic/scrolledtext.itk: Fixed a bug with the search method. The arguments needed to be evaluated one level down the call stack. * demos/html/toolbar.n.html: Removed the -relief option from the standard options and also alphabetized each of the standard options for lookup convenience. 1999-09-14 wart * iwidgets.tcl.in: * pkgIndex.tcl.in: Fixed installation of pkgIndex.tcl file. We have to install a pre-made pkgIndex.tcl file since pkg_mkIndex can't seem to make a usable one. 1999-09-10 wart * Makefile.in: Fixed bug when calling mkIndex.tcl for itk reduced amount of output from "make install" in iwidgets 1999-09-09 wart * iwidgets.tcl.in: * pkgIndex.tcl.in: Added pkgIndex files for Iwidgets Top level Makefile should no longer loop endlessly if the configure went bad. 1999-09-04 wart * Makefile.in: * aclocal.m4: * configure: * configure.in: TEA changes. Itcl now uses the same Makefiles and configure scripts for both Windows and Unix. Note that static shells are not yet done in this TEA implementation. 1999-08-21 matt * win/makefile.vc: Moved HTML install to seperate non-default target, since the files that it tries to install don't exist and cause a failure during the install. 1999-07-26 csmith * generic/pane.itk: A typo in the configbody for -minimum. The first '$' should be removed from set $itk_option(-minimum) $pixels 1999-07-22 csmith * generic/notebook.itk: This is to incorporate a bug fix reported by Larry Virden for the tabbed notebook. Looks like a typo in the code, where set $_currPage -1 should be set _currPage -1 * generic/calendar.itk: This is to fix a problem reported by Larry Virden in the calendar iwidget. There's a typo in the line, set $_time $time which should be set _time $time 1999-07-08 rjohnson * demos/html/iwidgets2.2.0UserCmds.html: * demos/html/iwidgets3.0.0UserCmds.htm: Updated html index file to 3.0. * demos/html/iwidgets3.0.0UserCmds.htm: * demos/html/iwidgets3.0.0UserCmds.html: Messed up extension. 1999-06-16 csmith * generic/toolbar.itk: This fix is contributed by Raviv Gil. Below is his description of the bug. "Working with iwidgets3.0.0 we've encountered the following problem : We created a toolbar containing several buttons, each button with a short help string. Passing above the toolbar and then closing the window sometimes opened a Tcl Error message indicating that the method 'showBalloon' was invoked for an invalid tk path." * generic/panedwindow.itk: There were several places in the code that looped from 1 to the number of actual panes in the panedwindow when the code should be looping over the number of active panes. Each of these areas in the code could cause a stack dump, complaining about an invalid pathanme regarding a sash or a separator. I've changed each of these areas to use _activePanes instead of _panes. 1999-05-25 redman * unix/configure.in: Fix the makefile and configure files, etc., for Unix in order to compile with Tcl/Tk 8.1 with stubs. Builds itclsh and itkwish properly. 1999-03-30 csmith * generic/checkbox.itk: ::Checkbox::select invokes the specified checkbutton regardless of whether it's selected or not. It should only tell the checkbutton to invoke if the checkbutton is not already selected. * generic/menubar.itk: There was a typo in the redefinition of the tkMenuFind proc at the bottom of menubar.itk. "winfo" was being used instead of "info" with the "command" argument. 1999-03-15 csmith * tests/entryfield.test: Added one line of code in the 'foreach test' loop for the new - pasting option. * doc/entryfield.n: Updated man page to document a new option, -pasting, which allows the developer to disable pasting into the entry component of the entryfield. This is useful when using -validate because validation does not catch pasting text. * generic/entryfield.itk: 1) Added a new configuration option, -pasting, which allows the user to disable pasting text into the entry component of the entryfield. Previously, when using -validate, the user was allowed to paste text which could cause stack dumps into the entryfield because pasting was not caught. The user, for instance, could paste a 40 digit number and kill any expr's since the integer is too large for tcl to handle. 2) The _keyPress method hardcoded state comparisons for , , , and . The problem was that these hardcoded values were UNIX-specific. I added platform-independant code. * CHANGES: Added to entries under the Entryfield section: 1) documented new configuration option, -pasting; and 2) documented change to _keyPress method to remove hardcoded state comparisons. 1999-03-08 csmith * generic/panedwindow.itk: Instantiating an extfileselectionbox iwidgets with a single configuration option, '-fileson 0', caused a stack dump as a result of accessing an invalid tk window pathname in iwidgets::Panedwindow::sashcursor. The solution was to wrap a conditional around the path to see if it exists before trying to use it. 1999-03-04 csmith * generic/combobox.itk: The -command configuration option was being overwritten in the _createComponents method if it was specified during widget creation. 1999-02-21 rjohnson * generic/scrolledhtml.itk: Removed stack trace error in widget. However, the widget still doesn't display correctly... 1999-01-25 stanton * unix/iwidgets.tcl.in: * win/iwidgets.tcl: Changed so iwidgets.tcl does a "namespace import -force itcl::*" This is a hack to get around the fact that iwidgets uses "class" instead of "itcl::class". The correct long term solution is to change all of the iwidgets code to use qualified names. 1998-12-22 rjohnson * demos/watch: Fixed bug in watch demo. 1998-12-18 rjohnson * demos/catalog: Removed the mainwindow demo from the catalog demo. It was not a well behaved demo and running would break the catalog demo. [Bug ID: 508] 1998-09-14 stanton * demos/images/clear.gif: * demos/images/close.gif: * demos/images/copy.gif: * demos/images/cut.gif: * demos/images/exit.gif: * demos/images/find.gif: * demos/images/help.gif: * demos/images/mag.gif: * demos/images/new.gif: * demos/images/open.gif: * demos/images/paste.gif: * demos/images/poly.gif: * demos/images/print.gif: * demos/images/ruler.gif: * demos/images/save.gif: * demos/images/select.gif: * demos/iwidgets.gif: * generic/unknownimage.gif: Fixed binary files 1998-09-10 stanton * doc/iwidgets.ps: added iwidgets.ps as a binary file 1998-08-25 stanton * demos/mainwindow: fixed bug where image names conflicted with global commands 1998-08-24 stanton * generic/hyperhelp.itk: fixed portability bug in file name handling * demos/html/buttonbox.n.html: * demos/html/canvasprintbox.n.html: * demos/html/canvasprintdialog.n.html: * demos/html/combobox.n.html: * demos/html/dialog.n.html: * demos/html/dialogshell.n.html: * demos/html/entryfield.n.html: * demos/html/feedback.n.html: * demos/html/fileselectionbox.n.html: * demos/html/fileselectiondialog.n.html: * demos/html/hyperhelp.n.html: * demos/html/iwidgets2.2.0UserCmds.html: * demos/html/labeledwidget.n.html: * demos/html/menubar.n.html: * demos/html/messagedialog.n.html: * demos/html/notebook.n.html: * demos/html/optionmenu.n.html: * demos/html/panedwindow.n.html: * demos/html/promptdialog.n.html: * demos/html/pushbutton.n.html: * demos/html/radiobox.n.html: * demos/html/scrolledcanvas.n.html: * demos/html/scrolledframe.n.html: * demos/html/scrolledhtml.n.html: * demos/html/scrolledlistbox.n.html: * demos/html/scrolledtext.n.html: * demos/html/selectionbox.n.html: * demos/html/selectiondialog.n.html: * demos/html/shell.n.html: * demos/html/spindate.n.html: * demos/html/spinint.n.html: * demos/html/spinner.n.html: * demos/html/spintime.n.html: * demos/html/tabnotebook.n.html: * demos/html/tabset.n.html: * demos/html/toolbar.n.html: updated 1998-08-21 stanton * demos/catalog: removed extraneous import 1998-08-18 welch * demos/catalog: Fixed demo 1998-08-11 welch * CHANGES: * demos/catalog: * demos/html/buttonbox.n.html: * demos/html/canvasprintbox.n.html: * demos/html/combobox.n.html: * demos/html/dialogshell.n.html: * demos/html/entryfield.n.html: * demos/html/fileselectionbox.n.html: * demos/html/fileselectiondialog.n.html: * demos/html/hyperhelp.n.html: * demos/html/labeledwidget.n.html: * demos/html/menubar.n.html: * demos/html/notebook.n.html: Updates from Michael * demos/feedback: * demos/html/canvasprintdialog.n.html: * demos/html/dialog.n.html: * demos/html/feedback.n.html: * demos/html/messagedialog.n.html: * demos/html/optionmenu.n.html: * demos/html/panedwindow.n.html: * demos/html/promptdialog.n.html: * demos/html/pushbutton.n.html: * demos/html/radiobox.n.html: * demos/html/scrolledcanvas.n.html: * demos/html/scrolledframe.n.html: * demos/html/scrolledhtml.n.html: * demos/html/scrolledlistbox.n.html: * demos/html/scrolledtext.n.html: * demos/html/selectionbox.n.html: * demos/html/selectiondialog.n.html: * demos/html/shell.n.html: * demos/html/spindate.n.html: * demos/html/spinint.n.html: * demos/html/spinner.n.html: * demos/html/spintime.n.html: * demos/html/tabnotebook.n.html: * demos/html/tabset.n.html: * demos/html/toolbar.n.html: * demos/mainwindow: * demos/watch: * doc/calendar.n: * doc/labeledframe.n: * doc/optionmenu.n: * doc/selectionbox.n: * generic/combobox.itk: * generic/entryfield.itk: * generic/hierarchy.itk: * generic/menubar.itk: * generic/messagebox.itk: * generic/optionmenu.itk: * generic/radiobox.itk: * generic/scrolledframe.itk: * generic/scrolledhtml.itk: * generic/shell.itk: * generic/toolbar.itk: * tests/entryfield.test: * tests/hyperhelp.test: * tests/optionmenu.test: * tests/shell.test: * tests/spinner.test: * unix/Makefile.in: * unix/iwidgets.tcl.in: * unix/pkgIndex.tcl.in: 3.0 final from Michael * unix/Makefile.in: Fixed symlink iwidgets-4.1.1/incoming/0000755003604700454610000000000013153516405013535 5ustar dgp771diviwidgets-4.1.1/incoming/demos/0000755003604700454610000000000013136711011014633 5ustar dgp771diviwidgets-4.1.1/incoming/demos/collapsablewidget0000644003604700454610000000122707540407250020256 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: new collapsablewidget # ---------------------------------------------------------------------- package require Iwidgets 4.0 source ../src/collapsablewidget.itk . configure -background white iwidgets::collapsablewidget .cw -labeltext "Label Text:" pack .cw -padx 4 -pady 4 set win [.cw childsite] label $win.ex -text "(put your widgets here)" \ -background black -foreground white \ -width 30 -height 3 pack $win.ex -expand yes -fill both -padx 4 -pady 4 button .toggle -text "Toggle display of collapsed region" -command { .cw toggle } pack .toggle -padx 4 -pady 4 iwidgets-4.1.1/incoming/demos/buttoncage0000644003604700454610000000100407540413107016713 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: new buttoncage # ---------------------------------------------------------------------- package require Iwidgets 4.0 source ../src/buttoncage.itk puts "This demo creates a 5x2 grid of buttons..." . configure -relief ridge -bd 3 iwidgets::buttoncage .bc -width 5 -height 2 pack .bc for {set i 1} {$i <= 10} {incr i} { .bc add $i -text "Button $i" \ -command [eval {list puts "Congratulations. You just pressed button $i"}] } iwidgets-4.1.1/incoming/demos/CVS/0000755003604700454610000000000013153526747015311 5ustar dgp771diviwidgets-4.1.1/incoming/demos/CVS/Repository0000644003604700454610000000003013136711011017361 0ustar dgp771diviwidgets/incoming/demos iwidgets-4.1.1/incoming/demos/CVS/Entries0000644003604700454610000000013713153526747016646 0ustar dgp771div/buttoncage/1.1/Fri Sep 13 16:45:59 2002// /collapsablewidget/1.1/Fri Sep 13 16:13:28 2002// D iwidgets-4.1.1/incoming/demos/CVS/Root0000644003604700454610000000006613136711011016136 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/incoming/README0000644003604700454610000000364407540433262014426 0ustar dgp771div========================================================================== ------------------ [incr Widgets] Incoming Widgets --------------------- ========================================================================== This directory contains mega-widgets which should be considered beta. We're looking for positive or negative feedback concerning their usefullness. Should enough of a positive response be felt, then the widget will be included in the [incr Widgets] distribution. Otherwise, they will find themseleves in the outgoing directory and later in /dev/null. Please see the source code to respond to the author of any mega-widgets found here. To place your "vote" for any new widget, please contact any [incr Widgets] administrator. Layout of the iwidgets4.0.1/incoming directory: --------------------------------------------------------------------------- src: contains the source code for the new widgets demos: contains scripts you can source to see the widgets in action doc: man pages (Note that a man page may not exist if the author did not submit one) NEW WIDGETS --------------------------------------------------------------------------- collapsablewidget: Contributed by Vince Darley buttoncage: Contributed by Mark Alston PROPOSED WIDGETS --------------------------------------------------------------------------- The following are proposed widgets as listed on SourceForge. If anyone has a desire to create one or more of these widgets, have at it! o - How about adding an optionbox widget for organizing optionmenus. This widget would be analogous to the checkbox and radiobox widgets. (SF ticket #471529) o - Could it be possible to enhance Scrolledhtml into a browser using the http package included with the tcl core? (SF ticket #426759) (Note from Chad - very cool idea - anyone interested in working on this? Check out the SF ticket for some pointers.) iwidgets-4.1.1/incoming/doc/0000755003604700454610000000000013136711011014271 5ustar dgp771diviwidgets-4.1.1/incoming/doc/collapsablewidget.n0000644003604700454610000001476707540407471020172 0ustar dgp771div'\" '\" Copyright (c) 1995-1999 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) collapsablewidget.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS collapsablewidget iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::collapsablewidget \- Create and manipulate a labeled widget .SH SYNOPSIS \fBcollapsablewidget\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::collapsablewidget .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBcollapsed\fR Class: \fBCollapsed\fR Command-Line Switch: \fB-collapsed\fR .fi .IP Specifies whether to hide or display the childsite. Takes a boolean value. If true, the childsite is hidden from view, if false it is displayed. The default is to display the childsite. .LP .nf Name: \fBforeground\fR Class: \fBForeground\fR Command-Line Switch: \fB-foreground\fR .fi .IP Specifies the foreground to be used in the label. .LP .nf Name: \fBlabelBitmap\fR Class: \fBBitmap\fR Command-Line Switch: \fB-labelbitmap\fR .fi .IP Specifies a bitmap to display in the widget, in any of the forms acceptable to \fBTk_GetBitmap\fR. This option overrides the \fIlabeltext\fR option. .LP .nf Name: \fBlabelFont\fR Class: \fBFont\fR Command-Line Switch: \fB-labelfont\fR .fi .IP Specifies the font to be used for the label. .LP .nf Name: \fBlabelImage\fR Class: \fBImage\fR Command-Line Switch: \fB-labelimage\fR .fi .IP Specifies a image to be used as the label. The image may be any of the values created by the \fBimage create\fR command. This option overrides both the \fIlabelbitmap\fR and \fIlabeletext\fR options. .LP .nf Name: \fBlabelMargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-labelmargin\fR .fi .IP Specifies the distance between the childsite and label in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 2 pixel. .LP .nf Name: \fBlabelText\fR Class: \fBText\fR Command-Line Switch: \fB-labeltext\fR .fi .IP Specifies the text of the label around the childsite. .LP .nf Name: \fBlabelVariable\fR Class: \fBVariable\fR Command-Line Switch: \fB-labelvariable\fR .fi .IP Specifies the text variable of the label around the childsite. .LP .BE .SH DESCRIPTION .PP The \fBcollapsablewidget\fR command creates a labeled widget which contains a button, a label and child site. The child site is a frame which can filled with any widget via a derived class or though the use of the childsite method. This class was designed to be a general purpose base class for supporting the combination of label widget and a childsite, in which the button (which displays a suitable image) controls whether to display the childsite or not. The options include the ability to modify the font and margin, and control the display of the labels. .SH "METHODS" .PP The \fBcollapsablewidget\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for collapsablewidget widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBchildsite\fR Return the path name of the child site. .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBcollapsablewidget\fR command. .TP \fIpathName \fBcollapse\fR Hides the childsite from view, updating the image in the button to reflect the new state. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBcollapsablewidget\fR command. .TP \fIpathName \fBreveal\fR Bring the childsite into view, updating the image in the button to reflect the new state. .TP \fIpathName \fBtoggle\fR If the childsite is in view, hide it, and if it is hidden display it. Updates the image in the button to reflect the new state. .SH "STATIC METHODS" .TP \fBCollapsablewidget::alignlabels\fR \fIwidget\fR ?\fIwidget ...\fR? The alignlabels procedure takes a list of widgets derived from the Collapsablewidget class and uses the label margin to make each widget have the same total space for the combination of label and margin. The net effect is to left align the labels. .SH "COMPONENTS" .LP .nf Name: \fBlabel\fR Class: \fBlabel\fR .fi .IP The label component provides the label for the labeled widget. See the "label" widget manual entry for details on the label component item. .LP .nf Name: \fBlwchildsite\fR Class: \fBframe\fR .fi .IP The lwchildsite component is the user child site for the labeled widget. See the "frame" widget manual entry for details on the lwchildsite component item. .fi .SH EXAMPLE .IP The collapsablewidget is useful when you wish to display a large amount of information in a single window, only some of which the user is likely to want to see at any one time. By placing a number of collapsable widgets in the window, each of which contains some of the available information (presumably categorised appropriately), you can make very effective use of a small amount of screen real-estate. The following is an example of how to create a widget which has its childsite hidden, and then reveal the childsite later. .LP .DS iwidgets::collapsablewidget .cw -labeltext "Canvas Widget" -collapsed 1 pack .cw -fill both -expand yes -padx 10 -pady 10 set cw [canvas [.cw childsite].c -relief raised -width 200 -height 200] pack $cw -padx 10 -pady 10 after 2000 {.cw reveal} .DE .SH AUTHOR Vince Darley .SH KEYWORDS collapsablewidget, widget iwidgets-4.1.1/incoming/doc/CVS/0000755003604700454610000000000013153526747014747 5ustar dgp771diviwidgets-4.1.1/incoming/doc/CVS/Repository0000644003604700454610000000002613136711011017024 0ustar dgp771diviwidgets/incoming/doc iwidgets-4.1.1/incoming/doc/CVS/Entries0000644003604700454610000000014113153526747016277 0ustar dgp771div/collapsablewidget.n/1.1/Fri Sep 13 16:15:53 2002// /man.macros/1.1/Mon Jul 27 18:53:29 1998// D iwidgets-4.1.1/incoming/doc/CVS/Root0000644003604700454610000000006613136711011015574 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/incoming/doc/man.macros0000644003604700454610000001011706557146251016273 0ustar dgp771div'\" The definitions below are for supplemental macros used in Tcl/Tk '\" manual entries. '\" '\" .HS name section [date [version]] '\" Replacement for .TH in other man pages. See below for valid '\" section names. '\" '\" .AP type name in/out [indent] '\" Start paragraph describing an argument to a library procedure. '\" type is type of argument (int, etc.), in/out is either "in", "out", '\" or "in/out" to describe whether procedure reads or modifies arg, '\" and indent is equivalent to second arg of .IP (shouldn't ever be '\" needed; use .AS below instead) '\" '\" .AS [type [name]] '\" Give maximum sizes of arguments for setting tab stops. Type and '\" name are examples of largest possible arguments that will be passed '\" to .AP later. If args are omitted, default tab stops are used. '\" '\" .BS '\" Start box enclosure. From here until next .BE, everything will be '\" enclosed in one large box. '\" '\" .BE '\" End of box enclosure. '\" '\" .VS '\" Begin vertical sidebar, for use in marking newly-changed parts '\" of man pages. '\" '\" .VE '\" End of vertical sidebar. '\" '\" .DS '\" Begin an indented unfilled display. '\" '\" .DE '\" End of indented unfilled display. '\" '\" @(#) man.macros 1.1 94/08/09 13:07:19 .\" '\" # Heading for Tcl/Tk man pages .de HS .ds ^3 \\0 .if !"\\$3"" .ds ^3 \\$3 .if '\\$2'cmds' .TH "\\$1" 1 "\\*(^3" "\\$4" "\\$5" .if '\\$2'lib' .TH "\\$1" 3 "\\*(^3" "\\$4" "\\$5" .if '\\$2'ncmds' .TH "\\$1" n "\\*(^3" "\\$4" "\\$5" .if '\\$2'tcl' .TH "\\$1" n "\\*(^3" Tcl "Tcl Built-In Commands" .if '\\$2'tk' .TH "\\$1" n "\\*(^3" Tk "Tk Commands" .if '\\$2'tclc' .TH "\\$1" 3 "\\*(^3" Tcl "Tcl Library Procedures" .if '\\$2'tkc' .TH "\\$1" 3 "\\*(^3" Tk "Tk Library Procedures" .if '\\$2'tclcmds' .TH "\\$1" 1 "\\*(^3" Tk "Tcl Applications" .if '\\$2'tkcmds' .TH "\\$1" 1 "\\*(^3" Tk "Tk Applications" .if '\\$2'iwid' .TH "\\$1" 1 "\\*(^3" Tk "[incr Widgets]" .if t .wh -1.3i ^B .nr ^l \\n(.l .ad b .. '\" # Start an argument description .de AP .ie !"\\$4"" .TP \\$4 .el \{\ . ie !"\\$2"" .TP \\n()Cu . el .TP 15 .\} .ie !"\\$3"" \{\ .ta \\n()Au \\n()Bu \&\\$1 \\fI\\$2\\fP (\\$3) .\".b .\} .el \{\ .br .ie !"\\$2"" \{\ \&\\$1 \\fI\\$2\\fP .\} .el \{\ \&\\fI\\$1\\fP .\} .\} .. '\" # define tabbing values for .AP .de AS .nr )A 10n .if !"\\$1"" .nr )A \\w'\\$1'u+3n .nr )B \\n()Au+15n .\" .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n .nr )C \\n()Bu+\\w'(in/out)'u+2n .. '\" # BS - start boxed text '\" # ^y = starting y location '\" # ^b = 1 .de BS .br .mk ^y .nr ^b 1u .if n .nf .if n .ti 0 .if n \l'\\n(.lu\(ul' .if n .fi .. '\" # BE - end boxed text (draw box now) .de BE .nf .ti 0 .mk ^t .ie n \l'\\n(^lu\(ul' .el \{\ .\" Draw four-sided box normally, but don't draw top of .\" box if the box started on an earlier page. .ie !\\n(^b-1 \{\ \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .el \}\ \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .\} .fi .br .nr ^b 0 .. '\" # VS - start vertical sidebar '\" # ^Y = starting y location '\" # ^v = 1 (for troff; for nroff this doesn't matter) .de VS .mk ^Y .ie n 'mc \s12\(br\s0 .el .nr ^v 1u .. '\" # VE - end of vertical sidebar .de VE .ie n 'mc .el \{\ .ev 2 .nf .ti 0 .mk ^t \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n' .sp -1 .fi .ev .\} .nr ^v 0 .. '\" # Special macro to handle page bottom: finish off current '\" # box/sidebar if in box/sidebar mode, then invoked standard '\" # page bottom macro. .de ^B .ev 2 'ti 0 'nf .mk ^t .if \\n(^b \{\ .\" Draw three-sided box if this is the box's first page, .\" draw two sides but no top otherwise. .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .\} .if \\n(^v \{\ .nr ^x \\n(^tu+1v-\\n(^Yu \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c .\} .bp 'fi .ev .if \\n(^b \{\ .mk ^y .nr ^b 2 .\} .if \\n(^v \{\ .mk ^Y .\} .. '\" # DS - begin display .de DS .RS .nf .sp .. '\" # DE - end display .de DE .fi .RE .sp .. iwidgets-4.1.1/incoming/CVS/0000755003604700454610000000000013153526747014202 5ustar dgp771diviwidgets-4.1.1/incoming/CVS/Repository0000644003604700454610000000002213136711011016253 0ustar dgp771diviwidgets/incoming iwidgets-4.1.1/incoming/CVS/Entries0000644003604700454610000000012313153526747015532 0ustar dgp771divD/demos//// D/doc//// D/src//// D/tests//// /README/1.4/Fri Sep 13 19:04:18 2002// iwidgets-4.1.1/incoming/CVS/Root0000644003604700454610000000006613136711011015027 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/incoming/tests/0000755003604700454610000000000013153516405014677 5ustar dgp771diviwidgets-4.1.1/incoming/tests/CVS/0000755003604700454610000000000013153526747015344 5ustar dgp771diviwidgets-4.1.1/incoming/tests/CVS/Repository0000644003604700454610000000003013153516405017425 0ustar dgp771diviwidgets/incoming/tests iwidgets-4.1.1/incoming/tests/CVS/Entries0000644003604700454610000000000213153516405016656 0ustar dgp771divD iwidgets-4.1.1/incoming/tests/CVS/Root0000644003604700454610000000006613153516405016202 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/incoming/src/0000755003604700454610000000000013136711011014313 5ustar dgp771diviwidgets-4.1.1/incoming/src/buttoncage.itk0000644003604700454610000004474407540413110017175 0ustar dgp771div# # Buttoncage # ---------------------------------------------------------------------- # Manages a framed area with Motif style buttons. # # # AUTHOR: Mark Alston EMAIL: mark@beernut.com # # ---------------------------------------------------------------------- # Almost entirely Based on Button Box written by: # Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # Bret A. Schuhmacher EMAIL: bas@wn.com # # @(#) $Id: buttoncage.itk,v 1.1 2002/09/13 16:46:00 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Buttoncage { keep -background -cursor -foreground } # ------------------------------------------------------------------ # BUTTONCAGE # ------------------------------------------------------------------ itcl::class iwidgets::Buttoncage { inherit itk::Widget constructor {args} {} destructor {} itk_option define -pady padY Pad 5 itk_option define -padx padX Pad 5 itk_option define -width width Width 1 itk_option define -height height Height 1 itk_option define -foreground foreground Foreground black public method index {args} public method add {args} public method insert {args} public method delete {args} public method default {args} public method hide {args} public method show {args} public method invoke {args} public method buttonconfigure {args} public method buttoncget {index option} private method _positionButtons {} private method _setBoxSize {{when later}} private method _getMaxWidth {} private method _getMaxHeight {} private method _getNumButtons {} private variable _resizeFlag {} ;# Flag for resize needed. private variable _buttonList {} ;# List of all buttons in box. private variable _displayList {} ;# List of displayed buttons. private variable _unique 0 ;# Counter for button widget ids. } namespace eval iwidgets::Buttoncage { # # Set up some class level bindings for map and configure events. # bind bcage-map [itcl::code %W _setBoxSize] bind bcage-config [itcl::code %W _positionButtons] } # # Provide a lowercased access method for the Buttoncage class. # proc ::iwidgets::buttoncage {pathName args} { uplevel ::iwidgets::Buttoncage $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::constructor {args} { # # Add Configure bindings for geometry management. # bindtags $itk_component(hull) \ [linsert [bindtags $itk_component(hull)] 0 bcage-map] bindtags $itk_component(hull) \ [linsert [bindtags $itk_component(hull)] 1 bcage-config] pack propagate $itk_component(hull) no # # Initialize the widget based on the command line options. # eval itk_initialize $args } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::destructor {} { if {$_resizeFlag != ""} {after cancel $_resizeFlag} } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -pady # # Pad the y space between the button box frame and the hull. # ------------------------------------------------------------------ itcl::configbody iwidgets::Buttoncage::pady { _setBoxSize } # ------------------------------------------------------------------ # OPTION: -padx # # Pad the x space between the button box frame and the hull. # ------------------------------------------------------------------ itcl::configbody iwidgets::Buttoncage::padx { _setBoxSize } # ------------------------------------------------------------------ # OPTION: -height # # Set buttonbox height in buttons # ------------------------------------------------------------------ itcl::configbody iwidgets::Buttoncage::height { if { [regexp {^[0-9]*$} $itk_option(-height)] } { _setBoxSize } else { error "bad height option \"$itk_option(-height)\",\ should be an integer." } } # ------------------------------------------------------------------ # OPTION: -width # # Set buttonbox width in buttons # ------------------------------------------------------------------ itcl::configbody iwidgets::Buttoncage::width { if { [regexp {^[0-9]*$} $itk_option(-width)] } { _setBoxSize } else { error "bad width option \"$itk_option(-width)\",\ should be an integer." } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: index index # # Searches the buttons in the box for the one with the requested tag, # numerical index, keyword "end" or "default". Returns the button's # tag if found, otherwise error. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::index {index} { if {[llength $_buttonList] > 0} { if {[regexp {(^[0-9]+$)} $index]} { if {$index < [llength $_buttonList]} { return $index } else { error "Buttoncage index \"$index\" is out of range" } } elseif {$index == "end"} { return [expr {[llength $_buttonList] - 1}] } elseif {$index == "default"} { foreach knownButton $_buttonList { if {[$itk_component($knownButton) cget -defaultring]} { return [lsearch -exact $_buttonList $knownButton] } } error "Buttoncage \"$itk_component(hull)\" has no default" } else { if {[set idx [lsearch $_buttonList $index]] != -1} { return $idx } error "bad Buttoncage index \"$index\": must be number, end,\ default, or pattern" } } else { error "Buttoncage \"$itk_component(hull)\" has no buttons" } } # ------------------------------------------------------------------ # METHOD: add tag ?option value option value ...? # # Add the specified button to the button box. All PushButton options # are allowed. New buttons are added to the list of buttons and the # list of displayed buttons. The PushButton path name is returned. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::add {tag args} { itk_component add $tag { iwidgets::Pushbutton $itk_component(hull).[incr _unique] } { usual rename -highlightbackground -background background Background } if {$args != ""} { uplevel $itk_component($tag) configure $args } if { [llength $_buttonList] < [_getNumButtons] } { lappend _buttonList $tag lappend _displayList $tag _setBoxSize } else { error "can't insert more buttons. \ Buttoncage \"$itk_component(hull)\" is full." } } # ------------------------------------------------------------------ # METHOD: insert index tag ?option value option value ...? # # Insert the specified button in the button box just before the one # given by index. All PushButton options are allowed. New buttons # are added to the list of buttons and the list of displayed buttons. # The PushButton path name is returned. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::insert {index tag args} { itk_component add $tag { iwidgets::Pushbutton $itk_component(hull).[incr _unique] } { usual rename -highlightbackground -background background Background } if {$args != ""} { uplevel $itk_component($tag) configure $args } if { [llength $_buttonList] < [_getNumButtons] } { set index [index $index] set _buttonList [linsert $_buttonList $index $tag] set _displayList [linsert $_displayList $index $tag] _setBoxSize } else { error "can't insert more buttons. \ Buttoncage \"$itk_component(hull)\" is full." } } # ------------------------------------------------------------------ # METHOD: delete index # # Delete the specified button from the button box. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::delete {index} { set index [index $index] set tag [lindex $_buttonList $index] destroy $itk_component($tag) set _buttonList [lreplace $_buttonList $index $index] if {[set dind [lsearch $_displayList $tag]] != -1} { set _displayList [lreplace $_displayList $dind $dind] } _setBoxSize update idletasks } # ------------------------------------------------------------------ # METHOD: default index # # Sets the default to the push button given by index. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::default {index} { set index [index $index] set defbtn [lindex $_buttonList $index] foreach knownButton $_displayList { if {$knownButton == $defbtn} { $itk_component($knownButton) configure -defaultring yes } else { $itk_component($knownButton) configure -defaultring no } } } # ------------------------------------------------------------------ # METHOD: hide index # # Hide the push button given by index. This doesn't remove the button # permanently from the display list, just inhibits its display. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::hide {index} { set index [index $index] set tag [lindex $_buttonList $index] if {[set dind [lsearch $_displayList $tag]] != -1} { place forget $itk_component($tag) set _displayList [lreplace $_displayList $dind $dind] _setBoxSize } } # ------------------------------------------------------------------ # METHOD: show index # # Displays a previously hidden push button given by index. Check if # the button is already in the display list. If not then add it back # at it's original location and redisplay. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::show {index} { set index [index $index] set tag [lindex $_buttonList $index] if {[lsearch $_displayList $tag] == -1} { set _displayList [linsert $_displayList $index $tag] _setBoxSize } } # ------------------------------------------------------------------ # METHOD: invoke ?index? # # Invoke the command associated with a push button. If no arguments # are given then the default button is invoked, otherwise the argument # is expected to be a button index. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::invoke {args} { if {[llength $args] == 0} { $itk_component([lindex $_buttonList [index default]]) invoke } else { $itk_component([lindex $_buttonList [index [lindex $args 0]]]) \ invoke } } # ------------------------------------------------------------------ # METHOD: buttonconfigure index ?option? ?value option value ...? # # Configure a push button given by index. This method allows # configuration of pushbuttons from the Buttoncage level. The options # may have any of the values accepted by the add method. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::buttonconfigure {index args} { set tag [lindex $_buttonList [index $index]] set retstr [uplevel $itk_component($tag) configure $args] _setBoxSize return $retstr } # ------------------------------------------------------------------ # METHOD: buttoncget index option # # Return value of option for push button given by index. Option may # have any of the values accepted by the add method. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::buttoncget {index option} { set tag [lindex $_buttonList [index $index]] set retstr [uplevel $itk_component($tag) cget [list $option]] return $retstr } # ----------------------------------------------------------------- # PRIVATE METHOD: _getNumButtons # # Returns the max number of buttons. # ----------------------------------------------------------------- itcl::body iwidgets::Buttoncage::_getNumButtons {} { set max [expr $itk_option(-width) * $itk_option(-height)] return $max } # ----------------------------------------------------------------- # PRIVATE METHOD: _getMaxWidth # # Returns the required width of the largest button. # ----------------------------------------------------------------- itcl::body iwidgets::Buttoncage::_getMaxWidth {} { set max 0 foreach tag $_displayList { set w [winfo reqwidth $itk_component($tag)] if {$w > $max} { set max $w } } return $max } # ----------------------------------------------------------------- # PRIVATE METHOD: _getMaxHeight # # Returns the required height of the largest button. # ----------------------------------------------------------------- itcl::body iwidgets::Buttoncage::_getMaxHeight {} { set max 0 foreach tag $_displayList { set h [winfo reqheight $itk_component($tag)] if {$h > $max} { set max $h } } return $max } # ------------------------------------------------------------------ # METHOD: _setBoxSize ?when? # # Sets the proper size of the frame surrounding all the buttons. # If "when" is "now", the change is applied immediately. If it is # "later" or it is not specified, then the change is applied later, # when the application is idle. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::_setBoxSize {{when later}} { if {[winfo ismapped $itk_component(hull)]} { if {$when == "later"} { if {$_resizeFlag == ""} { set _resizeFlag [after idle [itcl::code $this _setBoxSize now]] } return } elseif {$when != "now"} { error "bad option \"$when\": should be now or later" } set _resizeFlag "" set minw [expr { $itk_option(-width) * [_getMaxWidth] \ + ($itk_option(-width) ) * $itk_option(-padx)}] set minh [expr {$itk_option(-height) * [_getMaxHeight] \ + ($itk_option(-height)) * $itk_option(-pady)}] # # Remove the configure event bindings on the hull while we adjust the # width/height and re-position the buttons. Once we're through, we'll # update and reinstall them. This prevents double calls to position # the buttons. # set tags [bindtags $itk_component(hull)] if {[set i [lsearch $tags bcage-config]] != -1} { set tags [lreplace $tags $i $i] bindtags $itk_component(hull) $tags } component hull configure -width $minw -height $minh update idletasks _positionButtons bindtags $itk_component(hull) [linsert $tags 0 bcage-config] } } # ------------------------------------------------------------------ # METHOD: _positionButtons # # This method is responsible setting the width/height of all the # displayed buttons to the same value and for placing all the buttons # in equidistant locations. # ------------------------------------------------------------------ itcl::body iwidgets::Buttoncage::_positionButtons {} { set bf $itk_component(hull) set numBtns [llength $_displayList] # # First, determine the common width and height for all the # displayed buttons. # if {$numBtns > 0} { set bfWidth [winfo width $itk_component(hull)] set bfHeight [winfo height $itk_component(hull)] if {$bfWidth >= [winfo reqwidth $itk_component(hull)]} { set _btnWidth [_getMaxWidth] } else { set _btnWidth [expr {$bfWidth / $itk_option(-width)}] } if {$bfHeight >= [winfo reqheight $itk_component(hull)]} { set _btnHeight [_getMaxHeight] } else { set _btnHeight [expr {$bfHeight / $itk_option(-height)}] } } # # Place the buttons at the proper locations. # if {$numBtns > 0} { set leftover_width [expr {[winfo width $bf] \ - 2 * $itk_option(-padx) - $_btnWidth * $itk_option(-width)}] set offset_width [expr {$leftover_width / ($itk_option(-width) + 1)}] if {$offset_width < 0} {set offset_width 0} set xDist [expr {$itk_option(-padx) + $offset_width}] set startxDist $xDist set incrAmountX [expr {$_btnWidth + $offset_width}] set leftover_height [expr {[winfo height $bf] \ - 2 * $itk_option(-pady) - $_btnHeight * $itk_option(-height)}] set offset_height [expr {$leftover_height / ($itk_option(-height) + 1)}] if {$offset_height < 0} {set offset_height 0} set yDist [expr {$itk_option(-pady) + $offset_height} + .5 * $_btnHeight] set incrAmountY [expr {$_btnHeight + $offset_height}] set i 1 foreach button $_displayList { place $itk_component($button) -anchor w \ -x $xDist -rely 0 -y $yDist -relx 0 \ -width $_btnWidth -height $_btnHeight if { $i == $itk_option(-width) } { set yDist [expr {$yDist + $incrAmountY}] set xDist $startxDist set i 1 } else { set xDist [expr {$xDist + $incrAmountX}] incr i } } } } iwidgets-4.1.1/incoming/src/collapsablewidget.itk0000644003604700454610000002433307540407250020527 0ustar dgp771div# # Collapsablewidget # ---------------------------------------------------------------------- # Implements a collapsable widget which contains a label and child site. # The child site is a frame which can filled with any widget via a # derived itcl::class or though the use of the childSite method. # # Clicking on the button/arrow indicator will collapse/reveal the # child-site # # ---------------------------------------------------------------------- # AUTHOR: Vince Darley EMAIL: vince@biosgroup.com # # Based upon the labelledwidget distributed under the copyright # below, under which all my modifications are also distributed. # # ---------------------------------------------------------------------- # Copyright (c) 1995-1999 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Default resources. # option add *Collapsablewidget.labelMargin 1 widgetDefault package require Itk # # Usual options. # itk::usual Collapsablewidget { keep -background -cursor -foreground -labelfont } # Define the right pointing and down-pointing triangles # for collapsed and expanded entries. if {[lsearch [image names] closedNode] == -1} { image create bitmap closedNode -data { #define closednode_width 13 #define closednode_height 13 static char closednode_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x30, 0x10, 0x70, 0x10, 0xf0, 0x10, 0xf0, 0x11, 0xf0, 0x13, 0xf0, 0x11, 0xf0, 0x10, 0x70, 0x10, 0x30, 0x10, 0x10, 0x10}; } } if {[lsearch [image names] openNode] == -1} { image create bitmap openNode -data { #define opennode_width 13 #define opennode_height 13 static char opennode_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0xf8, 0x0f, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00}; } } # ------------------------------------------------------------------ # COLLAPSABLEWIDGET # ------------------------------------------------------------------ itcl::class iwidgets::Collapsablewidget { inherit itk::Widget constructor {args} {} destructor {} itk_option define -labelmargin labelMargin Margin 1 itk_option define -labeltext labelText Text {} itk_option define -labelvariable labelVariable Variable {} itk_option define -labelbitmap labelBitmap Bitmap {} itk_option define -labelimage labelImage Image {} itk_option define -collapsed collapsed Collapsed 1 public method childsite public method collapse public method reveal public method toggle protected method _positionLabel {when} proc alignlabels {args} {} protected variable _reposition "" ;# non-null => _positionLabel pending } # # Provide a lowercased access method for the Collapsablewidget class. # proc ::iwidgets::collapsablewidget {pathName args} { uplevel ::iwidgets::Collapsablewidget $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Collapsablewidget::constructor {args} { # # Create the outermost frame to maintain geometry. # itk_component add shell { frame $itk_interior.shell -relief ridge -bd 2 } { keep -background -cursor } pack $itk_component(shell) -fill both -expand yes itk_component add frame { frame $itk_component(shell).frame } { } pack $itk_component(frame) -fill x -expand no -side top itk_component add trigger { button $itk_component(shell).frame.trigger -command "$this toggle" \ -relief flat \ -image closedNode } { } pack $itk_component(trigger) -side left # # Create label. # itk_component add label { label $itk_component(shell).frame.label } { keep -background -foreground -cursor rename -font -labelfont labelFont Font } pack $itk_component(label) -side right -fill x -expand yes # # Create margin between label and the child site. # itk_component add labmargin { frame $itk_component(shell).labmargin } { keep -background -cursor } pack $itk_component(labmargin) -side bottom # # Create a frame for the childsite widget. # itk_component add lwchildsite { frame $itk_component(shell).lwchildsite } { keep -background -cursor } #pack $itk_component(lwchildsite) -fill both -expand yes set itk_interior $itk_component(lwchildsite) ## # Explicitly handle configs that may have been ignored earlier. # eval itk_initialize $args # # When idle, position the label. # } # ------------------------------------------------------------------ # DESTURCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Collapsablewidget::destructor {} { if {$_reposition != ""} {after cancel $_reposition} } itcl::body iwidgets::Collapsablewidget::toggle {} { set itk_option(-collapsed) [expr 1 - $itk_option(-collapsed)] if {$itk_option(-collapsed)} { collapse } else { reveal } } itcl::body iwidgets::Collapsablewidget::collapse {} { pack forget $itk_component(lwchildsite) $itk_component(trigger) configure -image closedNode } itcl::body iwidgets::Collapsablewidget::reveal {} { pack $itk_component(lwchildsite) -side bottom -fill both -expand yes $itk_component(trigger) configure -image openNode } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ itcl::configbody iwidgets::Collapsablewidget::collapsed { if {$itk_option(-collapsed)} { collapse } else { reveal } } # ------------------------------------------------------------------ # OPTION: -labeltext # # Specifies the label text. # ------------------------------------------------------------------ itcl::configbody iwidgets::Collapsablewidget::labeltext { $itk_component(label) configure -text $itk_option(-labeltext) } # ------------------------------------------------------------------ # OPTION: -labelvariable # # Specifies the label text variable. # ------------------------------------------------------------------ itcl::configbody iwidgets::Collapsablewidget::labelvariable { $itk_component(label) configure -textvariable $itk_option(-labelvariable) } # ------------------------------------------------------------------ # OPTION: -labelbitmap # # Specifies the label bitmap. # ------------------------------------------------------------------ itcl::configbody iwidgets::Collapsablewidget::labelbitmap { $itk_component(label) configure -bitmap $itk_option(-labelbitmap) } # ------------------------------------------------------------------ # OPTION: -labelimage # # Specifies the label image. # ------------------------------------------------------------------ itcl::configbody iwidgets::Collapsablewidget::labelimage { $itk_component(label) configure -image $itk_option(-labelimage) } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: childsite # # Returns the path name of the child site widget. # ------------------------------------------------------------------ itcl::body iwidgets::Collapsablewidget::childsite {} { return $itk_component(lwchildsite) } # ------------------------------------------------------------------ # PROCEDURE: alignlabels widget ?widget ...? # # The alignlabels procedure takes a list of widgets derived from # the Collapsablewidget itcl::class and adjusts the label margin to align # the labels. # ------------------------------------------------------------------ itcl::body iwidgets::Collapsablewidget::alignlabels {args} { update set maxLabelWidth 0 # # Verify that all the widgets are of type Collapsablewidget and # determine the size of the maximum length label string. # foreach iwid $args { if {[catch {$iwid isa iwidgets::Collapsablewidget} ret] || $ret == 0} { error "$iwid is not a \"Collapsablewidget\": $ret" } set csWidth [winfo reqwidth $iwid.shell.lwchildsite] set shellWidth [winfo reqwidth $iwid.shell] if {[expr $shellWidth - $csWidth] > $maxLabelWidth} { set maxLabelWidth [expr $shellWidth - $csWidth] } } # # Adjust the margins for the labels such that the child sites and # labels line up. # foreach iwid $args { set csWidth [winfo reqwidth $iwid.shell.lwchildsite] set shellWidth [winfo reqwidth $iwid.shell] set labelSize [expr $shellWidth - $csWidth] if {$maxLabelWidth > $labelSize} { set dist [expr $maxLabelWidth - \ ($labelSize - [winfo reqwidth $iwid.shell.labmargin])] $iwid configure -labelmargin $dist } } } iwidgets-4.1.1/incoming/src/CVS/0000755003604700454610000000000013153526747014771 5ustar dgp771diviwidgets-4.1.1/incoming/src/CVS/Repository0000644003604700454610000000002613136711011017046 0ustar dgp771diviwidgets/incoming/src iwidgets-4.1.1/incoming/src/CVS/Entries0000644003604700454610000000014713153526747016327 0ustar dgp771div/buttoncage.itk/1.1/Fri Sep 13 16:46:00 2002// /collapsablewidget.itk/1.1/Fri Sep 13 16:13:28 2002// D iwidgets-4.1.1/incoming/src/CVS/Root0000644003604700454610000000006613136711011015616 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/demos/0000755003604700454610000000000013136711272013041 5ustar dgp771diviwidgets-4.1.1/demos/tabset0000644003604700454610000000062407340260736014254 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: tabset in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 proc showTab {num} { puts "selected: [.ts tabcget $num -label]" } iwidgets::tabset .ts -command showTab pack .ts for {set i 1} {$i <= 5} {incr i} { .ts add -label "#$i" } .ts select 0 iwidgets-4.1.1/demos/combobox0000644003604700454610000000076707340260135014603 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: combobox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::combobox .cb -labeltext "Font:" -labelpos w -selectioncommand { puts "selected: [.cb getcurselection]" } .cb insert list end Ariel Courier Helvetica Knarly Lucida \ Rumpus Symbol Times "Zapf Dingbats" .cb selection set Times pack .cb iwidgets-4.1.1/demos/mainwindow0000644003604700454610000001222607340260422015137 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: mainwindow in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 wm withdraw . iwidgets::mainwindow .mw set imagedir [file join ${iwidgets::library} demos images] # # Add a File menubutton # .mw menubar add menubutton file -text "File" -underline 0 -padx 8 -pady 2 \ -menu {options -tearoff no command new -label "New" -underline 0 \ -helpstr "Create a new file" command open -label "Open ..." -underline 0 \ -helpstr "Open an existing file" command save -label "Save" -underline 0 \ -helpstr "Save the current file" command saveas -label "Save As ..." -underline 5 \ -helpstr "Save the file as a differnet name" command print -label "Print" -underline 0 \ -helpstr "Print the file" separator sep1 command close -label "Close" -underline 0 \ -helpstr "Close the file" separator sep2 command exit -label "Exit" -underline 1 \ -helpstr "Exit this application" } # # Add the Edit menubutton. # .mw menubar add menubutton edit -text "Edit" -underline 0 -padx 8 -pady 2 \ -menu {options -tearoff no command cut -label "Cut" -underline 2 \ -helpstr "Cut the selection into the clipboard" command copy -label "Copy" -underline 0 \ -helpstr "Copy the selection to the clipboard" command paste -label "Paste" -underline 0 \ -helpstr "Paste the clipboard to the current point" separator sep3 command find -label "Find" -underline 2 \ -helpstr "Search the text" separator sep4 command clear -label "Clear" -underline 2 \ -helpstr "Clear the selection" } # # Add the Help menubutton. # .mw menubar add menubutton help -text "Help" -underline 0 -padx 8 -pady 2 \ -menu {options -tearoff no command onwindow -label "On Window" -underline 3 \ -helpstr "Obtain help on the window" command onkeys -label "On Keys" -underline 3 \ -helpstr "Obtain help on the keys" command index -label "Index" -underline 0 \ -helpstr "View the help index" command onhelp -label "On Help" -underline 2 \ -helpstr "Obtain help on help" command onversion -label "On Version" -underline 2 \ -helpstr "View the version information" } # # Add items to the toolbar. # .mw toolbar add frame filler1 -width 108 -relief raised -borderwidth 2 .mw toolbar add button new \ -image [image create photo -file [file join $imagedir new.gif]] \ -helpstr "Create a new file" \ -balloonstr "New" .mw toolbar add button open \ -image [image create photo -file [file join $imagedir open.gif]] \ -helpstr "Open an existing file" \ -balloonstr "Open" .mw toolbar add button close \ -image [image create photo -file [file join $imagedir close.gif]] \ -helpstr "Close the file" \ -balloonstr "Close" .mw toolbar add frame filler2 -width 20 -relief raised -borderwidth 2 .mw toolbar add button cut \ -image [image create photo -file [file join $imagedir cut.gif]] \ -helpstr "Cut the selection into the cut buffer" \ -balloonstr "Cut" .mw toolbar add button copy \ -image [image create photo -file [file join $imagedir copy.gif]] \ -helpstr "Copy the selection to the cut buffer" \ -balloonstr "Copy" .mw toolbar add button paste \ -image [image create photo -file [file join $imagedir paste.gif]] \ -helpstr "Paste the cut buffer to the current point" \ -balloonstr "Paste" .mw toolbar add button clear \ -image [image create photo -file [file join $imagedir clear.gif]] \ -helpstr "Clear the selection" \ -balloonstr "Clear" .mw toolbar add frame filler3 -relief raised -borderwidth 2 # # Add items to the menubar. # .mw mousebar add button save \ -image [image create photo -file [file join $imagedir save.gif]] \ -helpstr "Save the current file" .mw mousebar add button print \ -image [image create photo -file [file join $imagedir print.gif]] \ -helpstr "Print the file" .mw mousebar add button find \ -image [image create photo -file [file join $imagedir find.gif]] \ -helpstr "Search the text" .mw mousebar add frame filler1 -height 20 -relief raised -borderwidth 2 .mw mousebar add button help \ -image [image create photo -file [file join $imagedir help.gif]] \ -helpstr "Obtain help for this window" .mw mousebar add frame filler2 -relief raised -borderwidth 2 .mw mousebar add button exit \ -image [image create photo -file [file join $imagedir exit.gif]] \ -helpstr "Exit this application" .mw mousebar add frame filler3 -height 5 # # Change the packing of the last fillers in the tool and mouse bar # so that it expands across and down the rest of the mainwindow. # pack [.mw toolbar component filler3] -expand yes -fill both pack [.mw mousebar component filler2] -expand yes -fill both # # Install a scrolledtext widget in the childsite. # iwidgets::scrolledtext [.mw childsite].st -visibleitems 40x8 pack [.mw childsite].st -fill both -expand yes # # Activate the main window. # .mw activate iwidgets-4.1.1/demos/html/0000755003604700454610000000000013136711010013773 5ustar dgp771diviwidgets-4.1.1/demos/html/checkbox.n.html0000644003604700454610000001462206570244356016732 0ustar dgp771divcheckbox - Create and manipulate a checkbox widget

    checkbox - Create and manipulate a checkbox widget

    SYNOPSIS

    checkbox pathName ?options?

    INHERITANCE

    itk::Widget <- labeledframe <- checkbox

    STANDARD OPTIONS

    background
    foreground
    borderWidth
    relief
    cursor
    selectColor
    disabledForeground

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable
    labelMargin

    See the "labeledframe" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   command
    Class:                  Command
    Command-Line Switch:    -command
    
      Specifies a Tcl command procedure to be evaluated following a change in the current check box selection.


    DESCRIPTION

    The checkbox command creates a check button box widget capable of adding, inserting, deleting, selecting, and configuring checkbuttons as well as obtaining the currently selected button.

    METHODS

    The checkbox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command.

    Many of the widget commands for the checkbox take as one argument an indicator of which checkbutton of the checkbox to operate on. These indicators are called indexes and allow reference and manipulation of checkbuttons. Checkbox indexes may be specified in any of the following forms:

    number
    Specifies the checkbutton numerically, where 0 corresponds to the top checkbutton of the checkbox.
    end
    Indicates the last checkbutton of the checkbox.
    pattern
    If the index doesn't satisfy one of the above forms then this form is used. Pattern is pattern-matched against the tag of each checkbutton in the checkbox, in order from top to bottom, until a matching entry is found. The rules of Tcl_StringMatch are used.

    WIDGET-SPECIFIC METHODS

    pathName add tag ?option value option value?
    Adds a new checkbutton to the checkbuttond window on the bottom. The command takes additional options which are passed on to the checkbutton as construction arguments. These include the standard Tk checkbutton options. The tag is returned.
    pathName buttonconfigure index ?options?
    This command is similar to the configure command, except that it applies to the options for an individual checkbutton, whereas configureapplies to the options for the checkbox as a whole. Options may have any of the values accepted by the add widget command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for entry index (see Tk_ConfigureInfo for information on the format of this list).
    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the checkbox command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the checkbox command.
    pathName delete index
    Deletes a specified checkbutton given an index.
    pathName deselect index
    Deselects a specified checkbutton given an index.
    pathName flash index
    Flashes a specified checkbutton given an index.
    pathName get ?index?
    Returns the tags of the currently selected checkbuttons or the selection status of specific checkbutton when given an index.
    pathName index index
    Returns the numerical index corresponding to index.
    pathName insert index tag ?option value option value ...?
    Same as the add command except that it inserts the new checkbutton just before the one given by index, instead of appending to the end of the checkbox. The option, and value arguments have the same interpretation as for the add widget command.
    pathName select index
    Selects a specified checkbutton given an index.

    EXAMPLE

     checkbox .cb -labeltext Styles
     .cb add bold -text Bold
     .cb add italic -text Italic
     .cb add underline -text Underline
     .cb select underline
    
     pack .cb -padx 10 -pady 10 -fill both -expand yes
    

    AUTHOR

    John A. Tucker

    KEYWORDS

    checkbox, widget iwidgets-4.1.1/demos/html/spinint.n.html0000644003604700454610000001477406570255571016641 0ustar dgp771divspinint - Create and manipulate a integer spinner widget

    spinint - Create and manipulate a integer spinner widget

    SYNOPSIS

    spinint pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <- Spinner <- Spinint

    STANDARD OPTIONS

    background
    foreground
    insertBorderWidth
    justify
    selectForeground
    borderWidth
    highlightColor
    insertOffTime
    relief
    textVariable
    cursor
    highlightThickness
    insertOnTime
    selectBackground
    exportSelection
    insertBackground
    insertWidth
    selectBorderWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    show
    state

    See the "entry" manual entry for details on the associated options.

    INHERITED OPTIONS

    command
    invalid
    width
    childSitePos
    textBackground
    fixed
    textFont
    focusCommand
    validate

    See the "entryfield" widget manual entry for details on the above inherited options.

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" widget manual entry for details on the above inherited options.

    arroworient
    repeatInterval
    decrement
    increment
    repeatDelay

    See the "spinner" widget manual entry for details on the above inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   range
    Class:                  Range
    Command-Line Switch:	-range
    
      Specifies a two element list of minimum and maximum integer values. The default is no range, {{} {}}.

    Name:                   step
    Class:                  Step
    Command-Line Switch:	-step
    
      Specifies the increment/decrement value. The default is 1.

    Name:                   wrap
    Class:                  Wrap
    Command-Line Switch:	-wrap
    
      Specifies whether to wrap the spinner value upon reaching the minimum or maximum value in any of the forms acceptable to Tcl_GetBoolean. The default is true.


    DESCRIPTION

    The spinint command creates a spinint widget. The spinint allows "spinning" of integer values within a specified range with wrap support. The spinner arrows may be drawn horizontally or vertically.

    METHODS

    The spinint command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for spinint widgets:

    ASSOCIATED METHODS

    delete
    insert
    xview
    get
    peek
    icursor
    scan
    index
    selection

    See the "entry" manual entry for details on the associated methods.

    INHERITED METHODS

    childsite
    clear

    See the "entryfield" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the spinint command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the spinint command.
    pathName down
    Decrement the spinner value by the value given in the step option.
    pathName up
    Increment the spinner value by the value given in the step option.

    COMPONENTS

      See the "Spinner" widget manual entry for details on the integer spinner component items.

    EXAMPLE

     option add *textBackground white
     
     spinint .si -labeltext "Temperature" -labelpos w \\
        -fixed yes -width 5 -range {32 212}
    
     pack .si -pady 10
    

    AUTHOR

    Sue Yockey

    KEYWORDS

    spinint, widget iwidgets-4.1.1/demos/html/fileselectiondialog.n.html0000644003604700454610000001714507347201315021143 0ustar dgp771divfileselectiondialog - Create and manipulate a file selection dialog widget

    fileselectiondialog - Create and manipulate a file selection dialog widget

    SYNOPSIS

    fileselectiondialog pathName ?options?

    INHERITANCE

    itk::Toplevel <- Shell <- Dialogshell <- Dialog <- Fileselectiondialog

    STANDARD OPTIONS

    activeBackground
    foreground
    insertBorderWidth
    selectBackground
    background
    highlightColor
    insertOffTime
    selectBorderWidth
    borderWidth
    highlightThickness
    insertOnTime
    selectForeground
    cursor
    insertBackground
    insertWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    textBackground
    textFont

    See the "entryfield" widget manual entry for details on the above associated options.

    childSitePos
    dirsOn
    filesOn
    invalid
    selectionOn
    directory
    filesLabel
    fileType
    mask
    dirsLabel
    filesLabelOn
    filterLabel
    noMatchString
    dirSearchCommand
    fileSearchCommand
    filterOn
    selectionLabel

    See the "fileselectionbox" widget manual entry for details on the above associated options.

    labelFont

    See the "labeledwidget" widget manual entry for details on the above associated options.

    textBackground
    textFont

    See the "scrolledlistbox" widget manual entry for details on the above associated options.

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget class manual entry for details on the above associated options.

    INHERITED OPTIONS

    buttonBoxPadX
    padY
    buttonBoxPadY
    separator
    buttonBoxPos
    thickness
    padX

    See the "dialogshell" widget manual entry for details on the above inherited options.

    height
    master
    modality
    width

    See the "shell" widget manual entry for details on the above inherited options.

    title

    See the "Toplevel" widget manual entry for details on the above inherited options.


    DESCRIPTION

    The fileselectiondialog command creates a file selection dialog similar to the OSF/Motif standard composite widget. The fileselectiondialog is derived from the Dialog class and is composed of a FileSelectionBox with attributes set to manipulate the dialog buttons.

    METHODS

    The fileselectiondialog command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for fileselectiondialog widgets:

    ASSOCIATED METHODS

    get
    childsite
    filter

    See the "fileselectionbox" class manual entry for details on the associated methods.

    INHERITED METHODS

    add
    insert
    buttonconfigure
    invoke
    default
    show
    hide

    See the "buttonbox" widget manual entry for details on the above inherited methods.

    activate
    center
    deactivate

    See the "shell" widget manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the fileselectiondialog command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the fileselectiondialog command.

    COMPONENTS

    Name:                   fsb
    Class:                  Fileselectionbox
    
      The fsb component is the file selection box for the file selection dialog. See the "fileselectionbox" widget manual entry for details on the fsb component item.

    EXAMPLE

     #
     # Non-modal example
     #
     proc okCallback {} {
         puts "You selected [.nmfsd get]"
         .nmfsd deactivate
     }
    
     fileselectiondialog .nmfsd -title Non-Modal
     .nmfsd buttonconfigure OK -command okCallback
    
     .nmfsd activate
    
     #
     # Modal example
     #
     fileselectiondialog .mfsd -modality application
     .mfsd center
    
     if {[.mfsd activate]} {
         puts "You selected [.mfsd get]"
     } else {
         puts "You cancelled the dialog"
     }
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    fileselectiondialog, fileselectionbox, dialog, dialogshell, shell, widget iwidgets-4.1.1/demos/html/tabnotebook.n.html0000644003604700454610000007334706570255576017472 0ustar dgp771divtabnotebook - create and manipulate tabnotebook widgets

    tabnotebook - create and manipulate tabnotebook widgets

    SYNOPSIS

    tabnotebook pathName? options?

    INHERITANCE

    itk::Widget <- tabnotebook

    STANDARD OPTIONS

    background
    cursor
    disabledForeground
    font
    foreground
    height
    scrollCommand
    width

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   angle
    Class:                  Angle
    Command-Line Switch:	-angle
    
      Specifes the angle of slope from the inner edge to the outer edge of the tab. An angle of 0 specifies square tabs. Valid ranges are 0 to 45 degrees inclusive. Default is 15 degrees. If tabPos is e or w, this option is ignored.

    Name:                   auto
    Class:                  Auto
    Command-Line Switch:	-auto
    
      Specifies whether to use the automatic packing/unpacking algorithm of the notebook. A value of true indicates that page frames will be unpacked and packed acoording to the algorithm described in the select command. A value of false leaves the current page packed and subsequent selects, next, or previous commands do not switch pages automatically. In either case the page's associated command (see the add command's description of the command option) is invoked. The value may have any of the forms accepted by the Tcl_GetBoolean, such as true, false, 0, 1, yes, or no.

    Name:                   backdrop
    Class:                  Backdrop
    Command-Line Switch:	-backdrop
    
      Specifies a background color to use when filling in the backdrop area behind the tabs.

    Name:                   background
    Class:                  Background
    Command-Line Switch:	-background
    
      Specifies a background color to use for displaying a page and its associated tab. This can be thought of as the selected tab background color, since the tab associated with the selected page is the selected tab.

    Name:                   bevelAmount
    Class:                  BevelAmount
    Command-Line Switch:	-bevelamount
    
      Specifes the size of tab corners. A value of 0 with angle set to 0 results in square tabs. A bevelAmount of 4, means that the tab will be drawn with angled corners that cut in 4 pixels from the edge of the tab. The default is 0.

    Name:                   borderWidth
    Class:                  BorderWidth
    Command-Line Switch:	-borderwidth
    
      Specifies the width of shadowed border to place around the notebook area of the tabnotebook. The default value is 2.

    Name:                   disabledForeground
    Class:                  DisabledForeground
    Command-Line Switch:	-disabledforeground
    
      Specifies a foreground color to use for displaying a tab's label when its state is disabled.

    Name:                   equalTabs
    Class:                  EqualTabs
    Command-Line Switch:	-equaltabs
    
      Specifies whether to force tabs to be equal sized or not. A value of true means constrain tabs to be equal sized. A value of false allows each tab to size based on the text label size. The value may have any of the forms accepted by the Tcl_GetBoolean, such as true, false, 0, 1, yes, or no.
      For horizontally positioned tabs (tabpos is either s or n), true forces all tabs to be equal width (the width being equal to the longest label plus any padX specified). Horizontal tabs are always equal in height.
      For vertically positioned tabs (tabpos is either w or e), true forces all tabs to be equal height (the height being equal to the height of the label with the largest font). Vertically oriented tabs are always equal in width.

    Name:                   foreground
    Class:                  Foreground
    Command-Line Switch:	-foreground
    
      Specifies a foreground color to use for displaying a page and its associated tab label. This can be thought of as the selected tab background color, since the tab associated with the selected page is the selected tab.

    Name:                   gap
    Class:                  Gap
    Command-Line Switch:	-gap
    
      Specifies the amount of pixel space to place between each tab. Value may be any pixel offset value. In addition, a special keyword overlap can be used as the value to achieve a standard overlap of tabs. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   margin
    Class:                  Margin
    Command-Line Switch:	-Bmargin
    
      Specifies the amount of space to place between the outside edge of the tabnotebook and the outside edge of its tabs. If tabPos is s, this is the amount of space between the bottom edge of the tabnotebook and the bottom edge of the set of tabs. If tabPos is n, this is the amount of space between the top edge of the tabnotebook and the top edge of the set of tabs. If tabPos is e, this is the amount of space between the right edge of the tabnotebook and the right edge of the set of tabs. If tabPos is w, this is the amount of space between the left edge of the tabnotebook and the left edge of the set of tabs. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   padX
    Class:                  PadX
    Command-Line Switch:	-padx
    
      Specifies a non-negative value indicating how much extra space to request for a tab around its label in the X-direction. When computing how large a window it needs, the tab will add this amount to the width it would normally need The tab will end up with extra internal space to the left and right of its text label. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   padY
    Class:                  PadY
    Command-Line Switch:	-pady
    
      Specifies a non-negative value indicating how much extra space to request for a tab around its label in the Y-direction. When computing how large a window it needs, the tab will add this amount to the height it would normally need The tab will end up with extra internal space to the top and bottom of its text label. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   raiseSelect
    Class:                  RaiseSelect
    Command-Line Switch:	-raiseselect
    
      Specifes whether to slightly raise the selected tab from the rest of the tabs. The selected tab is drawn 2 pixels closer to the outside of the tabnotebook than the unselected tabs. A value of true says to raise selected tabs, a value of false turns this feature off. The default is false. The value may have any of the forms accepted by the Tcl_GetBoolean, such as true, false, 0, 1, yes, or no.

    Name:                   start
    Class:                  Start
    Command-Line Switch:	-start
    
      Specifies the amount of space to place between the left or top edge of the tabnotebook and the starting edge of its tabs. For horizontally positioned tabs, this is the amount of space between the left edge of the notebook and the left edge of the first tab. For vertically positioned tabs, this is the amount of space between the top of the notebook and the top of the first tab. This value may change if the user performs a MButton-2 scroll on the tabs. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Sets the active state of the tabnotebook. Specifying normal allows all pages to be selectable. Specifying disabled disables the notebook causing all page tabs to be drawn in the disabledForeground color.

    Name:                   tabBackground
    Class:                  TabBackground
    Command-Line Switch:	-tabbackground
    
      Specifies a background color to use for displaying tab backgrounds when they are in their unselected state. This is the background associated with tabs on all pages other than the selected page.

    Name:                   tabBorders
    Class:                  TabBorders
    Command-Line Switch:	-tabborders
    
      Specifies whether to draw the borders of tabs that are not selected. Specifying true (the default) draws these borders, specifying false draws only the border around the selected tab. The value may have any of the forms accepted by the Tcl_GetBoolean, such as true, false, 0, 1, yes, or no.

    Name:                   tabForeground
    Class:                  TabForeground
    Command-Line Switch:	-tabforeground
    
      Specifies a foreground color to use for displaying tab labels when they are in their unselected state. This is the foreground associated with tabs on all pages other than the selected page.

    Name:                   tabPos
    Class:                  TabPos
    Command-Line Switch:	-tabpos
    
      Specifies the location of the set of tabs in relation to the notebook area. Must be n, s, e, or w. Defaults to s.

    DESCRIPTION

    The tabnotebook command creates a new window (given by the pathName argument) and makes it into a tabnotebook widget. Additional options, described above may be specified on the command line or in the option database to configure aspects of the tabnotebook such as its colors, font, and text. The tabnotebook command returns its pathName argument. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist.

    A tabnotebook is a widget that contains a set of tabbed pages. It displays one page from the set as the selected page. A Tab displays the label for the page to which it is attached and serves as a page selector. When a page's tab is selected, the page's contents are displayed in the page area. The selected tab has a three-dimensional effect to make it appear to float above the other tabs. The tabs are displayed as a group along either the left, top, right, or bottom edge. When first created a tabnotebook has no pages. Pages may be added or deleted using widget commands described below.

    A special option may be provided to the tabnotebook. The -auto option specifies whether the tabnotebook will automatically handle the unpacking and packing of pages when pages are selected. A value of true signifies that the notebook will automatically manage it. This is the default value. A value of false signifies the notebook will not perform automatic switching of pages.

    NOTEBOOK PAGES

    A tabnotebook's pages area contains a single child site frame. When a new page is created it is a child of this frame. The page's child site frame serves as a geometry container for applications to pack widgets into. It is this frame that is automatically unpacked or packed when the auto option is true. This creates the effect of one page being visible at a time. When a new page is selected, the previously selected page's child site frame is automatically unpacked from the tabnotebook's child site frame and the newly selected page's child site is packed into the tabnotebook's child site frame.

    However, sometimes it is desirable to handle page changes in a different manner. By specifying the auto option as false, child site packing can be disabled and done differently. For example, all widgets might be packed into the first page's child site frame. Then when a new page is selected, the application can reconfigure the widgets and give the appearance that the page was flipped.

    In both cases the command option for a page specifies a Tcl Command to execute when the page is selected. In the case of auto being true, it is between the unpacking of the previously selected page and the packing of the newly selected page.

    Notebook pages can also be controlled with scroll bars or other widgets that obey the scrollcommand protocol. By giving a scrollbar a -command to call the tabnotebook's select method, the tabnotebook can be controlled with a scrollbar.

    The notebook area is implemented with the notebook mega widget.

    TABS

    Tabs appear along the edge of the notebook area. Tabs are drawn to appear attached to their associated page. When a tab is clicked on, the associated page is selected and the tab is drawn as raised above all other tabs and as a seamless part of its notebook page. Tabs can be controlled in their location along the edges, the angle tab sides are drawn with, gap between tabs, starting margin of tabs, internal padding around text labels in a tab, the font, and its label.

    The Tab area is implemented with the tabset mega widget. See tabset(1). Tabs may be oriented along either the north, south, east, or west sides with the tabPos option. North and south tabs may appear as angled, square, or bevelled. West and east tabs may appear as square or bevelled. By changing tab gaps, tab angles, bevelling, orientations, colors, fonts, start locations, and margins; tabs may appear in a wide variety of styles. For example, it is possible to implement Microsoft-style tabs, Borland property tab styles, or Borland Delphi style tabs all with the same tabnotebook.

    WIDGET-SPECIFIC METHODS

    The tabnotebook command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    option and the args determine the exact behavior of the command.

    Many of the widget commands for a notebook take as one argument an indicator of which page of the notebook to operate on. These indicators are called indexes and may be specified in any of the following forms:

    number
    Specifies the page numerically, where 0 corresponds to the first page in the notebook, 1 to the second, and so on.
    select
    Specifies the currently selected page's index. If no page is currently selected, the value -1 is returned.
    end
    Specifes the last page in the tabnotebook's index. If the notebook is empty this will return -1.
    pattern
    If the index doesn't satisfy any of the above forms, then this form is used. Pattern is pattern-matched against the label of each page in the notebook, in order from the first to the last page, until a matching entry is found. The rules of Tcl_StringMatch are used. '............................................................................. The following commands are possible for tabnotebook widgets:
    pathName add ?option value option value ...?
    Add a new page at the end of the tabnotebook. A new child site frame is created. Returns the child site pathName. If additional arguments are present, they specify any of the following options:
      -angle value
      Specifes the angle of slope from the inner edge to the outer edge of the tab. An angle of 0 specifies square tabs. Valid ranges are 0 to 45 degrees inclusive. Default is 15 degrees. If this option is specified as an empty string (the default), then the angle option for the overall tabnotebook is used. This is generally only set at the tabnotebook level. Tabs normally will want to share the same angle value.
      -background value
      Specifies a background color to use for displaying tabs when they are selected and for displaying the current page. If this option is specified as an empty string (the default), then the background option for the overall tabnotebook is used.
      -bevelamount value
      Specifes the size of tab corners. A value of 0 with angle set to 0 results in square tabs. A bevelAmount of 4, means that the tab will be drawn with angled corners that cut in 4 pixels from the edge of the tab. The default is 0. This is generally only set at the tabnotebook level. Tabs normally will want to share the same bevelAmount.
      -bitmap value
      If label is a non-empty string, specifies a bitmap to display in this page's tab. Bitmap may be of any of the forms accepted by Tk_GetPixmap.
      -command value
      Specifies a Tcl command to be executed when this page is selected. This allows the programmer a hook to reconfigure this page's widgets or any other page's widgets.
        If the tabnotebook has the auto option set to true, when a page is selected this command will be called immediately after the previously selected page is unpacked and immediately before this page is selected. The index value select is valid during this Tcl command. `index select' will return this page's page number.
        If the auto option is set to false, when a page is selected the unpack and pack calls are bypassed. This Tcl command is still called.
      -disabledforeground value
      Specifies a foreground color to use for displaying tab labels when tabs are in their disable state. If this option is specified as an empty string (the default), then the disabledforeground option for the overall tabnotebook is used.
      -font value
      Specifies the font to use when drawing a text label on a page tab. If this option is specified as an empty string then the font option for the overall tabnotebook is used..
      -foreground value
      Specifies a foreground color to use for displaying tab labels when they are selected. If this option is specified as an empty string (the default), then the foreground option for the overall tabnotebook is used.
      -label value
      Specifies a string to display as an identifying label for a notebook page. This label serves as an additional identifier used to reference the page. This label may be used for the index value in widget commands.
      -tabbackground value
      Specifies a background color to use for displaying a tab when it is not elected. If this option is specified as an empty string (the default), then the tabBackground option for the overall tabnotebook is used.
      -tabforeground value
      Specifies a foreground color to use for displaying the tab's text label when it is not selected. If this option is specified as an empty string (the default), then the tabForeground option for the overall tabnotebook is used.
      -padx value
      Specifies a non-negative value indicating how much extra space to request for a tab around its label in the X-direction. When computing how large a window it needs, the tab will add this amount to the width it would normally need The tab will end up with extra internal space to the left and right of its text label. This value may have any of the forms acceptable to Tk_GetPixels. If this option is specified as an empty string (the default), then the padX option for the overall tabnotebook is used
      -pady value
      Specifies a non-negative value indicating how much extra space to request for a tab around its label in the Y-direction. When computing how large a window it needs, the tab will add this amount to the height it would normally need The tab will end up with extra internal space to the top and bottom of its text label. This value may have any of the forms acceptable to Tk_GetPixels. If this option is specified as an empty string (the default), then the padY option for the overall tabnotebook is used
      -state value
      Specifies one of two states for the page: normal or disabled. In normal state unselected tabs are displayed using the tabforeground and tabbackground option from the tabnotebook or the page. Selected tabs and pages are displayed using the foreground and background option from the tabnotebook or the page. The disabled state means that the page and its tab is insensitive: it doesn't respond to mouse button presses or releases. In this state the entry is displayed according to its disabledForeground option for the tabnotebook and the background/tabbackground option from the page or the tabnotebook.
    '>>>>>>>>>>
    pathName childSite ?index? If passed no arguments, returns a list of pathNames for all the pages in the tabnotebook. If the tab notebook is empty, an empty list is returned
      If index is passed, it returns the pathName for the page's child site frame specified by index. Widgets that are created with this pathName will be displayed when the associated page is selected. If index is not a valid index, an empty string is returned.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the tabnotebook command.
    pathName delete index1 ?index2?
    Delete all of the pages between index1 and index2 inclusive. If index2 is omitted then it defaults to index1. Returns an empty string.
    pathName index index
    Returns the numerical index corresponding to index.
    pathName insert index ?option value option value ...?
    Insert a new page in the tabnotebook before the page specified by index. A new child site frame is created. The additional arguments are the same as for the add command. Returns the child site pathName.
    pathName next
    Advances the selected page to the next page (order is determined by insertion order). If the currently selected page is the last page in the notebook, the selection wraps around to the first page in the notebook. It behaves as if the user selected the new page.
      For notebooks with auto set to true the current page's child site is unpacked from the notebook's child site frame. Then the next page's child site is packed into the notebook's child site frame. The Tcl command given with the command option will be invoked between these two operations.
      For notebooks with auto set to false the Tcl command given with the command option will be invoked.
    pathName pageconfigure index ?option? ?value option value ...?
    This command is similar to the configure command, except that it applies to the options for an individual page, whereas configure applies to the options for the tabnotebook as a whole. Options may have any of the values accepted by the add widget command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for page index (see Tk_ConfigureInfo for information on the format of this list).
    pathName prev
    Moves the selected page to the previous page (order is determined by insertion order). If the currently selected page is the first page in the notebook, the selection wraps around to the last page in the notebook. It behaves as if the user selected the new page.
      For notebooks with auto set to true the current page's child site is unpacked from the notebook's child site frame. Then the previous page's child site is packed into the notebook's child site frame. The Tcl command given with the command option will be invoked between these two operations.
      For notebooks with auto set to false the Tcl command given with the command option will be invoked.
    pathName select index
    Selects the page specified by index as the currently selected page. It behaves as if the user selected the new page.
      For notebooks with auto set to true the current page's child site is unpacked from the notebook's child site frame. Then the index page's child site is packed into the notebook's child site frame. The Tcl command given with the command option will be invoked between these two operations.
      For notebooks with auto set to false the Tcl command given with the command option will be invoked.
    pathName view
    Returns the currently selected page. This command is for compatibility with the scrollbar widget.
    pathName view index
    Selects the page specified by index as the currently selected page. This command is for compatibility with the scrollbar widget.
    pathName view moveto fraction
    Uses the fraction value to determine the corresponding page to move to. This command is for compatibility with the scrollbar widget.
    pathName view scroll num what
    Uses the num value to determine how many pages to move forward or backward (num can be negative or positive). The what argument is ignored. This command is for compatibility with the scrollbar widget.

    COMPONENTS

    Generally all behavior of the internal components, tabset and notebook are controlled via the pageconfigure method. The following section documents these two components.

    Name:                   tabset
    Class:                  Tabset
    
      This is the tabset component. It implements the tabs that are associated with the notebook component.
      See the "Tabset" widget manual entry for details on the tabset component item.

    Name:                   notebook
    Class:                  Notebook
    
      This is the notebook component. It implements the notebook that contains the pages of the tabnotebook.
      See the "Notebook" widget manual entry for details on the notebook component item.

    EXAMPLE

    Following is an example that creates a tabnotebook with two pages.


      the
      pack
      -width
      pack
      nw
      \\
      -side
      10

        pages
        #
        and
        add
        .tn
        Two"
        Get
        frames
        pages.
        childsite
        [.tn

      buttons
      of
      $page1CS.b
      pack
      -text
      $page2CS.b
      Select
      of
      select

    tabnotebook
    it.
    100
    .tn
    \\
    -expand
    left
    \\
    #
    to
    labelled
    "Page
    -label
    add

    the
    of
    set
    0]
    childsite

      on
      the
      -text
      $page1CS.b
      "Button

    the
    the
    0
    #
    widget
    tabnotebook
    -height
    \\
    -fill
    yes
    \\
    -pady
    Add
    the
    "Page
    Two"
    "Page
    -label

      child
      these
      page1CS
      set
      "Page
      #
      each
      tabnotebook.
      "Button
      button
      Two"

        first
        tabnotebook.

    Create
    and
    .tn
    100
    -anchor
    both
    \\
    -padx
    10
    two
    tabnotebook,
    One"
    .tn
    One"
    "Page
    #
    site
    two
    [.tn
    page2CS
    Two"]
    Create
    page
    button
    One"
    $page2CS.b
    pack
    #
    page
    .tn

    AUTHOR

    Bill W. Scott

    KEYWORDS

    tab tabset notebook tabnotebook page iwidgets-4.1.1/demos/html/extfileselectiondialog.n.html0000644003604700454610000002035707347201214021661 0ustar dgp771divextfileselectiondialog - Create and manipulate a file selection dialog widget

    extfileselectiondialog - Create and manipulate a file selection dialog widget

    SYNOPSIS

    extfileselectiondialog pathName ?options?

    INHERITANCE

    itk::Toplevel <- Shell <- Dialogshell <- Dialog <- Extfileselectiondialog

    STANDARD OPTIONS

    activeBackground
    foreground
    insertBorderWidth
    selectBackground
    background
    highlightColor
    insertOffTime
    selectBorderWidth
    borderWidth
    highlightThickness
    insertOnTime
    selectForeground
    cursor
    insertBackground
    insertWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    popupCursor
    textBackground
    textFont

    See the "combobox" widget manual entry for details on the above associated options.

    childSitePos
    dirsOn
    filesOn
    invalid
    selectionOn
    directory
    filesLabel
    fileType
    mask
    dirsLabel
    filesLabelOn
    filterLabel
    noMatchString
    dirSearchCommand
    fileSearchCommand
    filterOn
    selectionLabel

    See the "extfileselectionbox" widget manual entry for details on the above associated options.

    labelFont

    See the "labeledwidget" widget manual entry for details on the above associated options.

    sashCursor

    See the "panedwindow" widget manual entry for details on the above associated options.

    labelFont

    See the "labeledwidget" widget manual entry for details on the above associated options.

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget class manual entry for details on the above associated options.

    textBackground
    textFont

    See the "scrolledlistbox" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    buttonBoxPadX
    padY
    buttonBoxPadY
    separator
    buttonBoxPos
    thickness
    padX

    See the "dialogshell" widget manual entry for details on the above inherited options.

    height
    master
    modality
    width

    See the "shell" widget manual entry for details on the above inherited options.

    title

    See the "Toplevel" widget manual entry for details on the above inherited options.


    DESCRIPTION

    The extfileselectiondialog command creates an extended file selection dialog which is slightly different than the fileselectiondialog widget. The differences are mostly cosmetic in that the listboxes are within a panedwindow and the entryfields for the filter and selection have been replaced by comboboxes. Other than that the interface is practically the same.

    METHODS

    The extfileselectiondialog command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for extfileselectiondialog widgets:

    ASSOCIATED METHODS

    get
    childsite
    filter

    See the "fileselectionbox" class manual entry for details on the associated methods.

    INHERITED METHODS

    add
    insert
    buttonconfigure
    invoke
    default
    show
    hide

    See the "buttonbox" widget manual entry for details on the above inherited methods.

    activate
    center
    deactivate

    See the "shell" widget manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the extfileselectiondialog command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the extfileselectiondialog command.

    COMPONENTS

    Name:                   fsb
    Class:                  Fileselectionbox
    
      The fsb component is the extfileselectionbox for the extfileselectiondialog. See the "extfileselectionbox" widget manual entry for details on the fsb component item.

    EXAMPLE

     #
     # Non-modal example
     #
     proc okCallback {} {
         puts "You selected [.nmfsd get]"
         .nmfsd deactivate
     }
    
     extfileselectiondialog .nmfsd -title Non-Modal
     .nmfsd buttonconfigure OK -command okCallback
    
     .nmfsd activate
    
     #
     # Modal example
     #
     extfileselectiondialog .mfsd -modality application
     .mfsd center
    
     if {[.mfsd activate]} {
         puts "You selected [.mfsd get]"
     } else {
         puts "You cancelled the dialog"
     }
    

    AUTHORS

    Mark L. Ulferts

    Anthony L. Parent

    KEYWORDS

    extfileselectiondialog, extfileselectionbox, dialog, dialogshell, shell, widget iwidgets-4.1.1/demos/html/watch.n.html0000644003604700454610000002140607347202012016232 0ustar dgp771divwatch - Create and manipulate time with a watch widgets

    watch - Create and manipulate time with a watch widgets

    SYNOPSIS

    watch pathName ?options?

    INHERITANCE

    itk::Widget <- Watch

    STANDARD OPTIONS

    background
    cursor
    foreground
    relief

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    See the "Canvas" manual entry for details on the above associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   clockColor
    Class:                  ColorfR
    Command-Line Switch:	-clockcolor
    
      Fill color for the main oval encapsulating the watch, in any of the forms acceptable to Tk_GetColor. The default is "White".


    BitmapfR

    Name:
    Command-Line
    clockStipple
    Switch:
    Class:
    -clockstipple
      Bitmap for the main oval encapsulating the watch, in any of the forms acceptable to Tk_GetBitmap. The default is "".

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the watch widget in any of the forms acceptable to Tk_GetPixels. The default height is 175 pixels.

    Name:                   hourColor
    Class:                  ColorfR
    Command-Line Switch:	-hourcolor
    
      Fill color for the hour hand, in any of the forms acceptable to Tk_GetColor. The default is "Red".

    Name:                   hourRadius
    Class:                  Radius
    Command-Line Switch:	-hourradius
    
      Specifies the radius of the hour hand as a percentage of the radius from the center to the out perimeter of the clock. The value must be a fraction <= 1. The default is ".5".

    Name:                   minuteColor
    Class:                  ColorfR
    Command-Line Switch:	-minutecolor
    
      Fill color for the minute hand, in any of the forms acceptable to Tk_GetColor. The default is "Yellow".

    Name:                   minuteRadius
    Class:                  Radius
    Command-Line Switch:	-minuteradius
    
      Specifies the radius of the minute hand as a percentage of the radius from the center to the out perimeter of the clock. The value must be a fraction <= 1. The default is ".8".

    Name:                   pivotColor
    Class:                  ColorfR
    Command-Line Switch:	-pivotcolor
    
      Fill color for the circle in which the watch hands rotate in any of the forms acceptable to Tk_GetColor. The default is "White".

    Name:                   pivotRadius
    Class:                  Radius
    Command-Line Switch:	-pivotradius
    
      Specifies the radius of the circle in which the watch hands rotate as a percentage of the radius. The value must be a fraction <= 1. The default is ".1".

    Name:                   secondColor
    Class:                  ColorfR
    Command-Line Switch:	-secondcolor
    
      Fill color for the second hand, in any of the forms acceptable to Tk_GetColor. The default is "Black".

    Name:                   secondRadius
    Class:                  Radius
    Command-Line Switch:	-secondradius
    
      Specifies the radius of the second hand as a percentage of the radius from the center to the out perimeter of the clock. The value must be a fraction <= 1. The default is ".9".

    Name:                   showAmPm
    Class:                  ShosAmPm
    Command-Line Switch:	-showampm
    
      Specifies whether the AM/PM radiobuttons should be displayed, in any of the forms acceptable to Tcl_GetBoolean. The default is yes.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Specifies the editable state for the hands on the watch. In a normal state, the user can select and move the hands via mouse button 1. The valid values are normal, and disabled. The defult is normal.

    Name:                   tickColor
    Class:                  ColorfR
    Command-Line Switch:	-tickcolor
    
      Fill color for the 60 ticks around the perimeter of the watch, in any of the forms acceptable to Tk_GetColor. The default is "Black".

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the watch widget in any of the forms acceptable to Tk_GetPixels. The default height is 155 pixels.

    DESCRIPTION

    The watch command creates a watch with hour, minute, and second hands modifying the time value.

    METHODS

    The watch command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for watch widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the watch command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the watch command.
    pathName get ?format?
    Returns the current time of the watch in a format of string or as an integer clock value using the -string and -clicks format options respectively. The default is by string. Reference the clock command for more information on obtaining time and its formats.
    pathName show time
    Changes the currently displayed time to be that of the time argument. The time may be specified either as a string, an integer clock value or the keyword "now". Reference the clock command for more information on obtaining time and its format.
    pathName watch ?args?
    Evaluates the specifieds args against the canvas component.

    COMPONENTS

    Name:                   canvas
    Class:                  Canvas
    
      The canvas component is the where the clock is drawn. See the Canvas widget manual entry for details.

    Name:                   frame
    Class:                  Frame
    
      The frame component is the where the "AM" and "PM" radiobuttons are displayed. See the Frame widget manual entry for details.

    Name:                   am
    Class:                  Radiobutton
    
      The am component indicates whether on not the time is relative to "AM". See the Radiobutton widget manual entry for details.

    Name:                   pm
    Class:                  Radiobutton
    
      The pm component indicates whether on not the time is relative to "PM". See the Radiobutton widget manual entry for details.

    EXAMPLE

    watch .w -state disabled -showampm no -width 155 -height 155
    pack .w -padx 10 -pady 10 -fill both -expand yes
    
    while {1} {
      after 1000
      .w show
      update
    }
    

    AUTHORS

    John Tucker

    Mark L. Ulferts

    KEYWORDS

    watch, hand, ticks, pivot, widget iwidgets-4.1.1/demos/html/feedback.n.html0000644003604700454610000001154306570255546016672 0ustar dgp771divfeedback - Create and manipulate a feedback widget to display feedback on

    feedback - Create and manipulate a feedback widget to display feedback on

    the current status of an ongoing operation to the user.

    SYNOPSIS

    feedback pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <- Feedback

    STANDARD OPTIONS

    background
    highlightThickness
    cursor
    foreground
    highlightColor

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable
    labelMargin

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   barcolor
    Class:                  BarColor
    Command-Line Switch:	-barcolor
    
      Specifies the color of the status bar, in any of the forms acceptable to Tk_GetColor. The default is DodgerBlue.

    Name:                   barheight
    Class:                  BarHeight
    Command-Line Switch:	-barheight
    
      Specifies the height of the status bar, in any of the forms acceptable to Tk_GetPixels. The default is 20.

    Name:                   troughColor
    Class:                  TroughColor
    Command-Line Switch:	-troughcolor
    
      Specifies the color of the frame in which the status bar sits, in any of the forms acceptable to Tk_GetColor. The default is white.

    Name:                   steps
    Class:                  Steps
    Command-Line Switch:	-steps
    
      Specifies the total number of steps for the status bar. The default is 10.

    DESCRIPTION

    The feedback command creates a widget to display feedback on the current status of an ongoing operation to the user. Display is given as a percentage and as a thermometer type bar. Options exist for adding a label and controlling its position.

    METHODS

    The feedback command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for scrolledtext widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the scrolledhtml command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the feedback command.
    pathName reset
    Reset the current number of steps completed to 0, and configures the percentage complete label text to 0%
    pathName step ?inc?
    Increase the current number of steps completed by the amount specified by inc. Inc defaults to 1.

    EXAMPLE

     feedback .fb -labeltext "Status" -steps 20
     pack .fb -padx 10 -pady 10 -fill both -expand yes
    
     for {set i 0} {$i < 20} {incr i} {
         .fb step
         after 500
     }
    

    ACKNOWLEDGEMENTS

    Sam Shen
      This code is based largely on his feedback.tcl code from tk inspect. The original feedback code is copyright 1995 Lawrence Berkeley Laboratory.

    AUTHOR

    Kris Raney

    KEYWORDS

    feedback, widget iwidgets-4.1.1/demos/html/scrolledcanvas.n.html0000644003604700454610000002231107347201447020136 0ustar dgp771divscrolledcanvas - Create and manipulate scrolled canvas widgets

    scrolledcanvas - Create and manipulate scrolled canvas widgets

    SYNOPSIS

    scrolledcanvas pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <- Scrolledwidget <- Scrolledcanvas

    STANDARD OPTIONS

    activeBackground
    exportSelection
    highlightThickness
    insertWidth
    selectForeground
    background
    font
    insertBorderWidth
    relief
    borderWidth
    foreground
    insertOffTime
    selectBackground
    cursor
    highlightColor
    insertOnTime
    selectBorderWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    closeEnough
    yScrollIncrement
    confine
    scrollRegion
    xScrollIncrement

    See the "canvas" widget manual entry for details on the above associated options.

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   autoMargin
    Class:                  AutoMargin
    Command-Line Switch:	-automargin
    
      Specifies the autoresize extra margin to reserve. This option is only effective with autoresize turned on. The default is 10.

    Name:                   autoResize
    Class:                  AutoResize
    Command-Line Switch:	-autoresize
    
      Automatically adjusts the scrolled region to be the bounding box covering all the items in the canvas following the execution of any method which creates or destroys items. Thus, as new items are added, the scrollbars adjust accordingly.

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the scrolled canvas widget in any of the forms acceptable to Tk_GetPixels. The default height is 30 pixels.

    Name:                   hscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-hscrollmode
    
      Specifies the the display mode to be used for the horizontal scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   sbWidth
    Class:                  Width
    Command-Line Switch:	-sbwidth
    
      Specifies the width of the scrollbar in any of the forms acceptable to Tk_GetPixels. The default width is 15 pixels..

    Name:                   scrollMargin
    Class:                  ScrollMargin
    Command-Line Switch:	-scrollmargin
    
      Specifies the distance between the canvas and scrollbar in any of the forms acceptable to Tk_GetPixels. The default is 3 pixels.

    Name:                   textBackground
    Class:                  Background
    Command-Line Switch -textbackground
    
      Specifies the background color for the canvas. This allows the background within the canvas to be different from the normal background color.

    Name:                   vscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-vscrollmode
    
      Specifies the the display mode to be used for the vertical scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the scrolled canvas widget in any of the forms acceptable to Tk_GetPixels. The default height is 30 pixels.

    DESCRIPTION

    The scrolledcanvas command creates a scrolled canvas with additional options to manage horizontal and vertical scrollbars. This includes options to control which scrollbars are displayed and the method, i.e. statically or dynamically.

    METHODS

    The scrolledcanvas command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for scrolledcanvas widgets:

    ASSOCIATED METHODS

    addtag
    canvasy
    delete
    gettags
    itemconfigure
    raise
    type
    bbox
    coords
    dtag
    icursor
    lower
    scale
    xview
    bind
    create
    find
    index
    move
    scan
    yview
    canvasx
    dchars
    focus
    insert
    postscript
    select

    See the "canvas" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the scrolledcanvas command.
    pathName childsite
    Returns the child site widget path name.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the scrolledcanvas command.
    pathName justify direction
    Justifies the canvas contents via the scroll bars in one of four directions: left, right, top, or bottom.

    COMPONENTS

    Name:                   canvas
    Class:                  Canvas
    
      The canvas component is the canvas widget. See the "canvas" widget manual entry for details on the canvas component item.

    Name:                   horizsb
    Class:                  Scrollbar
    
      The horizsb component is the horizontal scroll bar. See the "ScrollBar" widget manual entry for details on the horizsb component item.

    Name:                   vertsb
    Class:                  Scrollbar
    
      The vertsb component is the vertical scroll bar. See the "ScrollBar" widget manual entry for details on the vertsb component item.

    EXAMPLE

      scrolledcanvas .sc 
    
      .sc create rectangle 100 100 400 400 -fill red
      .sc create rectangle 300 300 600 600 -fill green
      .sc create rectangle 200 200 500 500 -fill blue
    
      pack .sc -padx 10 -pady 10 -fill both -expand yes
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    scrolledcanvas, canvas, widget iwidgets-4.1.1/demos/html/calendar.n.html0000644003604700454610000002574107375230203016707 0ustar dgp771divcalendar - Create and manipulate a monthly calendar

    calendar - Create and manipulate a monthly calendar

    SYNOPSIS

    calendar pathName ?options?

    INHERITANCE

    itk::Widget <- calendar

    STANDARD OPTIONS

    background
    cursor
    foreground

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    int

    See the "datefield" manual entry for details on this option. Note that this option is needed when the calendar is used in conjunction with the dateentry widget. It is necessary for support of international date formats in versions of Tk less than 8.4.

    WIDGET-SPECIFIC OPTIONS

    Name:                   backwardImage
    Class:                  Image
    Command-Line Switch:	-backwardimage
    
      Specifies a image to be displayed on the backwards calendar button. This image must have been created previously with the image create command. If none is specified, a default is provided.

    Name:                   buttonForeground
    Class:                  Foreground
    Command-Line Switch:	-buttonforeground
    
      Specifies the foreground color of the forward and backward buttons in any of the forms acceptable to Tk_GetColor. The default color is blue.

    Name:                   command
    Class:                  Command
    Command-Line Switch:	-command
    
      Specifies a Tcl script to executed upon selection of a date in the calendar. If the command script contains any % characters, then the script will not be executed directly. Instead, a new script will be generated by replacing each %, and the character following it, with information from the calendar. The replacement depends on the character following the %, as defined in the list below.
    %d
    Replaced with the date selected in the format mm/dd/yyyy.

    Name:                   currentDateFont
    Class:                  Font
    Command-Line Switch:	-currentdatefont
    
      Specifies the font used for the current date text in any of the forms acceptable to Tk_GetFont.

    Name:                   dateFont
    Class:                  Font
    Command-Line Switch:	-datefont
    
      Specifies the font used for the days of the month text in any of the forms acceptable to Tk_GetFont.

    Name:                   dayFont
    Class:                  Font
    Command-Line Switch:	-dayfont
    
      Specifies the font used for the days of the week text in any of the forms acceptable to Tk_GetFont.

    Name:                   days
    Class:                  days
    Command-Line Switch:	-days
    
      Specifies a list of values to be used for the days of the week text to displayed above the days of the month. The default value is {Su Mo Tu We Th Fr Sa}.

    Name:                   forewardImage
    Class:                  Image
    Command-Line Switch:	-forewardimage
    
      Specifies a image to be displayed on the forewards calendar button. This image must have been created previously with the image create command. If none is specified, a default is provided.

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies a desired window height that the calendar widget should request from its geometry manager. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default height is 165 pixels.

    Name:                   outline
    Class:                  Outline
    Command-Line Switch:	-outline
    
      Specifies the outline color used to surround the days of the month text in any of the forms acceptable to Tk_GetColor. The default is the same color as the background.

    Name:                   selectColor
    Class:                  Foreground
    Command-Line Switch:	-selectcolor
    
      Specifies the color of the ring displayed that distinguishes the currently selected date in any of the forms acceptable to Tk_GetColor. The default is red.

    Name:                   selectThickness
    Class:                  SelectThickness
    Command-Line Switch:	-selectthickness
    
      Specifies the thickness of the ring displayed that distinguishes the currently selected date. The default is 3 pixels.

    Name:                   startday
    Class:                  Day
    Command-Line Switch:	-startday
    
      Specifies the starting day for the week: sunday, monday, tuesday, wednesday, thursday, friday, or saturday. The default is sunday.

    Name:                   titleFont
    Class:                  Font
    Command-Line Switch:	-titlefont
    
      Specifies the font used for the title text which consists of the month and year. The font may be given in any of the forms acceptable to Tk_GetFont.

    Name:                   weekdayBackground
    Class:                  Background
    Command-Line Switch:	-weekdaybackground
    
      Specifies the background color for the weekdays which allows it to be visually distinguished from the weekend. The color may be given in any of the forms acceptable to Tk_GetColor. The default is the same as the background.

    Name:                   weekendBackground
    Class:                  Background
    Command-Line Switch:	-weekendbackground
    
      Specifies the background color for the weekends which allows it to be visually distinguished from the weekdays. The color may be given in any of the forms acceptable to Tk_GetColor. The default is the same as the background.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies a desired window width that the calendar widget should request from its geometry manager. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default width is 200 pixels.


    DESCRIPTION

    The calendar command creates a calendar widget for the selection of a date, displaying a single month at a time. Buttons exist on the top to change the month in effect turning the pages of a calendar. As a page is turned, the dates for the month are modified. Selection of a date visually marks that date. The selected value can be monitored via the -command option or just retrieved using the get command.

    METHODS

    The calendar command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for calendar widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the calendar command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the calendar command.
    pathName get ?format?
    Returns the currently selected date in a format of string or as an integer clock value using the -string and -clicks format options respectively. The default is by string. Reference the clock command for more information on obtaining dates and their formats.
    pathName select date
    Changes the currently selected date to the value specified which must be in the form of a date string, an integer clock value or as the keyword "now". Reference the clock command for more information on obtaining dates and their formats. Note that selecting a date does not change the month being shown to that of the date given. This chore is left to the show\R command.
    pathName show date
    Changes the currently displayed date to be that of the date argument which must be in the form of a date string, an integer clock value or as the keyword "now". Reference the clock command for more information on obtaining dates and their formats.

    COMPONENTS

    Name:                   forward
    Class:                  Button
    
      The forward component provides the button on the upper right of the calendar that changes the month to be the next. See the "button" widget manual entry for details on the forward component item.

    Name:                   page
    Class:                  Canvas
    
      The page component provides the canvas on which the title, days of the week, and days of the month appear. See the "canvas" widget manual entry for details on the page component item.

    Name:                   backward
    Class:                  Button
    
      The backward component provides the button on the upper right of the calendar that changes the month to be the next. See the "button" widget manual entry for details on the backward component item.

    EXAMPLE

     proc selectCmd {date} {
       puts $date
     }
    
     calendar .c -command {selectCmd %d} -weekendbackground mistyrose \\
    	-weekdaybackground ghostwhite -outline black \\
            -startday wednesday -days {We Th Fr Sa Su Mo Tu}
     pack .c 
    

    AUTHORS

    Mark L. Ulferts

    Michael J. McLennan

    KEYWORDS

    calendar, widget iwidgets-4.1.1/demos/html/scrolledframe.n.html0000644003604700454610000001715407347201672017766 0ustar dgp771divscrolledframe - Create and manipulate scrolled frame widgets

    scrolledframe - Create and manipulate scrolled frame widgets

    SYNOPSIS

    scrolledframe pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <-Scrolledwidget <- Scrolledframe

    STANDARD OPTIONS

    activeBackground
    font
    relief
    background
    foreground
    selectBackground
    borderWidth
    highlightColor
    selectBorderWidth
    cursor
    highlightThickness
    selectForeground

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" manual entry for details on the associated options.

    INHERITED OPTIONS

    LabelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable
    labelMargin

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the scrolled frame widget in any of the forms acceptable to Tk_GetPixels. The default height is 100 pixels.

    Name:                   hscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-hscrollmode
    
      Specifies the the display mode to be used for the horizontal scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   sbWidth
    Class:                  Width
    Command-Line Switch:	-sbwidth
    
      Specifies the width of the scrollbar in any of the forms acceptable to Tk_GetPixels. The default width is 15 pixels.

    Name:                   scrollMargin
    Class:                  Margin
    Command-Line Switch:	-scrollmargin
    
      Specifies the distance between the frame and scrollbar in any of the forms acceptable to Tk_GetPixels. The default is 3 pixels.

    Name:                   vscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-vscrollmode
    
      Specifies the the display mode to be used for the vertical scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the scrolled frame widget in any of the forms acceptable to Tk_GetPixels. The default height is 100 pixels.

    DESCRIPTION

    The scrolledframe combines the functionallity of scrolling with that of a typical frame widget to implement a clipable viewing area whose visible region may be modified with the scroll bars. This enables the contruction of visually larger areas than which could normally be displayed, containing a heterogenous mix of other widgets. Options exist which allow full control over which scrollbars are displayed and the method, i.e. statically or dynamically. The frame itself may be accessed by the childsite method and then filled with other widget combinations.

    METHODS

    The scrolledframe command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for scrolledframe widgets:

    ASSOCIATED METHODS

    xview
    yview

    See the "canvas" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the scrolledframe command.
    pathName childsite
    Return the path name of the child site.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the scrolledframe command.
    pathName justify direction
    Justifies the frame contents via the scroll bars in one of four directions: left, right, top, or bottom.

    COMPONENTS

    Name:                   horizsb
    Class:                  Scrollbar
    
      The horizsb component is the horizontal scroll bar. See the "ScrollBar" widget manual entry for details on the horizsb component item.

    Name:                   vertsb
    Class:                  Scrollbar
    
      The vertsb component is the vertical scroll bar. See the "ScrollBar" widget manual entry for details on the vertsb component item.

    EXAMPLE

    scrolledframe .sf -width 150 -height 180 -labelon yes -labeltext scrolledframe
    
    set cs [.sf childsite]
    pack [button $cs.b1 -text Hello] -pady 10
    pack [button $cs.b2 -text World] -pady 10
    pack [button $cs.b3 -text "This is a test"] -pady 10
    pack [button $cs.b4 -text "This is a really big button"] -pady 10
    pack [button $cs.b5 -text "This is another really big button"] -pady 10
    pack [button $cs.b6 -text "This is the last really big button"] -pady 10
    
    pack .sf -expand yes -fill both -padx 10 -pady 10
    

    AUTHORS

    Mark L. Ulferts

    Sue Yockey

    KEYWORDS

    scrolledframe, frame, widget iwidgets-4.1.1/demos/html/canvasprintdialog.n.html0000644003604700454610000001342207347201111020632 0ustar dgp771divcanvasprintdialog - Create and manipulate a canvas print dialog widget

    canvasprintdialog - Create and manipulate a canvas print dialog widget

    SYNOPSIS

    canvasprintdialog pathName ?options?

    INHERITANCE

    itk::Toplevel <- Dialogshell <- Dialog <- Canvasprintdialog

    STANDARD OPTIONS

    activeBackground
    foreground
    insertBackground
    insertWidth
    selectBackground
    background
    highlightBackground
    insertBorderWidth
    relief
    selectBorderWidth
    borderWidth
    highlightColor
    insertOffTime
    repeatDelay
    selectForeground
    cursor
    highlightThickness
    insertOnTime
    repeatInterval

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    filename
    pagesize
    vpagecnt
    hpagecnt
    posterize
    orient
    printcmd
    output
    printregion

    See the "canvasprintbox" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    buttonBoxPadX
    padY
    buttonBoxPadY
    separator
    buttonBoxPos
    thickness
    padX

    See the "dialogshell" widget manual entry for details on the above inherited options.

    master
    modality

    See the "shell" widget manual entry for details on the above inherited options.

    title

    See the "Toplevel" widget manual entry for details on the above inherited options.

    WIDGET-SPECIFIC OPTIONS


    DESCRIPTION

    The canvasprintdialog command creates a print dialog for printing the contents of a canvas widget to a printer or a file. It is possible to specify page orientation, the number of pages to print the image on and if the output should be stretched to fit the page.

    METHODS

    The canvasprintdialog command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for canvasprintdialog widgets:

    ASSOCIATED METHODS

    getoutput
    setcanvas
    refresh
    print

    See the "canvasprintbox" class manual entry for details on the associated methods.

    INHERITED METHODS

    add
    insert
    buttonconfigure
    invoke
    default
    show
    hide

    See the "buttonbox" widget manual entry for details on the above inherited methods.

    activate
    deactivate

    See the "dialogshell" widget manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the canvasprintdialog command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the canvasprintdialog command.

    COMPONENTS

    Name:                   cpb
    Class:                  Canvasprintbox
    
      The cpb component is the canvas print box for the canvas print dialog. See the "canvasprintbox" widget manual entry for details on the cpb component item.

    EXAMPLE

     canvasprintdialog .cpb 
     .cpb activate
    

    AUTHOR

    Tako Schotanus

    KEYWORDS

    canvasprintdialog, canvasprintbox, dialog, widget iwidgets-4.1.1/demos/html/messagebox.n.html0000644003604700454610000002500607347201363017271 0ustar dgp771divmessagebox - Create and manipulate a messagebox text widget

    messagebox - Create and manipulate a messagebox text widget

    SYNOPSIS

    messagebox pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <- Scrolledwidget <- Messagebox

    STANDARD OPTIONS

    activeBackground
    cursor
    highlightColor
    relief
    activeForeground
    exportSelection
    highlightThickness
    setGrid
    background
    font
    padX
    borderWidth
    foreground
    padY

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable
    labelMargin

    See the "labeledwidget" class manual entry for details on the above associated options.

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget manual entry for details on the above associated options.

    height
    textBackground
    hscrollMode
    visibleItems
    sbWidth
    vscrollMode
    scrollMargin
    width

    See the "scrolledtext" widget manual entry for details on the above associated options.

    spacing1
    spacing2
    spacing3

    See the "text" widget manual entry for details on the above associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   fileName
    Class:                  FileName
    Command-Line Switch:	-filename
    
      Specifies the filename to be displayed in the file selection dialog when it pops up during a save of the messagebox contents operation.

    Name:                   maxLines
    Class:                  MaxLines
    Command-Line Switch:	-maxlines
    
      Specifies the maximum number of lines allowed in the text area of the messagebox. When this limit is reached, the oldest line will be deleted such that the total number of lines remains maxlines.

    Name:                   saveDir
    Class:                  SaveDir
    Command-Line Switch:	-savedir
    
      Specifies the default directory to display when the file selection dialog pops up during a save of the messagebox contents operation. If this parameter is not specified, then the files in the current working directory are displayed.


    DESCRIPTION

    The messagebox command creates a scrolled information messages area widget. Message types can be user defined and configured. Their options include foreground, background, font, bell, and their display mode of on or off. This allows message types to defined as needed, removed when no longer so, and modified when necessary. An export method is provided for file I/O.

    The number of lines displayed may be limited with the default being 1000. When this limit is reached, the oldest line is removed. A popup menu which appears when the right mouse button has been pressed in the message area has been predefined. The contents of the popup menu by default support clearing the area and saving its contents to a file. Additional operations may be defined or existing operations removed by using the component command to access the popup menu.

    MESSAGE TYPES

    The display characteristics of messages issued to the messagebox vary with the message type. Types are defined by the user and they may be added, removed, and configured. The options of the message type control the display include the following:

    -background color
    Color specifies the background color to use for characters associated with the message type. It may have any of the forms accepted by Tk_GetColor.
    -bell boolean
    Specifies whether or not to ring the bell whenenver a message of this type is issued. Boolean may have any of the forms accepted by Tk_GetBoolean. The default is 0.
    -font\ fontName
    FontName is the name of a font to use for drawing characters. It may have any of the forms accepted by Tk_GetFontStruct.
    -foreground color
    Color specifies the foreground color to use for characters associated with the message type. It may have any of the forms accepted by Tk_GetColor.
    -show boolean
    Specifies whether of not to display this message type when issued. Boolean may have any of the forms accepted by Tk_GetBoolean. The default is 1.

    METHODS

    The messagebox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for messagebox widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the messagebox command.
    pathName clear
    Clear the messagebox of all messages.
    pathName export filename
    Write text to a file. If filename exists then contents are replaced with text widget contents.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the messagebox command.
    pathName type option msgtype ?arg arg ...?
    This command is used to manipulate message types. The behavior of the command depends on the option argument that follows the type keyword. The following forms of the command are supported:
      pathName type add msgtype ?option value ...?
      Adds a new message type given by msgtype with the display properties defined by the option value pairs. See MESSAGE TYPES for information on the options that are supported.
      pathName type cget msgtype option
      Returns the value of a configuration option for a message type. Msgtype identifies the message type, and option specifies a particular configuration option, which must be one of the ones listed in the section MESSAGE TYPES.
      pathName type configure msgtype ?option value ...?
      Query or modify the configuration options for a message type. If no option is specified, returns a list describing all of the available options for the message type msgtype. If option is specified with no value, then the command returns a list describing the one named option. If one or more option-value pairs are specified, then the command modifies the given option(s) to have the given value(s); in this case the command returns an empty string. See MESSAGE TYPES for information on the options that are supported. pathName type remove msgtype Removes an existing message type given by msgtype.
    pathName issue string ?level? ?tags?
    Print a string to the text area at the given level and with any additional tags specified.

    COMPONENTS

    Name:                   itemMenu
    Class:                  Menu
    
      This is the popup menu that gets displayed when you right-click in the text area of the messagebox. Its contents may be modified via the component command.

    Name:                   text
    Class:                  Scrolledtext
    
      The text component is the scrolledtext widget. See the "scrolledtext" widget manual entry for details on the text component item.

    EXAMPLE

     messagebox .mb -hscrollmode dynamic -labeltext "Messages" -labelpos n \\
    	-height 120 -width 550 -savedir "/tmp" -textbackground #d9d9d9
    
     pack .mb -padx 5 -pady 5 -fill both -expand yes
    
     .mb type add ERROR -background red -foreground white -bell 1
     .mb type add WARNING -background yellow -foreground black
     .mb type add INFO -background white -foreground black
    
     .mb issue "This is an error message in red with a beep" ERROR
     .mb issue "This warning message in yellow" WARNING
     .mb issue "This is an informational message" INFO
    

    AUTHORS

    Alfredo Jahn V

    Mark L. Ulferts

    KEYWORDS

    messagebox, scrolledtext, text, widget iwidgets-4.1.1/demos/html/spintime.n.html0000644003604700454610000002331107347201764016766 0ustar dgp771divspintime - Create and manipulate time spinner widgets

    spintime - Create and manipulate time spinner widgets

    SYNOPSIS

    spintime pathName ?options?

    INHERITANCE

    itk::Widget <- Spintime

    STANDARD OPTIONS

    background
    cursor
    foreground
    relief

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    textBackground
    textFont

    See the "entryfield" manual entry for details on the above associated options.

    labelFont
    labelMargin

    See the "labeledwidget" manual entry for details on the above associated options.

    arrowOrient
    repeatDelay
    repeatInterval

    See the "spinner" manual entry for details on the above associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   labelPos
    Class:                  Position
    Command-Line Switch:	-labelpos
    
      Specifies the position of the label along the sides of the various spinners: n, e, s, or w. The default is w.

    Name:                   hourLabel
    Class:                  Text
    Command-Line Switch:	-hourlabel
    
      Specifies the text of the label for the hour spinner. The default is "Hour".

    Name:                   hourOn
    Class:                  hourOn
    Command-Line Switch:	-houron
    
      Specifies whether or not to display the hour spinner in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   hourWidth
    Class:                  Width
    Command-Line Switch:	-hourwidth
    
      Specifies the width of the hour spinner in any of the forms acceptable to Tcl_GetPixels. The default is 3 pixels.

    Name:                   militaryOn
    Class:                  militaryOn
    Command-Line Switch:	-militaryon
    
      Specifies use of a 24 hour clock for hour display in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   minuteLabel
    Class:                  Text
    Command-Line Switch:	-minutelabel
    
      Specifies the text of the label for the minute spinner. The default is "Minute".

    Name:                   minuteOn
    Class:                  minuteOn
    Command-Line Switch:	-minuteon
    
      Specifies whether or not to display the minute spinner in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   minuteWidth
    Class:                  Width
    Command-Line Switch:	-minutewidth
    
      Specifies the width of the minute spinner in any of the forms acceptable to Tcl_GetPixels. The default is 3 pixels.

    Name:                   orient
    Class:                  Orient
    Command-Line Switch:	-orient
    
      Specifies the orientation of the hour, minute, and second spinners: vertical or horizontal. The default is horizontal.

    Name:                   secondLabel
    Class:                  Text
    Command-Line Switch:	-secondlabel
    
      Specifies the text of the label for the second spinner. The default is "Second"

    Name:                   secondOn
    Class:                  secondOn
    Command-Line Switch:	-secondon
    
      Specifies whether or not to display the second spinner in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   secondWidth
    Class:                  Width
    Command-Line Switch:	-secondwidth
    
      Specifies the width of the second spinner in any of the forms acceptable to Tcl_GetPixels. The default is 3 pixels.

    Name:                   timeMargin
    Class:                  Margin
    Command-Line Switch:	-timemargin
    
      Specifies the margin space between the hour, minute, and second spinners is any of the forms accpetable to Tcl_GetPixels. The default is 1 pixel.



    spintime
    set
    use
    entry.
    an
    second


    creates
    command
    pathName.
    be
    various
    widget.
    following
    pathName
    ...
    ?
    the
    exact
    command.
    are
    widgets:



    current
    configuration
    option.
    any
    accepted
    command.
    pathName
    option

    the
    the
    option
    a
    of
    for
    for
    format
    If
    with
    the
    list
    named
    will
    the
    the
    no
    If
    option-value
    then
    the
    to
    value(s);
    the
    empty
    have
    values
    spintime


    current
    spintime
    format
    as
    value
    and
    respectively.
    by
    clock
    information
    and

    time
    the
    to
    the
    time
    either
    an
    or
    Reference
    for
    obtaining
    format.

    Spinint

    DESCRIPTION


    command
    of
    in
    The
    hour,
    spinner
    The
    a
    whose
    This
    used
    operations
    It
    general
    option

    args
    behavior
    The
    possible

    WIDGET-SPECIFIC
    pathName

    value
    option
    Option
    of
    by

    configure
    value
    Query
    configuration
    widget.
    is
    list
    the
    pathName
    information
    of
    option
    no
    command
    describing
    option
    be
    corresponding
    value
    option
    one
    pairs
    the
    given
    have
    in
    command
    string.
    any
    accepted
    command.
    pathName

    contents
    widget
    of
    an
    using
    -clicks
    The
    string.
    command
    on
    its


    currently
    be
    time
    may
    as
    integer
    the
    the
    more
    times

    Name:


    creates
    spinners
    time
    set
    minute,
    widget.
    spintime
    new
    name
    command
    to
    on
    has
    form:
    ?arg
    Option
    determine
    of
    following
    for
    METHODS
    cget
    Returns
    of
    given
    may
    the
    the


    ?option?
    ...
    ?
    or
    options
    If
    specified,
    describing
    available
    (see
    on
    this
    is
    value,
    returns
    the
    (this
    identical
    sublist
    returned
    is
    or
    are
    command
    widget
    the
    this
    returns
    Option
    of
    by

    get
    Returns
    of
    in
    string
    integer
    the
    format
    default
    Reference
    for
    obtaining
    formats.
    pathName

    displayed
    that
    argument.
    be
    a
    clock
    keyword
    clock
    information
    and

    COMPONENTS


    hour
    The
    a
    for
    value
    includes
    and

    METHODS


    command
    Tcl
    is
    may
    invoke
    the
    the

    arg
    and
    the
    the
    commands
    spintime

    option
    the
    the
    by
    have
    values
    spintime

    ?value

    modify
    of
    no
    returns
    all
    options
    Tk_ConfigureInfo
    the
    list).
    specified
    then
    a
    one
    list
    to
    of
    if
    specified).
    more
    specified,
    modifies
    option(s)
    given
    case
    an
    may
    the
    the

    ?format?
    the
    the
    a
    or
    clock
    -string
    options
    is
    the
    more
    time

    show
    Changes
    time
    of
    The
    specified
    string,
    value
    "now".
    command
    on
    its


    Class:

      The hour component is the hour spinner of the time spinner. See the SpinInt widget manual entry for details on the hour component item.

    Name:                   minute
    Class:                  Spinint
    
      The minute component is the minute spinner of the time spinner. See the SpinInt widget manual entry for details on the minute component item.

    Name:                   second
    Class:                  Spinint
    
      The second component is the second spinner of the time spinner. See the SpinInt widget manual entry for details on the second component item.

    EXAMPLE

    spintime .st
    pack .st -padx 10 -pady 10
    

    AUTHORS

    Sue Yockey

    Mark L. Ulferts

    KEYWORDS

    spintime, spinint, spinner, entryfield, entry, widget iwidgets-4.1.1/demos/html/finddialog.n.html0000644003604700454610000002403507347201324017232 0ustar dgp771divfinddialog - Create and manipulate a find dialog widget

    finddialog - Create and manipulate a find dialog widget

    SYNOPSIS

    finddialog pathName ?options?

    INHERITANCE

    itk::Toplevel <- Shell <- Dialogshell <- Finddialog

    STANDARD OPTIONS

    activeBackground
    cursor
    highlightColor
    insertOffTime
    selectBorderWidth
    activeForeground
    disabledForeground
    highlightThickness
    insertOnTime
    selectColor
    background
    font
    insertBackground
    insertWidth
    selectForeground
    borderWidth
    foreground
    insertBorderWidth
    selectBackground

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    selectColor

    See the "checkbutton" widget manual entry for details on the above associated options.

    selectColor

    See the "entryfield" widget manual entry for details on the above associated options.

    labelFont

    See the "labeledwidget" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    buttonBoxPadX
    padY
    buttonBoxPadY
    separator
    buttonBoxPos
    thickness
    padX

    See the "dialogshell" widget manual entry for details on the above inherited options.

    height
    master
    modality
    width

    See the "shell" widget manual entry for details on the above inherited options.

    title

    See the "Toplevel" widget manual entry for details on the above inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   clearCommand
    Class:                  Command
    Command-Line Switch:	-clearcommand
    
      Specifies a command to be invoked following a clear operation. The option is meant to be used as means of notification that the clear has taken place and allow other actions to take place such as disabling a find again menu.

    Name:                   matchCommand
    Class:                  Command
    Command-Line Switch:	-matchcommand
    
      Specifies a command to be invoked following a find operation. The command is called with a match point as an argument which identifies where exactly where in the text or scrolledtext widget that the match is located. Should a match not be found the match point is {}. The option is meant to be used as a means of notification that the find operation has completed and allow other actions to take place such as disabling a find again menu option if the match point was {}.

    Name:                   patternBackground
    Class:                  Background
    Command-Line Switch:	-patternbackground
    
      Specifies the background color of the text matching the search pattern. It may have any of the forms accepted by Tk_GetColor. The default is gray44.

    Name:                   patternForeground
    Class:                  Background
    Command-Line Switch:	-patternforeground
    
      Specifies the foreground color of the text matching the search pattern. It may have any of the forms accepted by Tk_GetColor. The default is white.

    Name:                   searchBackground
    Class:                  Background
    Command-Line Switch:	-searchbackground
    
      Specifies the background color of the line containing the matching the search pattern. It may have any of the forms accepted by Tk_GetColor. The default is gray77.

    Name:                   searchForeground
    Class:                  Background
    Command-Line Switch:	-searchforeground
    
      Specifies the foreground color of the line containing the matching the search pattern. It may have any of the forms accepted by Tk_GetColor. The default is black.

    Name:                   textWidget
    Class:                  TextWidget
    Command-Line Switch:	-textwidget
    
      Specifies the text or scrolledtext widget to be searched.

    DESCRIPTION

    The finddialog command creates a find dialog that works in conjunction with a text or scrolledtext widget to provide a means of performing search operations. The user is prompted for a text pattern to be found in the text or scrolledtext widget. The search can be for all occurances, by regular expression, considerate of the case, or backwards.

    METHODS

    The finddialog command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for finddialog widgets:

    INHERITED METHODS

    add
    invoke
    buttonconfigure
    show
    default
    hide

    See the "buttonbox" widget manual entry for details on the above inherited methods.

    activate
    center
    deactivate

    See the "shell" widget manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the finddialog command.
    pathName clear
    Clears the pattern in the entry field and the pattern matchin indicators in the text or scrolledtext widget.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the finddialog command.
    pathName find
    Search for a specific text string in the text widget given by the -textwidget option. This method is the standard callback for the Find button. It is made available such that it can be bound to a find again action.

    COMPONENTS

    Name:                   all
    Class:                  Checkbutton
    
      The all component specifies that all the matches of the pattern should be found when performing the search. See the "checkbutton" widget manual entry for details on the all component item.

    Name:                   backwards
    Class:                  Checkbutton
    
      The backwards component specifies that the search should continue in a backwards direction towards the beginning of the text or scrolledtext widget. See the "checkbutton" widget manual entry for details on the backwards component item.

    Name:                   case
    Class:                  Checkbutton
    
      The case component specifies that the case of the pattern should be taken into consideration when performing the search. See the "checkbutton" widget manual entry for details on the case component item.

    Name:                   pattern
    Class:                  Entryfield
    
      The pattern component provides the pattern entry field. See the "entryfield" widget manual entry for details on the pattern component item.

    Name:                   regexp
    Class:                  Checkbutton
    
      The regexp component specifies that the pattern is a regular expression. See the "checkbutton" widget manual entry for details on the regexp component item.

    EXAMPLE

     scrolledtext .st
     pack .st
     .st insert end "Now is the time for all good men\\n" 
     .st insert end "to come to the aid of their country"
    
     finddialog .fd -textwidget .st
     .fd center .st
     .fd activate
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    finddialog, dialogshell, shell, widget iwidgets-4.1.1/demos/html/scrolledtext.n.html0000644003604700454610000002444507537260565017670 0ustar dgp771divscrolledtext - Create and manipulate a scrolled text widget

    scrolledtext - Create and manipulate a scrolled text widget

    SYNOPSIS

    scrolledtext pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <- Scrolledwidget <- Scrolledtext

    STANDARD OPTIONS

    activeBackground
    exportSelection
    insertBackground
    insertWidth
    selectBackground
    background
    foreground
    insertBorderWidth
    padX
    selectBorderWidth
    borderWidth
    highlightColor
    insertOffTime
    padY
    selectForeground
    cursor
    highlightThickness
    insertOnTime
    relief
    setGrid

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget manual entry for details on the above associated options.

    spacing1
    tabs
    spacing2
    wrap
    spacing3
    state

    See the "text" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the scrolled text as an entire unit. The value may be specified in any of the forms acceptable to Tk_GetPixels. Any additional space needed to display the other components such as labels, margins, and scrollbars force the text to be compressed. A value of zero along with the same value for the width causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default height is zero.

    Name:                   hscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-hscrollmode
    
      Specifies the the display mode to be used for the horizontal scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   sbWidth
    Class:                  Width
    Command-Line Switch:	-sbwidth
    
      Specifies the width of the scrollbar in any of the forms acceptable to Tk_GetPixels.

    Name:                   scrollMargin
    Class:                  Margin
    Command-Line Switch:	-scrollmargin
    
      Specifies the distance between the text area and scrollbar in any of the forms acceptable to Tk_GetPixels. The default is 3 pixels.

    Name:                   textBackground
    Class:                  Background
    Command-Line Switch:	-textbackground
    
      Specifies the background color for the text area in any of the forms acceptable to Tk_GetColor.

    Name:                   textFont
    Class:                  Font
    Command-Line Switch:	-textfont
    
      Specifies the font to be used in the scrolled text area.

    Name:                   visibleitems
    Class:                  VisibleItems
    Command-Line Switch:	-visibleitems
    
      Specifies the widthxheight in characters and lines for the text. This option is only administered if the width and height options are both set to zero, otherwise they take precedence. The default value is 80x24. With the visibleitems option engaged, geometry constraints are maintained only on the text. The size of the other components such as labels, margins, and scroll bars, are additive and independent, effecting the overall size of the scrolled text. In contrast, should the width and height options have non zero values, they are applied to the scrolled text as a whole. The text is compressed or expanded to maintain the geometry constraints.

    Name:                   vscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-vscrollmode
    
      Specifies the the display mode to be used for the vertical scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the scrolled text as an entire unit. The value may be specified in any of the forms acceptable to Tk_GetPixels. Any additional space needed to display the other components such as labels, margins, and scrollbars force the text to be compressed. A value of zero along with the same value for the height causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default width is zero.


    DESCRIPTION

    The scrolledtext command creates a scrolled text widget with additional options to manage the scrollbars. This includes options to control the method in which the scrollbars are displayed, i.e. statically or dynamically. Options also exist for adding a label to the scrolled text area and controlling its position. Import/export of methods are provided for file I/O.

    METHODS

    The scrolledtext command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for scrolledtext widgets:

    ASSOCIATED METHODS

    bbox
    dlineinfo
    mark
    tag
    compare
    get
    scan
    window
    debug
    index
    search
    xview
    delete
    insert
    see
    yview

    See the "text" manual entry for details on the standard methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the scrolledtext command.
    pathName childsite
    Returns the child site widget path name.
    pathName clear
    Clear the text area of all characters.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the scrolledtext command.
    pathName import filename ?index?
    Load the text from a file into the text area at the index. The filename must exist.
    pathName export filename
    Write text to a file. If filename exists then contents are replaced with text widget contents.

    COMPONENTS

    Name:                   text
    Class:                  Text
    
      The text component is the text widget. See the "text" widget manual entry for details on the text component item.

    Name:                   horizsb
    Class:                  Scrollbar
    
      The horizsb component is the horizontal scroll bar. See the "scrollbar" widget manual entry for details on the horizsb component item.

    Name:                   vertsb
    Class:                  Scrollbar
    
      The vertsb component is the vertical scroll bar. See the "scrollbar" widget manual entry for details on the vertsb component item.

    EXAMPLE

     option add *textBackground white
    
     scrolledtext .st -scrollmode dynamic -labeltext "Password File"
    
     pack .st -padx 10 -pady 10 -fill both -expand yes
    
     .st import /etc/passwd
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    scrolledtext, text, widget iwidgets-4.1.1/demos/html/pushbutton.n.html0000644003604700454610000001214407347201431017342 0ustar dgp771divpushbutton - Create and manipulate a push button widget

    pushbutton - Create and manipulate a push button widget

    SYNOPSIS

    pushbutton pathName ?options?

    INHERITANCE

    itk::Widget <- pushbutton

    STANDARD OPTIONS

    activeBackground
    borderWidth
    font
    highlightThickness
    state
    activeForeground
    command
    foreground
    image
    text
    background
    cursor
    highlightBackground
    padX
    underline
    bitmap
    disabledForeground
    highlightColor
    padY
    wrapLength

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   defaultRing
    Class:                  DefaultRing
    Command-Line Switch:	-defaultring
    
      Boolean describing whether the button displays its default ring given in any of the forms acceptable to Tcl_GetBoolean. The default is false.

    Name:                   defaultRingPad
    Class:                  Pad
    Command-Line Switch:	-defaultringpad
    
      Specifies the amount of space to be allocated to the indentation of the default ring ring given in any of the forms acceptable to Tcl_GetPixels. The option has no effect if the defaultring option is set to false. The default is 2 pixels.

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the button inclusive of any default ring given in any of the forms acceptable to Tk_GetPixels. A value of zero lets the push button determine the height based on the requested height plus highlightring and defaultringpad.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the button inclusive of any default ring given in any of the forms acceptable to Tk_GetPixels. A value of zero lets the push button determine the width based on the requested width plus highlightring and defaultringpad.


    DESCRIPTION

    The pushbutton command creates a push button with an optional default ring used for default designation and traversal.

    METHODS

    The pushbutton command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for pushbutton widgets:

    ASSOCIATED METHODS

    flash
    invoke

    See the "button" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the pushbutton command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the pushbutton command.

    COMPONENTS

    Name:                   pushbutton
    Class:                  Button
    
      The pushbutton component is the button surrounded by the optional default ring. See the "button" widget manual entry for details on the pushbutton component item.

    EXAMPLE

    pushbutton .pb -text "Hello" -command {puts "Hello World"} -defaultring 1
    pack .pb -padx 10 -pady 10
    

    AUTHOR

    Bret A. Schuhmacher

    Mark L. Ulferts

    KEYWORDS

    pushbutton, widget iwidgets-4.1.1/demos/html/optionmenu.n.html0000644003604700454610000002240207366300520017322 0ustar dgp771divoptionmenu - Create and manipulate a option menu widget

    optionmenu - Create and manipulate a option menu widget

    SYNOPSIS

    optionmenu pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <- optionmenu

    STANDARD OPTIONS

    activeBackground
    borderWidth
    foreground
    activeBorderWidth
    cursor
    highlightColor
    activeForeground
    disabledForeground
    highlightThickness
    background
    font
    relief

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "LabeledWidget" manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   clickTime
    Class:                  ClickTime
    Command-Line Switch:	-clicktime
    
      Interval time, in msec, used to determine that a single mouse click has occurred. Used to post menu on a "quick" mouse click. Note: changing this value may cause the sigle-click functionality to not work properly. The default is 150 msec.

    Name:                   command
    Class:                  Command
    Command-Line Switch:	-command
    
      Specifies a Tcl command procedure to be evaluated following a change in the current option menu selection.

    Name:                   cyclicOn
    Class:                  CyclicOn
    Command-Line Switch:	-cyclicon
    
      Turns on/off the 3rd mouse button capability. The value may be specified in any of the forms acceptable to Tcl_GetBoolean. This feature allows the right mouse button to cycle through the popup menu list without poping it up. The right mouse button cycles through the menu in reverse order. The default is true.

    Name:                   popupCursor
    Class:                  Cursor
    Command-Line Switch:	-popupcursor
    
      Specifies the mouse cursor to be used for the popup menu. The value may have any of the forms acceptable to Tk_GetCursor.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Specified one of two states for the optionmenu: normal, or disabled. If the optionmenu is disabled, then option menu selection is ignored.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies a fixed size for the menu button label in any of the forms acceptable to \Tk_GetPixels. If the text is too small to fit in the label, the text is clipped. Note: Normally, when a new list is created, or new items are added to an existing list, the menu button label is resized automatically. Setting this option overrides that functionality.


    DESCRIPTION

    The optionmenu command creates an option menu widget with options to manage it. An option menu displays a frame containing a label and a button. A pop-up menu will allow for the value of the button to change.

    METHODS

    The optionmenu command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command.

    Many of the widget commands for an optionmenu take as one argument an indicator of which entry of the option menu to operate on. These indicators are called indexes and may be specified in any of the following forms:

    number
    Specifies the entry numerically, where 0 corresponds to the top-most entry of the option menu, 1 to the entry below it, and so on.
    end
    Indicates the bottommost entry in the menu. If there are no entries in the menu then -1 is returned.
    select
    Returns the numerical index of the currently selected option menu entry. If no entries exist in the menu, then -1 is returned.
    pattern
    If the index doesn't satisfy one of the above forms then this form is used. Pattern is pattern-matched against the label of each entry in the option menu, in order from the top down, until a matching entry is found. The rules of Tcl_StringMatch are used.

    The following widget commands are possible for optionmenu widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the optionmenu command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the optionmenu command.
    pathName delete first ?last?
    Delete all of the option menu entries between first and last inclusive. If last is omitted then it defaults to first.
    pathName disable index
    Disable the option menu entry specified by index. Disabling a menu item will prevent the user from being able to select this item from the menu. This only effects the state of the item in the menu, in other words, should the item be the currently selected item, the programmer is responsible for determining this condition and taking appropriate action.
    pathName enable index
    Enable the option menu entry specified by index. Enabling a menu item allows the user to select this item from the menu.
    pathName get ?first? ?last?
    If no arguments are specified, this operation returns the currently selected option menu item. Otherwise, it returns the name of the option at index first, or a range of options between first and last.
    pathName index index
    Returns the numerical index corresponding to index.
    pathName insert index string ?string?
    Insert an item, or list of items, into the menu at location index.
    pathName select index
    Select an item from the option menu to be displayed as the currently selected item.
    pathName sort mode
    Sort the current menu in either ascending, or descending order. The values increasing, or decreasing are also accepted.

    COMPONENTS

    Name:                   menuBtn
    Class:                  Menubutton
    
      The menuBtn component is the option menu button which displays the current choice from the popup menu. See the "menubutton" widget manual entry for details on the menuBtn component item.

    Name:                   popupMenu
    Class:                  Menu
    
      The popupMenu component is menu displayed upon selection of the menu button. The menu contains the choices for the option menu. See the "menu" widget manual entry for details on the popupMenu component item.

    EXAMPLE

     optionmenu .om -labelmargin 5 \\
         -labelon true -labelpos w -labeltext "Operating System :"
    
     .om insert end Unix VMS Linux OS/2 {Windows NT} DOS
     .om sort ascending
     .om select Linux
    
     pack .om  -padx 10 -pady 10
    

    ACKNOWLEDGEMENTS:

    Michael J. McLennan
      Borrowed some ideas (next & previous) from OptionButton class.

    Steven B. Jaggers

      Provided an initial prototype in [incr Tcl].

    Bret Schuhmacher

      Helped with popup menu functionality.

    AUTHOR

    Alfredo Jahn

    KEYWORDS

    optionmenu, widget iwidgets-4.1.1/demos/html/panedwindow.n.html0000644003604700454610000002565407347201410017455 0ustar dgp771divpanedwindow - Create and manipulate a paned window widget

    panedwindow - Create and manipulate a paned window widget

    SYNOPSIS

    panedwindow pathName ?options?

    INHERITANCE

    itk::Widget <- panedwindow

    STANDARD OPTIONS

    background
    cursor

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the overall height of the paned window in any of the forms acceptable to Tk_GetPixels. The default is 10 pixels.

    Name:                   orient
    Class:                  Orient
    Command-Line Switch:	-orient
    
      Specifies the orientation of the separators: vertical or horizontal. The default is horizontal.

    Name:                   sashBorderWidth
    Class:                  BorderWidth
    Command-Line Switch:	-sashborderwidth
    
      Specifies a value indicating the width of the 3-D border to draw around the outside of the sash in any of the forms acceptable to Tk_GetPixels. The default is 2 pixels.

    Name:                   sashCursor
    Class:                  Cursor
    Command-Line Switch:	-sashcursor
    
      Specifies the type of cursor to be displayed in the sash. The default is crosshair.

    Name:                   sashHeight
    Class:                  Height
    Command-Line Switch:	-sashheight
    
      Specifies the height of the sash in any of the forms acceptable to Tk_GetPixels. The default is 10 pixels.

    Name:                   sashIndent
    Class:                  SashIndent
    Command-Line Switch 	sashindent
    
      Specifies the placement of the sash along the panes in any of the forms acceptable to Tk_GetPixels. A positive value causes the sash to be offset from the near (left/top) side of the pane, and a negative value causes the sash to be offset from the far (right/bottom) side. If the offset is greater than the width, then the sash is placed flush against the side. The default is -10 pixels.

    Name:                   sashWidth
    Class:                  Width
    Command-Line Switch:	-sashwidth
    
      Specifies the width of the sash in any of the forms acceptable to Tk_GetPixels. The default is 10 pixels.

    Name:                   showHandle
    Class:                  ShowHandle
    Command-Line Switch:	-showhandle
    
      Specifies whether or not to display the sashes on the window panes. The default is 1, and valid options are 0 and 1.

    Name:                   thickness
    Class:                  Thickness
    Command-Line Switch:	-thickness
    
      Specifies the thickness of the separators in any of the forms acceptable to Tk_GetPixels. The default is 3 pixels.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the overall width of the paned window in any of the forms acceptable to Tk_GetPixels. The default is 10 pixels.


    DESCRIPTION

    The panedwindow command creates a multiple paned window widget capable of orienting the panes either vertically or horizontally. Each pane is itself a frame acting as a child site for other widgets. The border separating each pane contains a sash which allows user positioning of the panes relative to one another.

    METHODS

    The panedwindow command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command.

    Many of the widget commands for the panedwindow take as one argument an indicator of which pane of the paned window to operate on. These indicators are called indexes and allow reference and manipulation of panes regardless of their current map state. Paned window indexes may be specified in any of the following forms:

    number
    Specifies the pane numerically, where 0 corresponds to the nearest (top/left-most) pane of the paned window.
    end
    Indicates the farthest (bottom/right-most) pane of the paned window.
    pattern
    If the index doesn't satisfy one of the above forms then this form is used. Pattern is pattern-matched against the tag of each pane in the panedwindow, in order from left/top to right/left, until a matching entry is found. The rules of Tcl_StringMatch are used.

    WIDGET-SPECIFIC METHODS

    pathName add tag ?option value option value?
    Adds a new pane to the paned window on the far side (right/bottom). The following options may be specified:
      -margin value
      Specifies the border distance between the pane and pane contents is any of the forms acceptable to Tk_GetPixels. The default is 8 pixels.
      -minimum value
      Specifies the minimum size that a pane's contents may reach not inclusive of twice the margin in any of the forms acceptable to Tk_GetPixels. The default is 10 pixels. The add method returns the path name of the pane.
    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the panedwindow command.
    pathName childsite ?index?
    Returns a list of the child site path names or a specific child site given an index. The list is constructed from the near side (left/top) to the far side (right/bottom).
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the panedwindow command.
    pathName delete index
    Deletes a specified pane given an index.
    pathName fraction percentage percentage ?percentage percentage ...?
    Sets the visible percentage of the panes. Specifies a set of percentages which are applied to the visible panes from the near side (left/top). The number of percentages must be equal to the current number of visible (mapped) panes and add up to 100.
    pathName hide index
    Changes the visiblity of the specified pane, allowing a previously displayed pane to be visually removed rather than deleted.
    pathName index index
    Returns the numerical index corresponding to index.
    pathName insert index tag ?option value option value ...?
    Same as the add command except that it inserts the new pane just before the one given by index, instead of appending to the end of the panedwindow. The option, and value arguments have the same interpretation as for the add widget command.
    pathName paneconfigure index ?options?
    This command is similar to the configure command, except that it applies to the options for an individual pane, whereas configure applies to the options for the paned window as a whole. Options may have any of the values accepted by the add widget command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for entry index (see Tk_ConfigureInfo for information on the format of this list).
    pathName reset
    Redisplays the pane window using default percentages.
    pathName show index
    Changes the visiblity of the specified pane, allowing a previously hidden pane to be displayed.

    NOTES

      Dynamic changing of the margin and or minimum options to values which make the current configuration invalid will block subsequent sash movement until the fractions are modified via the fraction method. For example a panedwindow is created with three panes and the minimum and margin options are at their default settings. Next the user moves the sashes to compact the panes to one side. Now, if the minimum is increased on the most compressed pane via the paneconfigure method to a large enough value, then sash movement is blocked until the fractions are adjusted. This situation is unusual and under normal operation of the panedwindow, this problem will never occur.

    EXAMPLE

     panedwindow .pw -width 300 -height 300 
     .pw add top
     .pw add middle -margin 10
     .pw add bottom -margin 10 -minimum 10
    
     pack .pw -fill both -expand yes
    
     foreach pane [.pw childSite] {
        button $pane.b -text $pane -relief raised -borderwidth 2
        pack $pane.b -fill both -expand yes
     }
    
     .pw fraction 50 30 20
     .pw paneconfigure 0 -minimum 20
     .pw paneconfigure bottom -margin 15
    

    ACKNOWLEDGEMENTS:

    Jay Schmidgall

      1994 - Base logic posted to comp.lang.tcl

    Joe Hidebrand <hildjj@fuentez.com>

      07/25/94 - Posted first multipane version to comp.lang.tcl

      07/28/94 - Added support for vertical panes

    Ken Copeland <ken@hilco.com>

      09/28/95 - Smoothed out the sash movement and added squeezable panes.

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    panedwindow, widget iwidgets-4.1.1/demos/html/spinner.n.html0000644003604700454610000001714707347201755016626 0ustar dgp771divspinner - Create and manipulate a spinner widget

    spinner - Create and manipulate a spinner widget

    SYNOPSIS

    spinner pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <- Spinner

    STANDARD OPTIONS

    background
    foreground
    insertBorderWidth
    justify
    selectForeground
    borderWidth
    highlightColor
    insertOffTime
    relief
    textVariable
    cursor
    highlightThickness
    insertOnTime
    selectBackground
    exportSelection
    insertBackground
    insertWidth
    selectBorderWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    show
    state

    See the "entry" manual entry for details on the associated options.

    INHERITED OPTIONS

    childSitePos
    invalid
    width
    command
    textBackground
    fixed
    textFont
    focusCommand
    validate

    See the "entryfield" widget manual entry for details on the above inherited options.

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" widget manual entry for details on the above inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   arrowOrient
    Class:                  Orient
    Command-Line Switch:	-arroworient
    
      Specifies placement of arrow buttons: horizontal or vertical. The default is vertical.

    Name:                   decrement
    Class:                  Command
    Command-Line Switch:	-decrement
    
      Tcl command to be executed when down arrow is pressed.

    Name:                   increment
    Class:                  Command
    Command-Line Switch:	-increment
    
      Tcl command to be executed when up arrow is pressed.

    Name:                   repeatDelay
    Class:                  RepeatDelay
    Command-Line Switch:	-repeatdelay
    
      Specifies the initial delay in milliseconds before the spinner repeat action on the arrow buttons engages. The default is 300 milliseconds.

    Name:                   repeatInterval
    Class:                  RepeatInterval
    Command-Line Switch:	-repeatinterval
    
      Specifies the repeat delay in milliseconds between selections of the arrow buttons. A repeatinterval of 0 disables button repeat. The default is 100 milliseconds.


    DESCRIPTION

    The spinner command creates a spinner widget. The spinner is comprised of an entryfield plus up and down arrow buttons. Arrows may be drawn horizontally or vertically.

    METHODS

    The spinner command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for spinner widgets:

    ASSOCIATED METHODS

    delete
    insert
    get
    scan
    icursor
    selection
    index
    xview

    See the "entry" manual entry for details on the associated methods.

    INHERITED METHODS

    childsite
    clear
    peek

    See the "entryfield" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the spinner command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the spinner command.
    pathName down
    Derived classes may overload this method to specialize functionality.
    pathName up
    Derived classes may overload this method to specialize functionality.

    COMPONENTS

    Name:                   downarrow
    Class:                  Canvas
    
      The downarrow component is the downward pointing button of the spinner. See the "canvas" widget manual entry for details on the downarrow component item.

    Name:                   uparrow
    Class:                  Canvas
    
      The uparrow component is the upward pointing button of the spinner. See the "canvas" widget manual entry for details on the uparrow component item.

    EXAMPLE

     set months {January February March April May June July \\
                     August September October November December}
    
     proc blockInput {char} {
         return 0
     }
    
     proc spinMonth {step} {
         global months
    
         set index [expr [lsearch $months [.sm get]] + $step]
    
         if {$index < 0} {set index 11}
         if {$index > 11} {set index 0}
    
         .sm delete 0 end
         .sm insert 0 [lindex $months $index]
     }
    
     spinner .sm -labeltext "Month : " -width 10 -fixed 10 -validate blockInput \\
                 -decrement {spinMonth -1} -increment {spinMonth 1}
     .sm insert 0 January
    
     pack .sm -padx 10 -pady 10
    

    ACKNOWLEDGEMENTS:

    Ken Copeland <ken@hilco.com>

      10/18/95 - Added auto-repeat action to spinner arrow buttons.

    AUTHOR

    Sue Yockey

    KEYWORDS

    spinner, widget iwidgets-4.1.1/demos/html/notebook.n.html0000644003604700454610000003601606570255554016767 0ustar dgp771divnotebook - create and manipulate notebook widgets

    notebook - create and manipulate notebook widgets

    SYNOPSIS

    notebook pathName ?options?

    INHERITANCE

    itk::Widget <- notebook

    STANDARD OPTIONS

    background
    cursor
    foreground
    height
    scrollCommand
    width

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   auto
    Class:                  Auto
    Command-Line Switch:	-auto
    
      Specifies whether to use the automatic packing/unpacking algorithm of the notebook. A value of true indicates that page frames will be unpacked and packed acoording to the algorithm described in the select command. A value of false leaves the current page packed and subsequent selects, next, or previous commands do not switch pages automatically. In either case the page's associated command (see the add command's description of the command option) is invoked. The value may have any of the forms accepted by the Tcl_GetBoolean, such as true, false, 0, 1, yes, or no.
      For example, if a series of pages in a notebook simply change certain display configurations of a graphical display, the -auto flag could be used. By setting it, the -command procs could do the appropriate reconfiguring of the page when the page is switched.

    DESCRIPTION

    The notebook command creates a new window (given by the pathName argument) and makes it into a notebook widget. Additional options, described above may be specified on the command line or in the option database to configure aspects of the notebook such as its colors, font, and text. The notebook command returns its pathName argument. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist. A notebook is a widget that contains a set of pages. It displays one page from the set as the selected page. When a page is selected, the page's contents are displayed in the page area. When first created a notebook has no pages. Pages may be added or deleted using widget commands described below.

    NOTEBOOK PAGES

    A notebook's pages area contains a single child site frame. When a new page is created it is a child of this frame. The page's child site frame serves as a geometry container for applications to pack widgets into. It is this frame that is automatically unpacked or packed when the auto option is true. This creates the effect of one page being visible at a time. When a new page is selected, the previously selected page's child site frame is automatically unpacked from the notebook's child site frame and the newly selected page's child site is packed into the notebook's child site frame. However, sometimes it is desirable to handle page changes in a different manner. By specifying the auto option as false, child site packing can be disabled and done differently. For example, all widgets might be packed into the first page's child site frame. Then when a new page is selected, the application can reconfigure the widgets and give the appearance that the page was flipped. In both cases the command option for a page specifies a Tcl Command to execute when the page is selected. In the case of auto being true, it is called between the unpacking of the previously selected page and the packing of the newly selected page.

    WIDGET-SPECIFIC METHODS

    The notebookfR command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    option and the args determine the exact behavior of the command.

    Many of the widget commands for a notebook take as one argument an indicator of which page of the notebook to operate on. These indicators are called indexes and may be specified in any of the following forms:

    number
    Specifies the index of the the component. For menus, 0 corresponds to the left-most menu of the menu bar. For entries, 0 corresponds to the top-most entry of the menu. number Specifies the page numerically, where 0 corresponds to the first page in the notebook, 1 to the second, and so on.
    select
    Specifies the currently selected page's index. If no page is currently selected, the value -1 is returned.
    end
    Specifes the last page in the notebooks's index. If the notebook is empty this will return -1.
    pattern
    If the index doesn't satisfy the form of a number, then this form is used. Pattern is pattern-matched against the label of each page in the notebook, in order from the first to the last page, until a matching entry is found. The rules of Tcl_StringMatch are used.

    '............................................................................. The following commands are possible for notebook widgets:

    pathName add ?option value?
    Add a new page at the end of the notebook. A new child site frame is created. Returns the child site pathName. If additional arguments are present, they specify any of the following options:
      -background value
      Specifies a background color to use for displaying the child site frame of this page. If this option is specified as an empty string (the default), then the background option for the overall notebook is used.
      -command value
      Specifies a Tcl command to be executed when this page is selected. This allows the programmer a hook to reconfigure this page's widgets or any other page's widgets.
        If the notebook has the auto option set to true, when a page is selected this command will be called immediately after the previously selected page is unpacked and immediately before this page is selected. The index value select is valid during this Tcl command. `index select' will return this page's page number.
        If the auto option is set to false, when a page is selected the unpack and pack calls are bypassed. This Tcl command is still called.
      -foreground value
      Specifies a foreground color to use for displaying tab labels when tabs are in their normal unselected state. If this option is specified as an empty string (the default), then the foreground option for the overall notebook is used.
      -label value
      Specifies a string to associate with this page. This label serves as an additional identifier used to reference the page. This label may be used for the index value in widget commands.
    pathName childSite ?index?
    If passed no arguments, returns a list of pathNames for all the pages in the notebook. If the notebook is empty, an empty list is returned
      If index is passed, it returns the pathName for the page's child site frame specified by index. Widgets that are created with this pathName will be displayed when the associated page is selected. If index is not a valid index, an empty string is returned.
    pathName cget option
    Returns the current value of the configuration option given by option.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the notebook command.
    pathName delete index1 ?index2?
    Delete all of the pages between index1 and index2 inclusive. If index2 is omitted then it defaults to index1. Returns an empty string.
    pathName index index
    Returns the numerical index corresponding to index.
    pathName insert index ?option value?
    Insert a new page in the notebook before the page specified by index. A new child site frame is created. See the add command for valid options. Returns the child site pathName.
    pathName next
    Advances the selected page to the next page (order is determined by insertion order). If the currently selected page is the last page in the notebook, the selection wraps around to the first page in the notebook.
      For notebooks with auto set to true the current page's child site is unpacked from the notebook's child site frame. Then the next page's child site is packed into the notebooks child site frame. The Tcl command given with the command option will be invoked between these two operations.
      For notebooks with auto set to false the Tcl command given with the command option will be invoked.
    pathName pagecget index ?option?
    Returns the current value of the configuration option given by option for the page specified by index. The valid available options are the same as available to the add command.
    pathName pageconfigure index ?option? ?value option value ...?
    This command is similar to the configure command, except that it applies to the options for an individual page, whereas configure applies to the options for the notebook. Options may have any of the values accepted by the add widget command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for page index (see Tk_ConfigureInfo for information on the format of this list).
    pathName prev
    Moves the selected page to the previous page (order is determined by insertion order). If the currently selected page is the first page in the notebook, the selection wraps around to the last page in the notebook.
      For notebooks with auto set to true the current page's child site is unpacked from the notebook's child site frame. Then the previous page's child site is packed into the notebooks child site frame. The Tcl command given with the command option will be invoked between these two operations.
      For notebooks with auto set to false the Tcl command given with the command option will be invoked.
    pathName select index
    Selects the page specified by index as the currently selected page.
      For notebooks with auto set to true the current page's child site is unpacked from the notebook's child site frame. Then the index page's child site is packed into the notebooks child site frame. The Tcl command given with the command option will be invoked between these two operations.
      For notebooks with auto set to false the Tcl command given with the command option will be invoked.
    pathName view
    Returns the currently selected page. This command is for compatibility with the scrollbar widget.
    pathName view index
    Selects the page specified by index as the currently selected page. This command is for compatibility with the scrollbar widget.
    pathName view moveto fraction
    Uses the fraction value to determine the corresponding page to move to. This command is for compatibility with the scrollbar widget.
    pathName view scroll num what
    Uses the num value to determine how many pages to move forward or backward (num can be negative or positive). The what argument is ignored. This command is for compatibility with the scrollbar widget.

    EXAMPLE

    Following is an example that creates a notebook with two pages. In this example, we use a scrollbar widget to control the notebook widget.

      the
      pack
      -width
      pack
      \\
      -expand
      left
      \\
      #
      to
      #
      "Page
      add
      .nb
      Two"
      Get
      frames
      pages.
      childsite
      [.nb

    buttons
    of
    $page1CS.b
    pack
    -text
    $page2CS.b
    Select
    of
    select
    #
    and
    #
    together,
    scrollbar
    ".nb
    -scrollcommand
    .scroll
    yes

    notebook
    it.
    100
    .nb
    -fill
    yes
    \\
    -pady
    Add
    the
    "Page
    Two",
    -label
    add

    the
    of
    set
    0]
    childsite

      on
      the
      -text
      $page1CS.b
      "Button

    the
    the
    0
    Create
    associate
    and
    then
    ScrollBar
    view"
    ".scroll
    -fill
    -pady
    #
    widget
    notebook
    -height
    -anchor
    both
    \\
    -padx
    10
    two
    notebook,
    One"
    respectively.
    "Page
    -label

      child
      these
      page1CS
      set
      "Page
      #
      each
      notebook
      "Button
      button
      Two"

        first
        notebook

      the
      teh
      the
      pack
      .scroll
      .nb
      set"
      y
      10
    Create
    and
    .nb
    100
    nw
    \\
    -side
    10

      pages
      labelled
      and
      .nb
      One"
      "Page
      #
      site
      two
      [.nb
      page2CS
      Two"]
      Create
      page
      button
      One"
      $page2CS.b
      pack
      #
      page
      .nb

        scrollbar
        scrollbar
        notebook
        the
        -command
        configure
        pack
        -expand

    AUTHOR

    Bill W. Scott

    KEYWORDS

    notebook page iwidgets-4.1.1/demos/html/toolbar.n.html0000644003604700454610000003256007015107776016606 0ustar dgp771div<B>toolbar</B> - Create and manipulate a tool bar

    toolbar - Create and manipulate a tool bar

    SYNOPSIS

    toolbar pathName ?options?

    STANDARD OPTIONS

    activeBackground
    activeForeground
    background
    borderWidth
    cursor
    disabledForeground
    font
    foreground
    highlightBackground
    highlightColor
    highlightThickness
    insertBackground
    insertForeground
    orient
    selectBackground
    selectBorderWidth
    selectColor
    selectForeground
    state
    troughColor

    See the "options" manual entry for details on the standard options. For widgets added to the toolbar, these options will be propogated if the widget supports the option. For example, all widgets that support a font option will be changed if the the toolbar's font option is configured.

    WIDGET-SPECIFIC OPTIONS

    Name:                   balloonBackground
    Class:                  BalloonBackground
    Command-Line Switch:	-ballooonbackground
    
      Specifies the background color of the balloon help displayed at the bottom center of a widget on the toolbar that has a non empty string for its balloonStr option. The default color is yellow.

    Name:                   balloonDelay1
    Class:                  BalloonDelay1
    Command-Line Switch:	-balloondelay1
    
      Specifies the length of time (in milliseconds) to wait before initially posting a balloon help hint window. This delay is in effect whenever 1) the mouse leaves the toolbar, or 2) a toolbar item is selected with the mouse button.

    Name:                   balloonDelay2
    Class:                  BalloonDelay2
    Command-Line Switch:	-balloondelay2
    
      Specifies the length of time (in milliseconds) to wait before continuing to post balloon help hint windows. This delay is in effect after the first time a balloon hint window is activated. It remains in effect until 1) the mouse leaves the toolbar, or 2) a toolbar item is selected with the mouse button.

    Name:                   balloonFont
    Class:                  BalloonFont
    Command-Line Switch:	-balloonfont
    
      Specifies the font of the balloon help text displayed at the bottom center of a widget on the toolbar that has a non empty string for its balloonStr option. The default font is 6x10.

    Name:                   balloonForeground
    Class:                  BalloonForeground
    Command-Line Switch:	-ballooonforeground
    
      Specifies the foreground color of the balloon help displayed at the bottom center of a widget on the toolbar that has a non empty string for its balloonStr option. The default color is black.

    Name:                   helpVariable
    Class:                  HelpVariable
    Command-Line Switch:	-helpvariable
    
      Specifies the global variable to update whenever the mouse is in motion over a toolbar widget. This global variable is updated with the current value of the active widget's helpStr. Other widgets can "watch" this variable with the trace command, or as is the case with entry or label widgets, they can set their textVariable to the same global variable. This allows for a simple implementation of a help status bar. Whenever the mouse leaves a menu entry, the helpVariable is set to the empty string {}.

    Name:                   orient
    Class:                  Orient
    Command-Line Switch:	-orient
    
      Specifies the orientation of the toolbar. Must be either horizontal or vertical.

    DESCRIPTION

    The toolbar command creates a new window (given by the pathName argument) and makes it into a toolbar widget. Additional options, described above may be specified on the command line or in the option database to configure aspects of the toolbar such as its colors, font, and orientation. The toolbar command returns its pathName argument. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist.

    A toolbar is a widget that displays a collection of widgets arranged either in a row or a column (depending on the value of the -orient option). This collection of widgets is usually for user convenience to give access to a set of commands or settings. Any widget may be placed on a toolbar. However, command or value-oriented widgets (such as button, radiobutton, etc.) are usually the most useful kind of widgets to appear on a toolbar.

    In addition, the toolbar adds two new options to all widgets that are added to it. These are the helpStr and balloonStr options. See the discussion for the widget command add below.

    WIDGET-SPECIFIC METHODS

    The toolbar command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and args determine the exact behavior of the command.

    Many of the widget commands for a toolbar take as one argument an indicator of which widget item of the toolbar to operate on. The indicator is called an index and may be specified in any of the following forms:

    number
    Specifies the widget numerically, where 0 corresponds to the first widget in the notebook, 1 to the second, and so on. (For horizontal, 0 is the leftmost; for vertical, 0 is the topmost).
    end
    Specifes the last widget in the toolbar's index. If the toolbar is empty this will return -1.
    last
    Same as end.
    pattern
    If the index doesn't satisfy any of the above forms, then this form is used. Pattern is pattern-matched against the widgetName of each widget in the toolbar, in order from the first to the last widget, until a matching entry is found. An exact match must occur.

    The following commands are possible for toolbar widgets:

    pathName add widgetCommand widgetName ?option value?
    Adds a widget with the command widgetCommand whose name is widgetName to the toolbar. If widgetCommand is radiobutton or checkbutton, its packing is slightly padded to match the geometry of button widgets. In addition, the indicatorOn option is false by default and the selectColor is that of the toolbar background by default. This allows Radiobutton and Checkbutton widgets to be added as icons by simply setting their bitmap or image options. If additional arguments are present, they are the set of available options that the widget type of widgetCommand supports. In addition they may also be one of the following options:
      -helpstr value
      Specifes the help string to associate with the widget. When the mouse moves over the widget, the variable denoted by helpVariable is set to helpStr. Another widget can bind to the helpVariable and thus track status help.
      -balloonstr value
      Specifes the string to display in a balloon window for this widget. A balloon window is a small popup window centered at the bottom of the widget. Usually the balloonStr value is the name of the item on the toolbar. It is sometimes known as a hint window.
        When the mouse moves into an item on the toolbar, a timer is set based on the value of balloonDelay1. If the mouse stays inside the item for balloonDelay1, the balloon window will pop up displaying the balloonStr value. Once the balloon window is posted, a new timer based on balloonDelay2 is set. This is typically a shorter timer. If the mouse is moved to another item, the window is unposted and a new window will be posted over the item if the shorter delay time is satisfied.
        While the balloon window is posted, it can also be unposted if the item is selected. In this case the timer is reset to balloonDelay1. Whenever the mouse leaves the toolbar, the timer is also reset to balloonDelay1.
        This window posting/unposting model is the same model used in the Windows95 environment.
    pathName cget option
    Returns the current value of the configuration option given by option.
    pathName configure ?option value?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string.
    pathName delete index ?index2?
    This command deletes all items between index and index2 inclusive. If index2 is omitted then it defaults to index. Returns an empty string.
    pathName index index
    Returns the widget's numerical index for the entry corresponding to index. If index is not found, -1 is returned.
    pathName insert beforeIndex widgetCommand widgetName ?option value?
    Insert a new item named widgetName with the
    command widgetCommand before the item specified by beforeIndex. If widgetCommand is radiobutton or checkbutton, its packing is slightly padded to match the geometry of button widgets. In addition, the indicatorOn option is false by default and the selectColor is that of the toolbar background by default. This allows Radiobutton and Checkbutton widgets to be added as icons by simply setting their bitmap or image options. The set of available options is the same as specified in the ad command.
    pathName itemcget index option
    Returns the current value of the configuration option given by option for index. The item type of index determines the valid available options.
    pathName itemconfigure index ?option value?
    Query or modify the configuration options of the widget of the toolbar specified by index. If no option is specified, returns a list describing all of the available options for index (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. The item type of index determines the valid available options. The set of available options is the same as specified in the ad command.

    EXAMPLE

     toolbar .tb -helpvariable statusVar
    
     .tb add button item1 \\
        -helpstr "Save It" -bitmap @./icons/Tool_32_box.xbm \\
        -balloonstr "Save" -command {puts 1}
     .tb add button item2 \\
        -helpstr "Save It" -bitmap @./icons/Tool_32_brush.xbm \\
        -balloonstr "Save" -command {puts 1}
     .tb add button item3 \\
        -helpstr "Save It" -bitmap @./icons/Tool_32_cut.xbm \\
        -balloonstr "Save" -command {puts 1}
     .tb add button item4 \\
        -helpstr "Save It" -bitmap @./icons/Tool_32_draw.xbm \\
        -balloonstr "Save" -command {puts 1}
     .tb add button item5 \\
        -bitmap @./icons/Tool_32_erase.xbm -helpstr "Play It" \\
        -command {puts 2}
     .tb add frame filler \\
        -borderwidth 1 -width 10 -height 10
     .tb add radiobutton item6 \\
        -bitmap @./icons/Tool_32_oval.xbm -command {puts 4} \\
        -variable result -value OPEN -helpstr "Radio Button # 1" \\
        -balloonstr "Radio"
     .tb add radiobutton item7 \\
        -bitmap @./icons/Tool_32_line.xbm -command {puts 5} \\
        -variable result -value CLOSED
     .tb add checkbutton item8 \\
        -bitmap @./icons/Tool_32_text.xbm -command {puts 6} \\
        -variable checkit -onvalue yes -offvalue no    
     .tb add checkbutton check2 \\
        -bitmap @./icons/Tool_32_points.xbm -command {puts 7} \\
         -variable checkit2 -onvalue yes -offvalue no    
    
     pack .tb -side top -anchor nw
    

    AUTHOR

    Bill Scott

    KEYWORDS

    toolbar, button, radiobutton, checkbutton, iwidgets, widget iwidgets-4.1.1/demos/html/selectionbox.n.html0000644003604700454610000002453307347201717017641 0ustar dgp771divselectionbox - Create and manipulate a selection box widget

    selectionbox - Create and manipulate a selection box widget

    SYNOPSIS

    selectionbox pathName ?options?

    INHERITANCE

    itk::Widget <- selectionbox

    STANDARD OPTIONS

    activeBackground
    exportSelection
    insertBackground
    insertWidth
    selectBackground
    background
    foreground
    insertBorderWidth
    relief
    selectBorderWidth
    borderWidth
    highlightColor
    insertOffTime
    repeatDelay
    selectForeground
    cursor
    highlightThickness
    insertOnTime
    repeatInterval

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    textBackground
    textFont

    See the "entryfield" widget class manual entry for details on the above associated options.

    labelFont
    labelMargin

    See the "labeledwidget" class manual entry for details on the above associated options.

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget class manual entry for details on the above associated options.

    dblClickCommand
    textBackground
    hscrollMode
    textFont
    sbWidth
    vscrollMode
    scrollMargin

    See the "scrolledlistbox" widget class manual entry for details on the above associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   childSitePos
    Class:                  Position
    Command-Line Switch:	-childsitepos
    
      Specifies the position of the child site in the selection box: n, s, e, w, or . The default is center

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 320 pixels.

    Name:                   itemsCommand
    Class:                  Command
    Command-Line Switch:	-itemscommand
    
      Specifies a command to be evaluated following selection of an item.

    Name:                   itemsLabel
    Class:                  Text
    Command-Line Switch:	-itemslabel
    
      Specifies the text of the label for the items list. The default is "List".

    Name:                   itemsLabelPos
    Class:                  Position
    Command-Line Switch:	-itemslabelpos
    
      Specifies the position of the label along the side of the items list: n, ne, e, se, s, sw, w, or nw. The default is nw.

    Name:                   itemsOn
    Class:                  ItemsOn
    Command-Line Switch:	-itemson
    
      Specifies whether or not to display the items list in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   margin
    Class:                  Margin
    Command-Line Switch:	-margin
    
      Specifies distance between the items list and selection entry in any of the forms acceptable to Tk_GetPixels. The default is 7 pixels.

    Name:                   selectionCommand
    Class:                  Command
    Command-Line Switch:	-selectioncommand
    
      Specifies a Tcl procedure to be associated with a return key press event in the selection entry field.

    Name:                   selectionLabel
    Class:                  Text
    Command-Line Switch:	-selectionlabel
    
      Specifies the text of the label for the selection entry field. The default is "Selection".

    Name:                   selectionLabelPos
    Class:                  Position
    Command-Line Switch:	-selectionlabelpos
    
      Specifies the position of the label along the side of the selection: n, ne, e, se, s, sw, w, or nw. The default is nw.

    Name:                   selectionOn
    Class:                  SelectionOn
    Command-Line Switch:	-selectionon
    
      Specifies whether or not to display the selection entry in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 260 pixels.


    DESCRIPTION

    The selectionbox command creates a scrolled list of items and a selection entry field. The user may choose any of the items displayed in the scrolled list of alternatives and the selection field will be filled with the choice. The user is also free to enter a new value in the selection entry field. Both the list and entry areas have labels. A child site is also provided in which the user may create other widgets to be used in conjunction with the selection box.

    METHODS

    The selectionbox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command.

    ASSOCIATED METHODS

    curselection
    scan
    delete
    selection
    index
    size
    nearest

    See the "listbox" widget class manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the selectionbox command.
    pathName childsite
    Returns the child site widget path name.
    pathName clear component
    Delete the contents of either the selection entry widget or items list. The component argument may be either items or selection.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the selectionbox command.
    pathName get
    Returns the current value of the selection entry widget.
    pathName insert component args
    Insert element(s) into either the selection entry widget or items list. The component argument may be either items or selection. The args follow the rules of either an entry or list widget depending on the component value.
    pathName selectitem
    Replace the selection entry field contents with the currently selected items value.

    COMPONENTS

    Name:                   childsite
    Class:                  Frame
    
      The childsite component is the user child site for the selection box. See the "frame" widget manual entry for details on the childsite component item.

    Name:                   items
    Class:                  Scrolledlistbox
    
      The items component provides the scrolled list box of items for the selection box. See the "scrolledlistbox" widget manual entry for details on the items component item.

    Name:                   selection
    Class:                  Entryfield
    
      The selection component provides the entry field in the selection box for display of the selected item in the items component. See the "entryfield" widget manual entry for details on the selection component item.

    EXAMPLE

     option add *textBackground white
    
     selectionbox .sb -items {Hello {Out There} World}
     pack .sb -padx 10 -pady 10 -fill both -expand yes 
    
     set cs [label [.sb childsite].label -text "Child Site"]
     pack $cs -fill x -padx 10 -pady 10
    
     .sb insert items 2 {Cruel Cruel}
    
     .sb selection set 1
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    selectionbox, widget iwidgets-4.1.1/demos/html/fileselectionbox.n.html0000644003604700454610000003034407347201305020467 0ustar dgp771divfileselectionbox - Create and manipulate a file selection box widget

    fileselectionbox - Create and manipulate a file selection box widget

    SYNOPSIS

    fileselectionbox pathName ?options?

    INHERITANCE

    itk::Widget <- Fileselectionbox

    STANDARD OPTIONS

    activeBackground
    foreground
    insertBorderWidth
    selectBackground
    background
    highlightColor
    insertOffTime
    selectBorderWidth
    borderWidth
    highlightThickness
    insertOnTime
    selectForeground
    cursor
    insertBackground
    insertWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    textBackground
    textFont

    See the "entryfield" widget manual entry for details on the above associated options.

    labelFont

    See the "labeledwidget" widget manual entry for details on the above associated options.

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget class manual entry for details on the above associated options.

    textBackground
    textFont

    See the "scrolledlistbox" widget manual entry for details on the above associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   childSitePos
    Class:                  Position
    Command-Line Switch:	-childsitepos
    
      Specifies the position of the child site in the selection box: n, s, e, w, top, bottom, or center. The default is s.
      Specifies a Tcl command procedure which is called when an file list item is double clicked. Typically this occurs when mouse button 1 is double clicked over a file name.

    Name:                   directory
    Class:                  Directory
    Command-Line Switch:	-directory
    
      Specifies the initial default directory. The default is the present working directory.

    Name:                   dirSearchCommand
    Class:                  Command
    Command-Line Switch:	-dirsearchcommand
    
      Specifies a Tcl command to be executed to perform a directory search. The command will receive the current working directory and filter mask as arguments. The command should return a list of files which will be placed into the directory list.

    Name:                   dirsLabel
    Class:                  Text
    Command-Line Switch:	-dirslabel
    
      Specifies the text of the label for the directory list. The default is "Directories".

    Name:                   dirsOn
    Class:                  DirsOn
    Command-Line Switch:	-dirson
    
      Specifies whether or not to display the directory list. The value may be given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   fileSearchCommand
    Class:                  Command
    Command-Line Switch:	-filesearchcommand
    
      Specifies a Tcl command to be executed to perform a file search. The command will receive the current working directory and filter mask as arguments. The command should return a list of files which will be placed into the file list.

    Name:                   filesLabel
    Class:                  Text
    Command-Line Switch:	-fileslabel
    
      Specifies the text of the label for the files list. The default is "Files".

    Name:                   filesOn
    Class:                  FilesOn
    Command-Line Switch:	-fileson
    
      Specifies whether or not to display the files list. The value may be given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   fileType
    Class:                  FileType
    Command-Line Switch:	-filetype
    
      Specify the type of files which may appear in the file list: regular, directory, or any. The default is regular.

    Name:                   filterCommand
    Class:                  Command
    Command-Line Switch:	-filtercommand
    
      Specifies a Tcl command to be executed upon hitting the Return key in the filter entry widget.

    Name:                   filterLabel
    Class:                  Text
    Command-Line Switch:	-filterlabel
    
      Specifies the text of the label for the filter entry field. The default is "Filter".

    Name:                   filterOn
    Class:                  FilterOn
    Command-Line Switch:	-filteron
    
      Specifies whether or not to display the filter entry. The value may be given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 360 pixels.

    Name:                   invalid
    Class:                  Command
    Command-Line Switch:	-invalid
    
      Command to be executed should the filter contents be proven invalid. The default is {bell}.

    Name:                   mask
    Class:                  Mask
    Command-Line Switch:	-mask
    
      Specifies the initial file mask string. The default is "*".

    Name:                   noMatchString
    Class:                  NoMatchString
    Command-Line Switch:	-nomatchstring
    
      Specifies the string to be displayed in the files list should no files match the mask. The default is "".

    Name:                   selectDirCommand
    Class:                  Command
    Command-Line Switch:	-selectdirommand
    
      Specifies a Tcl command to be executed following selection of a directory in the directory list.

    Name:                   selectFileCommand
    Class:                  Command
    Command-Line Switch:	-selectfileommand
    
      Specifies a Tcl command to be executed following selection of a file in the files list.

    Name:                   selectionCommand
    Class:                  Command
    Command-Line Switch:	-selectioncommand
    
      Specifies a Tcl command to be executed upon hitting the Return key in the selection entry widget.

    Name:                   selectionLabel
    Class:                  Text
    Command-Line Switch:	-selectionlabel
    
      Specifies the text of the label for the selection entry field. The default is "Selection".

    Name:                   selectionOn
    Class:                  SelectionOn
    Command-Line Switch:	-selectionon
    
      Specifies whether or not to display the selection entry. The value may be given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 470 pixels.


    DESCRIPTION

    The fileselectionbox command creates a file selection box similar to the OSF/Motif standard Xmfileselectionbox composite widget. The fileselectionbox is composed of directory and file scrolled lists as well as filter and selection entry fields. Bindings are in place such that selection of a directory list item loads the filter entry field and selection of a file list item loads the selection entry field. Options exist to control the appearance and actions of the widget.

    METHODS

    The fileselectionbox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for fileselectionbox widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the fileselectionbox command.
    pathName childsite
    Returns the child site widget path name.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the fileselectionbox command.
    pathName filter
    Update the current contents of the file selection box based on the current filter entry field value.
    pathName get
    Returns the current value of the selection entry widget.

    COMPONENTS

    Name:                   dirs
    Class:                  Scrolledlistbox
    
      The dirs component is the directory list box for the file selection box. See the "scrolledlistbox" widget manual entry for details on the dirs component item.

    Name:                   files
    Class:                  Scrolledlistbox
    
      The files component is the file list box for the file selection box. See the "scrolledlistbox" widget manual entry for details on the files component item.

    Name:                   filter
    Class:                  Entryfield
    
      The filter component is the entry field for user input of the filter value. See the "entryfield" widget manual entry for details on the filter component item.

    Name:                   selection
    Class:                  Entryfield
    
      The selection component is the entry field for user input of the currently selected file value. See the "entryfield" widget manual entry for details on the selection component item.

    EXAMPLE

    fileselectionbox .fsb
    pack .fsb -padx 10 -pady 10 -fill both -expand yes 
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    fileselectionbox, widget iwidgets-4.1.1/demos/html/dateentry.n.html0000644003604700454610000001423107375230203017125 0ustar dgp771divdateentry - Create and manipulate a dateentry widget

    dateentry - Create and manipulate a dateentry widget

    SYNOPSIS

    dateentry pathName ?options?

    INHERITANCE

    itk::Widget <- LabeledWidget <- Datefield <- Dateentry

    STANDARD OPTIONS

    background
    foreground
    justify
    borderWidth
    highlightColor
    relief
    cursor
    highlightThickness
    exportSelection
    insertBackground

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" class manual entry for details on these inherited options.

    command
    textFont
    int
    iq
    state
    textBackground

    See the "datefield" class manual entry for details on these inherited options.

    ASSOCIATED OPTIONS

    backwardImage
    dateFont
    outline
    titleFont
    buttonForeground
    dayFont
    selectColor
    weekdayBackground
    command
    days
    selectThickness
    weekendBackground
    currentDateFont
    forwardImage
    startDay

    See the "calendar" manual entry for details on the associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   grab
    Class:                  Grab
    Command-Line Switch:	-grab
    
      Specifies the grab level, local or global, to be obtained before bringing up the popup calendar. The default is global. For more information concerning grab levels, consult the documentation for Tk's grab command.

    Name:                   icon
    Class:                  Icon
    Command-Line Switch:	-icon
    
      Specifies the calendar icon image to be used in the dateentry. This image must have been created previously with the image create command. Should one not be provided, then one will be generated, pixmap if possible, bitmap otherwise.


    DESCRIPTION

    The dateentry command creates a quicken style date entry field with a popup calendar by combining the datefield and calendar widgets together. This allows a user to enter the date via the keyboard or by using the mouse and selecting the calendar icon which brings up a popup calendar.

    METHODS

    The dateentry command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for dateentry widgets:

    INHERITED METHODS

    get
    isvalid
    show

    See the "datefield" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the dateentry command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the dateentry command.

    COMPONENTS

    Name:                   label
    Class:                  Label
    
      The label component provides a label component to used to identify the date. See the "label" widget manual entry for details on the label component item.

    Name:                   iconbutton
    Class:                  Label
    
      The iconbutton component provides a labelbutton component to act as a lightweight button displaying the calendar icon. Upon pressing the labelbutton, the calendar appears. See the "label" widget manual entry for details on the labelbutton component item.

    Name:                   date
    Class:                  Entry
    
      The date component provides the entry field for date input and display. See the "entry" widget manual entry for details on the date component item.

    EXAMPLE

     dateentry .de
     pack .de
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    dateentry, widget iwidgets-4.1.1/demos/html/shell.n.html0000644003604700454610000001523707347201736016254 0ustar dgp771divshell - Create and manipulate a shell widget

    shell - Create and manipulate a shell widget

    SYNOPSIS

    shell pathName ?options?

    INHERITANCE

    itk::Toplevel <- shell

    STANDARD OPTIONS

    background
    cursor
    foreground

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    title

    See the "Toplevel" manual entry for details on the above inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the shell. The value may be specified in any of the forms acceptable to Tk_GetPixels. A value of zero causes the height to be adjusted to the required value based on the size requests of the components placed in the childsite. Otherwise, the height is fixed. The default is zero. NOTE: This may cause some amount of flickering on slower machines. To prevent it simply set the width and height to a appropriate value.

    Name:                   master
    Class:                  Window
    Command-Line Switch:	-master
    
      Defines the shell as being a transient window with the master window given by the master option. The master window should be either another existing toplevel window or {} for no master. The default is {} for shells and "." for dialogs.

    Name:                   modality
    Class:                  Modality
    Command-Line Switch:	-modality
    
      Allows the shell to grab control of the screen in one of three different ways: application, system, or none. Application modal prevents any other toplevel windows within the application which are direct children of '.' from gaining focus. System modal locks the screen and prevents all windows from gaining focus regardless of application. A modality of none performs no grabs at all. The default is none.

    Name:                   padX
    Class:                  Pad
    Command-Line Switch:	-padx
    
      Specifies a padding distance for the childsite in the X-direction in any of the forms acceptable to Tk_GetPixels. The default is 10.

    Name:                   padY
    Class:                  Pad
    Command-Line Switch:	-pady
    
      Specifies a padding distance for the childsite in the Y-direction in any of the forms acceptable to Tk_GetPixels. The default is 10.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the shell. The value may be specified in any of the forms acceptable to Tk_GetPixels. A value of zero causes the width to be adjusted to the required value based on the size requests of the components placed in the childsite. Otherwise, the width is fixed. The default is zero. NOTE: This may cause some amount of flickering on slower machines. To prevent it simply set the width and height to a appropriate value.

    DESCRIPTION

    The shell command creates a shell which is a top level widget which supports modal operation.

    METHODS

    The shell command create a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for shell widgets:

    WIDGET-SPECIFIC METHODS

    pathName activate
    Display the shell and wait based on the modality. For application and system modal activations, perform a grab operation, and wait for the result. The result may be returned via an argument to the deactivate method.
    pathName center ?widget?
    Centers the shell with respect to another widget. The widget argument is optional. If provided, it should be the path of another widget with to center upon. If absent, then the shell will be centered on the screen as a whole.
    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the shell command.
    pathName childsite
    Returns the pathname of the child site widget.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the shell command.
    pathName deactivate ?arg?
    Deactivate the display of the shell. The method takes an optional argument to be passed to the activate method which returns the value. The optional argument is only effective for application and system modal dialogs.

    COMPONENTS

    Name:                   shellchildsite
    Class:                  frame
    
      The shellchildsite component is the user child site for the shell. See the "frame" widget manual entry for details on the shellchildsite component item.

    EXAMPLE

     shell .sh -modality application -padx 20 -pady 20 -title Shell
    
     pack [label [.sh childsite].l -text SHELL]
    
     .sh center
     .sh activate
    

    AUTHOR

    Mark L. Ulferts

    Kris Raney

    KEYWORDS

    shell, widget iwidgets-4.1.1/demos/html/extbutton.n.html0000644003604700454610000001067307347201177017177 0ustar dgp771divextbutton - Extends the behavior of the Tk button

    extbutton - Extends the behavior of the Tk button

    SYNOPSIS

    extbutton pathName ?options?

    INHERITANCE

    itk::Widget <- extbutton

    STANDARD OPTIONS

    activebackground
    bd
    foreground
    text
    activeforeground
    cursor
    image
    bitmap
    disabledforeground
    justify
    background
    font
    relief

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   bitmapforeground
    Class:                  Foreground
    Command-Line Switch:	-bitmapforeground
    
      Configures the foreground color of the bitmap.

    Name:                   command
    Class:                  Command
    Command-Line Switch:	-command
    
      Associate a command with the extbutton. Simulates a Tk button's -command option. Invoked by either <1> events or by explicitly calling the public invoke() method.

    Name:                   defaultring
    Class:                  DefaultRing
    Command-Line Switch:    -defaultring
    
      Boolean describing whether the extbutton displays its default ring given in any of the forms acceptable to Tcl_GetBoolean. The default is false.

    Name:                   defaultringpad
    Class:                  Pad
    Command-Line Switch:    -defaultringpad
    
      Specifies the amount of space to be allocated to the indentation of the default ring ring given in any of the forms acceptable to Tcl_GetPixels. The option has no effect if the defaultring option is set to false. The default is 4 pixels.

    Name:                   imagePos
    Class:                  Position
    Command-Line Switch:    -imagepos
    
      Specifies the image position relative to the message text: n, ne, nw, s, se, sw, w, wn, ws, e, en, or es. The default is w.

    Name:                   ringBackground
    Class:                  Background
    Command-Line Switch:	-ringbackground
    
      Configures the background color of the default ring frame (if -defaultring is set to boolean true).


    DESCRIPTION

    The extbutton extends the behavior of the atomic Tk button by allowing text and an image or bitmap to coexist. The user may use the -image or -bitmap options to specify an image as well as the -imagepos option to specify image position relative to the text. Note that the extbutton is not intended to be used without an image/bitmap. There will be an emtpy space next to the text if no image/bitmap is specified.

    METHODS

    The extbutton command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    

    INHERITED METHODS

    Each of the following methods are inherited from itk::Archetype. See that man page for details.
    pathName cget
    pathName component
    pathName config
    pathName configure
    

    WIDGET-SPECIFIC METHODS

    pathName invoke
    Evaluates the command fragment associated with the -command option.
    pathName flash
    Simulates the Tk button's flash command.

    EXAMPLES

    
    iwidgets::extbutton .eb -text "Bitmap example" -bitmap info \
      -background bisque -activeforeground red -bitmapforeground blue \
      -defaultring 1 -command {puts "Bisque is beautiful"}
    pack .eb -expand 1
    
    iwidgets::extbutton .eb -text "Image example" -relief ridge -image \
      [image create photo -file $itk::library/../iwidgets/demos/images/clear.gif] \
      -font 9x15bold -background lightgreen -imagepos e \
      -activebackground lightyellow
    pack .eb -expand 1
    
    

    AUTHOR

    Chad Smith

    KEYWORDS

    button, pushbutton iwidgets-4.1.1/demos/html/extfileselectionbox.n.html0000644003604700454610000003033607347201205021210 0ustar dgp771divextfileselectionbox - Create and manipulate a file selection box widget

    extfileselectionbox - Create and manipulate a file selection box widget

    SYNOPSIS

    extfileselectionbox pathName ?options?

    INHERITANCE

    itk::Widget <- Extfileselectionbox

    STANDARD OPTIONS

    activeBackground
    foreground
    insertBorderWidth
    selectBackground
    background
    highlightColor
    insertOffTime
    selectBorderWidth
    borderWidth
    highlightThickness
    insertOnTime
    selectForeground
    cursor
    insertBackground
    insertWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    popupCursor
    textBackground
    textFont

    See the "combobox" widget manual entry for details on the above associated options.

    labelFont

    See the "labeledwidget" widget manual entry for details on the above associated options.

    sashCursor

    See the "panedwindow" widget manual entry for details on the above associated options.

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget class manual entry for details on the above associated options.

    textBackground
    textFont

    See the "scrolledlistbox" widget manual entry for details on the above associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   childSitePos
    Class:                  Position
    Command-Line Switch:	-childsitepos
    
      Specifies the position of the child site in the extended fileselection box: n, s, e, w, top, or bottom. The default is s.

    Name:                   directory
    Class:                  Directory
    Command-Line Switch:	-directory
    
      Specifies the initial default directory. The default is the present working directory.

    Name:                   dirSearchCommand
    Class:                  Command
    Command-Line Switch:	-dirsearchcommand
    
      Specifies a Tcl command to be executed to perform a directory search. The command will receive the current working directory and filter mask as arguments. The command should return a list of files which will be placed into the directory list.

    Name:                   dirsLabel
    Class:                  Text
    Command-Line Switch:	-dirslabel
    
      Specifies the text of the label for the directory list. The default is "Directories".

    Name:                   dirsOn
    Class:                  DirsOn
    Command-Line Switch:	-dirson
    
      Specifies whether or not to display the directory list. The value may be given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   fileSearchCommand
    Class:                  Command
    Command-Line Switch:	-filesearchcommand
    
      Specifies a Tcl command to be executed to perform a file search. The command will receive the current working directory and filter mask as arguments. The command should return a list of files which will be placed into the file list.

    Name:                   filesLabel
    Class:                  Text
    Command-Line Switch:	-fileslabel
    
      Specifies the text of the label for the files list. The default is "Files".

    Name:                   filesOn
    Class:                  FilesOn
    Command-Line Switch:	-fileson
    
      Specifies whether or not to display the files list. The value may be given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   fileType
    Class:                  FileType
    Command-Line Switch:	-filetype
    
      Specify the type of files which may appear in the file list: regular, directory, or any. The default is regular.

    Name:                   filterCommand
    Class:                  Command
    Command-Line Switch:	-filtercommand
    
      Specifies a Tcl command to be executed upon hitting the Return key in the filter combobox widget.

    Name:                   filterLabel
    Class:                  Text
    Command-Line Switch:	-filterlabel
    
      Specifies the text of the label for the filter combobox. The default is "Filter".

    Name:                   filterOn
    Class:                  FilterOn
    Command-Line Switch:	-filteron
    
      Specifies whether or not to display the filter combobox. The value may be given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 300 pixels.

    Name:                   invalid
    Class:                  Command
    Command-Line Switch:	-invalid
    
      Command to be executed should the filter contents be proven invalid. The default is {bell}.

    Name:                   mask
    Class:                  Mask
    Command-Line Switch:	-mask
    
      Specifies the initial file mask string. The default is "*".

    Name:                   noMatchString
    Class:                  NoMatchString
    Command-Line Switch:	-nomatchstring
    
      Specifies the string to be displayed in the files list should no files match the mask. The default is "".

    Name:                   selectDirCommand
    Class:                  Command
    Command-Line Switch:	-selectdirommand
    
      Specifies a Tcl command to be executed following selection of a directory in the directory list.

    Name:                   selectFileCommand
    Class:                  Command
    Command-Line Switch:	-selectfileommand
    
      Specifies a Tcl command to be executed following selection of a file in the files list.

    Name:                   selectionCommand
    Class:                  Command
    Command-Line Switch:	-selectioncommand
    
      Specifies a Tcl command to be executed upon hitting the Return key in the selection combobox widget.

    Name:                   selectionLabel
    Class:                  Text
    Command-Line Switch:	-selectionlabel
    
      Specifies the text of the label for the selection combobox. The default is "Selection".

    Name:                   selectionOn
    Class:                  SelectionOn
    Command-Line Switch:	-selectionon
    
      Specifies whether or not to display the selection combobox. The value may be given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 350 pixels.


    DESCRIPTION

    The extfileselectionbox command creates an extended file selection box which is slightly different than the fileselectionbox widget. The differences are mostly cosmetic in that the listboxes are within a panedwindow and the entryfields for the filter and selection have been replaced by comboboxes. Other than that the interface is practically the same.

    METHODS

    The extfileselectionbox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for extfileselectionbox widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the extfileselectionbox command.
    pathName childsite
    Returns the child site widget path name.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the extfileselectionbox command.
    pathName filter
    Update the current contents of the extended file selection box based on the current filter combobox value.
    pathName get
    Returns the current value of the selection combobox widget.

    COMPONENTS

    Name:                   dirs
    Class:                  Scrolledlistbox
    
      The dirs component is the directory list box for the extended fileselection box. See the "scrolledlistbox" widget manual entry for details on the dirs component item.

    Name:                   files
    Class:                  Scrolledlistbox
    
      The files component is the file list box for the extended fileselection box. See the "scrolledlistbox" widget manual entry for details on the files component item.

    Name:                   filter
    Class:                  Combobox
    
      The filter component is the field for user input of the filter value. See the "combobox" widget manual entry for details on the filter component item.

    Name:                   selection
    Class:                  Combobox
    
      The selection component is the field for user input of the currently selected file value. See the "combobox" widget manual entry for details on the selection component item.

    EXAMPLE

    extfileselectionbox .fsb
    pack .fsb -padx 10 -pady 10 -fill both -expand yes 
    

    AUTHORS

    Mark L. Ulferts

    Anthony Parent

    KEYWORDS

    extfileselectionbox, widget iwidgets-4.1.1/demos/html/dialog.n.html0000644003604700454610000001145607347201142016372 0ustar dgp771divdialog - Create and manipulate a dialog widget

    dialog - Create and manipulate a dialog widget

    SYNOPSIS

    dialog pathName ?options?

    INHERITANCE

    itk::Toplevel <- Shell <- Dialogshell <- Dialog

    STANDARD OPTIONS

    background
    cursor
    foreground

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    buttonBoxPadX
    padY
    buttonBoxPadY
    separator
    buttonBoxPos
    thickness
    padX

    See the "dialogshell" manual entry for details on the above inherited options.

    height
    master
    modality
    width

    See the "shell" manual entry for details on the above inherited options.

    title

    See the "Toplevel" manual entry for details on the above inherited options.


    DESCRIPTION

    The dialog command creates a dialog box providing standard buttons and a child site for use in derived classes. The buttons include ok, apply, cancel, and help. Methods and Options exist to configure the buttons and their containing box.

    METHODS

    The dialog command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for dialog widgets:

    INHERITED METHODS

    add
    index
    buttonconfigure
    insert
    default
    invoke
    hide
    show

    See the "buttonbox" manual entry for details on the above inherited methods.

    childsite

    See the "dialogshell" manual entry for details on the above inherited methods.

    activate
    center
    deactivate

    See the "shell" manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the dialog command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the dialog command.

    EXAMPLE

     dialog .d -modality global
     .d buttonconfigure OK -command {puts OK; .d deactivate 1}
     .d buttonconfigure Apply -command {puts Apply}
     .d buttonconfigure Cancel -command {puts Cancel; .d deactivate 0}
     .d buttonconfigure Help -command {puts Help}
     
     listbox [.d childsite].lb -relief sunken
     pack [.d childsite].lb -expand yes -fill both
    
     if {[.d activate]} {
         puts "Exit via OK button"
     } else {
         puts "Exit via Cancel button"
     }
    

    AUTHORS

    Mark L. Ulferts

    Bret A. Schuhmacher

    KEYWORDS

    dialog, dialogshell, shell, widget iwidgets-4.1.1/demos/html/scrolledhtml.n.html0000644003604700454610000002652707537260565017653 0ustar dgp771divscrolledhtml - Create and manipulate a scrolled text widget with the capability

    scrolledhtml - Create and manipulate a scrolled text widget with the capability

    of displaying HTML formatted documents.

    SYNOPSIS

    scrolledhtml pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <- Scrolledtext <- Scrolledhtml

    STANDARD OPTIONS

    activeBackground
    exportSelection
    insertBackground
    insertWidth
    repeatDelay
    selectForeground
    background
    foreground
    insertBorderWidth
    padX
    repeatInterval
    setGrid
    borderWidth
    highlightColor
    insertOffTime
    padY
    selectBackground
    cursor
    highlightThickness
    insertOnTime
    relief
    selectBorderWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget manual entry for details on the above associated options.

    spacing1
    tabs
    spacing2
    wrap
    spacing3
    state

    See the "text" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    labelBitmap
    labelPos
    hscrollMode
    vscrollMode
    labelFont
    labelText
    sbWidth
    width
    labelImage
    labelVariable
    scrollMargin
    labelMargin
    height
    visibleitems

    See the "scrolledtext" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   feedback
    Class:                  FeedBack
    Command-Line Switch:	-feedback
    
      Specifies the callback command to use to give feedback on current status. The command is executed in the form command <number of characters remaining>

    Name:                   fixedfont
    Class:                  FixedFont
    Command-Line Switch:	-fixedfont
    
      Specifies the name of the font to be used for fixed-width character text (such as <pre>...</pre> or <tt>...</tt>.) The size, style, and other font attributes are determined by the format tags in the document. The default is courier.

    Name:                   fontname
    Class:                  FontName
    Command-Line Switch:	-fontname
    
      Specifies the name of the font to be used for normal-width character spaced text. The size, style, and other font attributes are determined by the format tags in the document. The default is times.

    Name:                   fontsize
    Class:                  FontSize
    Command-Line Switch:	-fontsize
    
      Specifies the general size of the fonts used. One of small, medium, large, or huge. The default is medium.

    Name:                   foreground
    Class:                  Foreground
    Command-Line Switch:	-foreground
    
      Specifies the color of text other than hypertext links, in any of the forms acceptable to Tk_GetColor. This value may be overridden in a particular document by the text attribute of the Body HTML tag.

    Name:                   link
    Class:                  Link
    Command-Line Switch:	-link
    
      Specifies the default color of hypertext links in any of the forms acceptable to Tk_GetColor. This value may be overridden in a particular document by the link attribute of the Body HTML tag. The default is blue.

    Name:                   linkcommand
    Class:                  LinkCommand
    Command-Line Switch:	-linkcommand
    
      Specifies the command to execute when the user clicks on a hypertext link. Execution is of the form linkcommand href, where href is the value given in the href attribute of the A HTML tag.

    Name:                   alink
    Class:                  alink
    Command-Line Switch:	-alink
    
      Specifies the color of hypertext links when the cursor is over the link in any of the forms acceptable to Tk_GetColor. The default is red.

    Name:                   textBackground
    Class:                  Background
    Command-Line Switch:	-textbackground
    
      Specifies the background color for the text area in any of the forms acceptable to Tk_GetColor. This value may be overridden in a particular document by the bgcolor attribute of the Body HTML tag.

    Name:                   unknownimage
    Class:                  UnknownImage
    Command-Line Switch:	-unknownimage
    
      Specifies the name of the image file to display when an img specified in the html document cannot be loaded.

    Name:                   update
    Class:                  Update
    Command-Line Switch:	-alink
    
      A boolean value indicating whether to call update during html rendering.


    DESCRIPTION

    The scrolledhtml command creates a scrolled text widget with the additional capability to display html formatted documents. An import method is provided to read an html document file, and a render method is provided to display a html formatted text string.

    METHODS

    The scrolledhtml command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for scrolledhtml widgets:

    ASSOCIATED METHODS

    bbox
    dlineinfo
    mark
    tag
    compare
    get
    scan
    window
    debug
    index
    search
    xview
    delete
    insert
    see
    yview

    See the "text" manual entry for details on the standard methods.

    INHERITED METHODS

    export
    clear

    See the "scrolledhtml" manual entry for details on the inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the scrolledhtml command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the scrolledhtml command.
    pathName import ?option? href
    Load html formatted text from a file. Href must exist. If option is -link, href is assumed to be relative to the application's current working directory. Otherwise, href is assumed to be relative to the path of the last page loaded. Href is either a filename, or a reference of the form filename#anchorname. In the latter form, fIFilename and/or anchorname may be empty. If filename is empty, the current document is assumed. If anchorname is empty, the top of the document is assumed.
    pathName pwd
    Print the current working directory of the widget, i.e. the directory of the last page loaded.
    pathName render htmltext ?wd?
    Display HTML formatted text htmltext. Wd gives the base path to use for all links and images in the document. Wd defaults to the application's current working directory.
    pathName title
    Return the title of the current page, as given in the <title>...</title> field in the document.

    HTML COMPLIANCE

    This widget is compliant with HTML 3.2 with the following exceptions:

    No features requiring a connection to an http server are supported.

    Some image alignments aren't supported, because they are not supported by the text widget.

    The <br> attributes dealing with image alignments aren't supported.

    Automatic table sizing is not supported very well, due to limitations of the text widget

    EXAMPLE

     option add *textBackground white
    
     scrolledhtml .sh -fontname helvetica -linkcommand "this import -link"
    
     pack .sh -padx 10 -pady 10 -fill both -expand yes
    
     .sh import ~/public_html/index.html
    

    BUGS

      Cells in a table can be caused to overlap. ex: <table border width="100%"> <tr><td>cell1</td><td align=right rowspan=2>cell2</td></tr> <tr><td colspan=2>cell3 w/ overlap</td> </table> It hasn't been fixed because 1) it's a pain to fix, 2) it will slow tables down by a significant amount, and 3) netscape has the same bug, as of V3.01.

    ACKNOWLEDGEMENTS

    Sam Shen
      This code is based largely on his tkhtml.tcl code from tk inspect. Tkhtml is copyright 1995 Lawrence Berkeley Laboratory.

    AUTHOR

    Kris Raney

    KEYWORDS

    scrolledhtml, html, text, widget iwidgets-4.1.1/demos/html/labeledframe.n.html0000644003604700454610000001454706570244361017551 0ustar dgp771divlabeledframe - Create and manipulate a labeled frame widget

    labeledframe - Create and manipulate a labeled frame widget

    SYNOPSIS

    labeledframe pathName ?options?

    INHERITANCE

    itk::Archetype <- labeledframe

    STANDARD OPTIONS

    background
    relief
    borderwidth
    cursor
    foreground

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   iPadX
    Class:                  IPad
    Command-Line Switch:	-ipadx
    
      Specifies horizontal padding space between the border and the childsite. The value may have any of the forms acceptable to Tk_GetPixels. The default is 0.

    Name:                   iPadY
    Class:                  IPad
    Command-Line Switch:	-ipady
    
      Specifies vertical padding space between the border and the childsite. The value may have any of the forms acceptable to Tk_GetPixels. The default is 0.

    Name:                   labelBitmap
    Class:                  Bitmap
    Command-Line Switch:	-labelbitmap
    
      Specifies a bitmap to display in the label, in any of the forms acceptable to Tk_GetBitmap. This option overrides the labeltext option.

    Name:                   labelImage
    Class:                  Image
    Command-Line Switch:	-labelimage
    
      Specifies a image to be used as the label. The image may be any of the values created by the image create command. This option overrides both the labelbitmap and labeletext options.

    Name:                   labelMargin
    Class:                  Margin
    Command-Line Switch:	-labelmargin
    
      Specifies the distance between the inner ede of the hull frames relief, and the label in any of the forms acceptable to Tk_GetPixels. The default is 10 pixels.

    Name:                   labelText
    Class:                  Text
    Command-Line Switch:	-labeltext
    
      Specifies the text of the label around the childsite.

    Name:                   labelVariable
    Class:                  Variable
    Command-Line Switch:	-labelvariable
    
      Specifies the text variable of the label around the childsite.

    Name:                   labelFont
    Class:                  Font
    Command-Line Switch:	-labelfont
    
      Specifies the font of the label around the childsite.

    Name:                   labelPos
    Class:                  Position
    Command-Line Switch:	-labelpos
    
      Specifies the position of the label within the grooved relief of the hull widget. ne, n, nw, se, s, sw, en, e, es, wn, w, ws Default is n.


    DESCRIPTION

    The labeledframe command creates a hull frame with a grooved relief, a label positioned within the grooved relief of the hull frame, and a frame childsite. The frame childsite can filled with any widget via a derived class or though the use of the childsite method. This class was designed to be a general purpose base class for supporting the combination of labeled frame and a childsite. The options include the ability to position the label at configurable locations within the grooved relief of the hull frame, and control the display of the label.

    METHODS

    The labeledframe command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for labeledframe widgets:

    WIDGET-SPECIFIC METHODS

    pathName childsite
    Return the path name of the child site.
    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the labeledframe command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the labeledframe command.

    COMPONENTS

    Name:                   label
    Class:                  label
    
      The label component provides the label for the labeled widget. See the "label" widget manual entry for details on the label component item.

    EXAMPLE

      The labeledframe was primarily meant to be a base class. The Radiobox is a good example of a derived classe of the labeledframe class. In order to provide equal support for composite classes, the 'childsite' methods also exists. The following is an example of 'childsite' method usage.

     labeledframe .lw -labeltext "Entry Frame" -labelpos n
     pack .lw -fill both -expand yes -padx 10 -pady 10
     set cs [.lw childsite]
    
     pack [Entryfield $cs.entry1 -labeltext "Name:"] -side top -fill x
     pack [Spinint $cs.entry2 -labeltext "Number:"] -side top -fill x
     pack [Pushbutton $cs.entry3 -text "Details:"] -side top -fill x
    
    

    AUTHOR

    John A. Tucker

    KEYWORDS

    labeledframe, widget iwidgets-4.1.1/demos/html/mainwindow.n.html0000644003604700454610000002434407347201354017314 0ustar dgp771divmainwindow - Create and manipulate a mainwindow widget

    mainwindow - Create and manipulate a mainwindow widget

    SYNOPSIS

    mainwindow pathName ?options?

    INHERITANCE

    itk::Toplevel <- shell <- mainwindow

    STANDARD OPTIONS

    background
    foreground
    cursor
    highlightBackground
    disabledForeground
    highlightColor
    font
    highlightThickness

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    balloonBackground
    balloonForeground
    balloonDelay1
    balloonDelay2
    ballonFont

    See the "toolbar" manual entry for details on the above associated options.

    INHERITED OPTIONS

    title

    See the "Toplevel" manual entry for details on the above inherited options.

    height
    padY
    master
    width
    modality
    padX

    See the "shell" manual entry for details on the above inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   helpLine
    Class:                  HelpLine
    Command-Line Switch:	-helpline
    
      Specifies whether or not to display the help line. The value may be given in any of the forms acceptable to Tk_GetBoolean. The default is yes.

    Name:                   menuBarBackground
    Class:                  Background
    Command-Line Switch:	-menubarbackground
    
      Specifies the normal background color for the menubar.

    Name:                   menuBarFont
    Class:                  Font
    Command-Line Switch:	-menubarfont
    
      Specifies the font to use when drawing text inside the menubar.

    Name:                   menuBarForeround
    Class:                  Foreground
    Command-Line Switch:	-menubarforeground
    
      Specifies the normal foreground color for the menubar.

    Name:                   statusLine
    Class:                  StatusLine
    Command-Line Switch:	-statusline
    
      Specifies whether or not to display the status line. The value may be given in any of the forms acceptable to Tk_GetBoolean. The default is yes.

    Name:                   toolBarBackground
    Class:                  Background
    Command-Line Switch:	-toolbarbackground
    
      Specifies the normal background color for the toolbar.

    Name:                   toolBarFont
    Class:                  Font
    Command-Line Switch:	-toolbarfont
    
      Specifies the font to use when drawing text inside the toolbar.

    Name:                   toolBarForeround
    Class:                  Foreground
    Command-Line Switch:	-toolbarforeground
    
      Specifies the normal foreground color for the toolbar.

    DESCRIPTION

    The mainwindow command creates a mainwindow shell which contains a menubar, toolbar, mousebar, childsite, status line, and help line. Each item may be filled and configured to suit individual needs.

    METHODS

    The mainwindow command create a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for mainwindow widgets:

    INHERITED METHODS

    activate
    center
    deactivate

    See the "shell" manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the mainwindow command.
    pathName childsite
    Returns the pathname of the child site widget.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the mainwindow command.
    pathName menubar ?args?
    The menubar method provides access to the menubar. Invoked with no arguments it returns the pathname of the menubar. With arguments, they are evaluated against the menubar which in effect provides access to the entire API of the menubar. See the "menubar" manual entry for details on the commands available in the menubar.
    pathName mousebar ?args?
    The mousebar method provides access to the mousebar which is a vertical toolbar. Invoked with no arguments it returns the pathname of the mousebar. With arguments, they are evaluated against the mousebar which in effect provides access to the entire API of the underlying toolbar. See the "toolbar" manual entry for details on the commands available in the mousebar.
    pathName msgd ?args?
    The msgd method provides access to the messagedialog contained in the mainwindow. Invoked with no arguments it returns the pathname of the messagedialog. With arguments, they are evaluated against the messagedialog which in effect provides access to the entire API of the messagedialog. See the "messagedialog" manual entry for details on the commands available in the messagedialog.
    pathName toolbar ?args?
    The toolbar method provides access to the toolbar. Invoked with no arguments it returns the pathname of the toolbar. With arguments, they are evaluated against the toolbar which in effect provides access to the entire API of the toolbar. See the "toolbar" manual entry for details on the commands available in the toolbar.

    COMPONENTS

    Name:                   help
    Class:                  Label
    
      The help component provides a location for displaying any help strings provided in the menubar, toolbar, or mousebar. See the "label" widget manual entry for details on the help component item.

    Name:                   menubar
    Class:                  Menubar
    
      The menubar component is the menubar located at the top of the window. See the "menubar" widget manual entry for details on the menubar component item.

    Name:                   mousebar
    Class:                  Toolbar
    
      The mousebar component is the vertical toolbar located on the right side of the window. See the "toolbar" widget manual entry for details on the mousebar component item.

    Name:                   msgd
    Class:                  Messagedialog
    
      The msgd component is a messagedialog which may be reconfigured as needed and used repeatedly throughout the application. See the "messagedialog" widget manual entry for details on the messagedialog component item.

    Name:                   status
    Class:                  Label
    
      The status component provides a location for displaying application status information. See the "label" widget manual entry for details on the status component item.

    Name:                   toolbar
    Class:                  Toolbar
    
      The toolbar component is the horizontal toolbar located on the top of the window. See the "toolbar" widget manual entry for details on the toolbar component item.

    EXAMPLE

     mainwindow .mw
    
     #
     # Add a File menubutton
     #
     .mw menubar add menubutton file -text "File" -underline 0 -padx 8 -pady 2 \\
        -menu {options -tearoff no
    	   command new -label "New" -underline 0 \\
    	       -helpstr "Create a new file"
    	   command open -label "Open ..." -underline 0 \\
    	       -helpstr "Open an existing file"
    	   command save -label "Save" -underline 0 \\
    	       -helpstr "Save the current file"
    	   command saveas -label "Save As ..." -underline 5 \\
    	       -helpstr "Save the file as a differnet name"
    	   command print -label "Print" -underline 0 \\
    	       -helpstr "Print the file"
               separator sep1
    	   command close -label "Close" -underline 0 \\
    	       -helpstr "Close the file"
    	   separator sep2
    	   command exit -label "Exit" -underline 1 \\
    	       -helpstr "Exit this application" 
        }
    
     #
     # Install a scrolledtext widget in the childsite.
     #
     scrolledtext [.mw childsite].st
     pack [.mw childsite].st -fill both -expand yes
    
     #
     # Activate the main window.
     #
     .mw activate
    

    AUTHORS

    Mark L. Ulferts

    John A. Tucker

    KEYWORDS

    mainwindow, shell, widget iwidgets-4.1.1/demos/html/hyperhelp.n.html0000644003604700454610000001621706570255551017145 0ustar dgp771divhyperhelp - Create and manipulate a hyperhelp widget

    hyperhelp - Create and manipulate a hyperhelp widget

    SYNOPSIS

    hyperhelp pathName ?options?

    INHERITANCE

    itk::Toplevel <- shell <- hyperhelp

    STANDARD OPTIONS

    activeBackground
    cursor
    highlightThickness
    insertOnTime
    relief
    selectBorderWidth
    background
    exportSelection
    insertBackground
    insertWidth
    repeatDelay
    selectForeground
    borderWidth
    foreground
    insertBorderWidth
    padX
    repeatInterval
    setGrid
    closecmd
    highlightColor
    insertOffTime
    padY
    selectBackground

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    hscrollmode
    fontsize
    width
    unknownimage
    vscrollmode
    fixedfont
    height
    textbackground
    link
    state
    fontname
    linkhighlight
    wrap

    See the "scrolledhtml" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    modality
    title

    See the "shell" manual entry for details on the above inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   topics
    Class:                  Topics
    Command-Line Switch:    -topics
    
      Specifies a list of help topics in the form {?topic? ... }. Topic may either be a topic name, in which case the document associated with the topic should be in the file helpdir/topic.html, or it may be of the form {name file}. In the latter case, name is displayed in the topic menu, and selecting the name loads file. If file has a relative path, it is assumed to be relative to helpdir.

    Name:                   helpdir
    Class:                  Directory
    Command-Line Switch:    -helpdir
    
      Specifies the directory where help files are located.

    Name:                   closeCmd
    Class:                  CloseCmd
    Command-Line Switch:    -closecmd
    
      Specifies the tcl command to be executed when the close option is selected from the topics menu.

    Name:                   maxHistory
    Class:                  MaxHistory
    Command-Line Switch:    -maxhistory
    
      Specifies the maximum number of entries stored in the history list

    Name:                   beforelink
    Class:                  BeforeLink
    Command-Line Switch:    -beforelink
    
      Specifies a command to be eval'ed before a new link is displayed. The path of the link to be displayed is appended before evaling the command. A suggested use might be to busy the widget while a new page is being displayed.

    Name:                   afterlink
    Class:                  AfterLink
    Command-Line Switch:    -afterlink
    
      Specifies a command to be eval'ed after a new link is completely displayed. The path of the link that was displayed is appended before evaling the command.


    DESCRIPTION

    The hyperhelp command creates a shell window with a pulldown menu showing a list of topics. The topics are displayed by importing a HTML formatted file named helpdir/topic.html. For a list of supported HTML tags, see scrolledhtml(n).

    METHODS

    The hyperhelp command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for dialog widgets:

    INHERITED METHODS

    activate
    center
    childsite
    deactivate

    See the "shell" manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the hyperhelp command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the hyperhelp command.
    pathName showtopic topic
    Display html file helpdir/topic.html. Topic may optionally be of the form topicname#anchorname. In this form, either topicname or anchorname or both may be empty. If topicname is empty, the current topic is assumed. If anchorname is empty, the top of the document is assumed
    pathName followlink href
    Display html file href. Href may be optionally be of the form filename#anchorname. In this form, either filename or anchorname or both may be empty. If filename is empty, the current document is assumed. If anchorname is empty, the top of the document is assumed.
    pathName forward
    Display html file one forward in history list, if applicable.
    pathName back
    Display html file one back in history list, if applicable.

    EXAMPLE

     hyperhelp .h -topics { Intro Help } -helpdir ~/help
     .h showtopic Intro
     
    

    AUTHOR

    Kris Raney

    KEYWORDS

    hyperhelp, html, help, shell, widget iwidgets-4.1.1/demos/html/hierarchy.n.html0000644003604700454610000005160307347201334017112 0ustar dgp771divhierarchy - Create and manipulate a hierarchy widget

    hierarchy - Create and manipulate a hierarchy widget

    SYNOPSIS

    hierarchy pathName ?options?

    INHERITANCE

    itk::Widget <- Labeledwidget <- Scrolledwidget <- Hierarchy

    STANDARD OPTIONS

    activeBackground
    cursor
    highlightThickness
    activeForeground
    disabledForeground
    relief
    background
    foreground
    selectBackground
    borderWidth
    highlightColor
    selectForeground

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget manual entry for details on the above associated options.

    spacing1
    spacing2
    spacing3
    tabs

    See the "text" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable
    labelMargin

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   alwaysQuery
    Class:                  AlwaysQuery
    Command-Line Switch:	-alwaysquery
    
      Boolean flag which tells the hierarchy widget weather or not each refresh of the display should be via a new query using the command value of the -querycommand option or use the values previous found the last time the query was made. The default is no.

    Name:                   closedIcon
    Class:                  Icon
    Command-Line Switch:	-closedicon
    
      Specifies the name of an existing closed icon image to be used in the hierarchy before those nodes that are collapsed. Should one not be provided, then a folder icon will be generated, pixmap if possible, bitmap otherwise.

    Name:                   expanded
    Class:                  Expanded
    Command-Line Switch:	-expanded
    
      When true, the hierarchy will be completely expanded when it is first displayed. A fresh display can be triggered by resetting the -querycommand option. The default is false.

    Name:                   filter
    Class:                  Filter
    Command-Line Switch:	-filter
    
      When true only the branch nodes and selected items are displayed. This gives a compact view of important items. The default is false.

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the hierarchy as an entire unit. The value may be specified in any of the forms acceptable to Tk_GetPixels. Any additional space needed to display the other components such as labels, margins, and scrollbars force the hierarchy to be compressed. A value of zero along with the same value for the width causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default height is zero.

    Name:                   iconCommand
    Class:                  Command
    Command-Line Switch:	-iconcommand
    
      Specifies a command to be executed upon user selection via mouse button one of any additional icons given in the values returned by the command associated with the -querycommand option. If this command contains "%n", it is replaced with the name of the node the icon belongs to. Should it contain "%i" then the icon name is substituted.

    Name:                   markBackground
    Class:                  Foreground
    Command-Line Switch:	-markbackground
    
      Specifies the background color to use when displaying marked nodes.

    Name:                   markForeground
    Class:                  Background
    Command-Line Switch:	-markforeground
    
      Specifies the foreground color to use when displaying marked nodes.

    Name:                   menuCursor
    Class:                  Cursor
    Command-Line Switch:	-menucursor
    
      Specifies the mouse cursor to be used for the item and background menus. The value may have any of the forms accept able to Tk_GetCursor.

    Name:                   nodeIcon
    Class:                  Icon
    Command-Line Switch:	-nodeicon
    
      Specifies the name of an existing node icon image to be used in the hierarchy before those nodes that are leafs. Should one not be provided, then a dog-eared page icon will be generated, pixmap if possible, bitmap otherwise.

    Name:                   openIcon
    Class:                  Icon
    Command-Line Switch:	-openicon
    
      Specifies the name of an existing open icon image to be used in the hierarchy before those nodes that are expanded. Should one not be provided, then an open folder icon will be generated, pixmap if possible, bitmap otherwise.

    Name:                   queryCommand
    Class:                  Command
    Command-Line Switch:	-querycommand
    
      Specifies the command executed to query the contents of each node. If this command contains "%n", it is replaced with the name of the desired node. In its simpilest form it should return the children of the given node as a list which will be depicted in the display. Since the names of the children are used as tags in the underlying text widget, each child must be unique in the hierarchy. Due to the unique requirement, the nodes shall be reffered to as uids or uid in the singular sense. The format of returned list is
      {uid [uid ...]}
      where uid is a unique id and primary key for the hierarchy entry
      Should the unique requirement pose a problem, the list returned can take on another more extended form which enables the association of text to be displayed with the uids. The uid must still be unique, but the text does not have to obey the unique rule. In addition, the format also allows the specification of additional tags to be used on the same entry in the hierarchy as the uid and additional icons to be displayed just before the node. The tags and icons are considered to be the property of the user in that the hierarchy widget will not depend on any of their values. The extended format is
      {{uid [text [tags [icons]]]} {uid [text [tags [icons]]]} ...}
      where uid is a unique id and primary key for the hierarchy entry text is the text to be displayed for this uid tags is a list of user tags to be applied to the entry icons is a list of icons to be displayed in front of the text
      The hierarchy widget does a look ahead from each node to determine if the node has a children. This can be cost some performace with large hierarchies. User's can avoid this by providing a hint in the user tags. A tag of "leaf" or "branch" tells the hierarchy widget the information it needs to know thereby avoiding the look ahead operation.

    Name:                   hscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-hscrollmode
    
      Specifies the the display mode to be used for the horizontal scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   sbWidth
    Class:                  Width
    Command-Line Switch:	-sbwidth
    
      Specifies the width of the scrollbar in any of the forms acceptable to Tk_GetPixels.

    Name:                   scrollMargin
    Class:                  Margin
    Command-Line Switch:	-scrollmargin
    
      Specifies the distance between the text portion of the hierarchy and the scrollbars in any of the forms acceptable to Tk_GetPixels. The default is 3 pixels.

    Name:                   textBackground
    Class:                  Background
    Command-Line Switch:	-textbackground
    
      Specifies the background color for the text portion of the hierarchy in any of the forms acceptable to Tk_GetColor.

    Name:                   textFont
    Class:                  Font
    Command-Line Switch:	-textfont
    
      Specifies the font to be used in the text portion of the hierarchy.

    Name:                   visibleitems
    Class:                  VisibleItems
    Command-Line Switch:	-visibleitems
    
      Specifies the widthxheight in characters and lines for the hierarchy. This option is only administered if the width and height options are both set to zero, otherwise they take precedence. The default value is 80x24. With the visibleitems option engaged, geometry constraints are maintained only on the text portion of the hierarchy. The size of the other components such as labels, margins, and scroll bars, are additive and independent, effecting the overall size of the hierarchy. In contrast, should the width and height options have non zero values, they are applied to the hierarchy as a whole. The hierarchy is compressed or expanded to maintain the geometry constraints.

    Name:                   vscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-vscrollmode
    
      Specifies the the display mode to be used for the vertical scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the hierarchy as an entire unit. The value may be specified in any of the forms acceptable to Tk_GetPixels. Any additional space needed to display the other components such as labels, margins, and scrollbars force the text portion of the hierarchy to be compressed. A value of zero along with the same value for the height causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default width is zero.


    DESCRIPTION

    The hierarchy command creates a hierarchical data view widget. It allows the graphical management of a a list of nodes that can be expanded or collapsed. Individual nodes can be highlighted. Clicking with the right mouse button on any item brings up a special item menu. Clicking on the background area brings up a different popup menu. Options exist to provide user control over the loading of the nodes and actions associated with node selection. Since the hierarchy is based on the scrolledtext widget, it includes options to control the method in which the scrollbars are displayed, i.e. statically or dynamically. Options also exist for adding a label to the hierarchy and controlling its position.

    METHODS

    The hierarchy command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for hierarchy widgets:

    ASSOCIATED METHODS

    bbox
    dlineinfo
    insert
    tag
    compare
    dump
    scan
    window
    debug
    get
    search
    xview
    delete
    index
    see
    yview

    See the "text" manual entry for details on the standard methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the hierarchy command.
    pathName clear
    Removes all items from the hierarchy display including all tags and icons. The display will remain empty until the -filter or -querycommand options are set.
    pathName collapse uid
    Collapses the hierarchy beneath the node with the specified unique id by one level. Since this can take a moment for large hierarchies, the cursor will be changed to a watch during the collapse. Also, if any of the nodes beneath the node being collapsed are selected, their status is changed to unselected.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the hierarchy command.
    pathName current
    Returns the tags for the node that was most recently selected by the right mouse button when the item menu was posted. Usually used by the code in the item menu to figure out what item is being manipulated.
    pathName draw ?when?
    Performs a complete redraw of the entire hierarchy. When may be either -now or -eventually where the latter means the draw can be performed after idle.
    pathName expand uid
    Expands the hierarchy beneath the node with the specified unique id by one level. Since this can take a moment for large hierarchies, the cursor will be changed to a watch during the expansion.
    pathName mark option ?arg arg ...?
    This command is used to manipulate marks which is quite similar to selection, adding a secondary means of hilighting an item in the hierarchy. The exact behavior of the command depends on the option argument that follows the mark argument. The following forms of the command are currently supported:
      pathName mark clear
      Clears all the currently marked nodes in the hierarchy.
      pathName mark add uid ?uid uid ...?
      Marks the nodes with the specified uids in the hierarchy using the -markbackground and -markforeground options and without affecting the mark state of any other nodes that were already marked.
      pathName mark remove uid ?uid uid ...?
      Unmarks the nodes with the specified uids in the hierarchy without affecting the mark state of any other nodes that were already marked.
      pathName mark get
      Returns a list of the unique ids that are currently marked.
    pathName refresh uid
    Performs a redraw of a specific node that has the given uid. If the node is not currently visible or in other words already drawn on the text, then no action is taken.
    pathName prune uid
    Removes the node specified by the given uid from the hierarchy. Should the node have children, then all of its children will be removed as well.
    pathName selection option ?arg arg ...?
    This command is used to manipulate the selection of nodes in the hierarchy. The exact behavior of the command depends on the option argument that follows the selection argument. The following forms of the command are currently supported:
      pathName selection clear
      Clears all the currently selected nodes in the hierarchy.
      pathName selection add uid ?uid uid ...?
      Selects the nodes with the specified uids in the hierarchy using the -selectionbackground and -selectionforeground options and without affecting the selection state of any other nodes that were already selected.
      pathName selection remove uid ?uid uid ...?
      Deselects the nodes with the specified uids in the hierarchy without affecting the selection state of any other nodes that were already selected.
      pathName selection get
      Returns a list of the unique ids that are currently selected.
    A nodes selection status is also dependent on it being visible. If a node is selected and its parent is then collapsed making the selected node not visible, then its selection status is changed to unselected.
    pathName toggle uid
    Toggles the hierarchy beneath the node with the specified unique id. If the hierarchy is currently expanded, then it is collapsed, and vice-versa.

    COMPONENTS

    Name:                   list
    Class:                  Text
    
      The list component is the text widget in which the hierarchy is displayed. See the "text" widget manual entry for details on the text component item.

    Name:                   bgMenu
    Class:                  Menu
    
      The bgMenu component is the popup menu which is displayed upon pressing the right mouse button in the background, i.e. not over a specific node. Menu items can be added along with their commands via the component command. See the "menu" widget manual entry for details on the bgMenu component item.

    Name:                   horizsb
    Class:                  Scrollbar
    
      The horizsb component is the horizontal scroll bar. See the "scrollbar" widget manual entry for details on the horizsb component item.

    Name:                   itemMenu
    Class:                  Menu
    
      The itemMenu component is the popup menu which is displayed upon selection of a hierarchy node with the right mouse button. Menu items can be added along with their commands via the component command. See the "menu" widget manual entry for details on the itemMenu component item.

    Name:                   vertsb
    Class:                  Scrollbar
    
      The vertsb component is the vertical scroll bar. See the "scrollbar" widget manual entry for details on the vertsb component item.

    EXAMPLE

    proc get_files {file} {
        global env
    
        if {$file == ""} {
            set dir $env(HOME)
        } else {
            set dir $file
        }
    
        if {[catch {cd $dir}] != 0} {
            return ""
        }
    
        set rlist ""
    
        foreach file [lsort [glob -nocomplain *]] {
            lappend rlist [list [file join $dir $file] $file]
        }
    
        return $rlist
    }
    
    hierarchy .h -querycommand "get_files %n" -visibleitems 30x15 \
        -labeltext $env(HOME)
    pack .h -side left -expand yes -fill both
    

    AUTHORS

    Mark L. Ulferts

    Michael J. McLennan

    KEYWORDS

    hierarchy, text, widget iwidgets-4.1.1/demos/html/iwidgets4.0.0UserCmds.html0000755003604700454610000000727007340264623020554 0ustar dgp771div
    iwidgets4.0.0 User Commands
    iwidgets4.0.0 User Commands

    iwidgets-4.1.1/demos/html/messagedialog.n.html0000644003604700454610000001530507347201372017741 0ustar dgp771divmessagedialog - Create and manipulate a message dialog widget

    messagedialog - Create and manipulate a message dialog widget

    SYNOPSIS

    messagedialog pathName ?options?

    INHERITANCE

    itk::Toplevel <- Shell <- Dialogshell <- Dialog <- Messagedialog

    STANDARD OPTIONS

    background
    foreground
    bitmap
    image
    cursor
    text
    font

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    buttonBoxPadX
    padY
    buttonBoxPadY
    separator
    buttonBoxPos
    thickness
    padX

    See the "dialogshell" widget manual entry for details on the above inherited options.

    master
    modality

    See the "shell" widget manual entry for details on the above inherited options.

    title

    See the "Toplevel" widget manual entry for details on the above inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   imagePos
    Class:                  Position
    Command-Line Switch:	-imagepos
    
      Specifies the image position relative to the message text: n, s, e, or w. The default is w.

    Name:                   textPadX
    Class:                  Pad
    Command-Line Switch:	-textpadx
    
      Specifies a non-negative value indicating how much extra space to request for the message text in the X direction. The value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   textPadY
    Class:                  Pad
    Command-Line Switch:	-textpady
    
      Specifies a non-negative value indicating how much extra space to request for the message text in the X direction. The value may have any of the forms acceptable to Tk_GetPixels.


    DESCRIPTION

    The messagedialog command creates a message dialog composite widget. The messagedialog is derived from the Dialog class and is composed of an image and associated message text with commands to manipulate the dialog buttons.

    METHODS

    The messagedialog command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for messagedialog widgets:

    INHERITED METHODS

    add
    insert
    buttonconfigure
    invoke
    default
    show
    hide

    See the "buttonbox" widget manual entry for details on the above inherited methods.

    childsite

    See the "dialogshell" widget manual entry for details on the above inherited methods.

    activate
    center
    deactivate

    See the "dialogshell" widget manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the messagedialog command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the messagedialog command.

    COMPONENTS

    Name:                   image
    Class:                  Label
    
      The image component is the bitmap or image of the message dialog. See the "label" widget manual entry for details on the image component item.

    Name:                   message
    Class:                  Label
    
      The message component provides the textual portion of the message dialog. See the "label" widget manual entry for details on the message component item.

    EXAMPLE

     #
     # Standard question message dialog used for confirmation.
     #
     messagedialog .md -title "Message Dialog" -text "Are you sure ?" \\
    	-bitmap questhead -modality global
    
     .md buttonconfigure OK -text Yes
     .md buttonconfigure Cancel -text No
    
     if {[.md activate]} {
        .md configure -text "Are you really sure ?"
        if {[.md activate]} {
    	puts stdout "Yes"
        } else {
    	puts stdout "No"
        }
     } else {
        puts stdout "No"
     }
    
     destroy .md
    
     #
     # Copyright notice with automatic deactivation.
     #
     messagedialog .cr -title "Copyright" -bitmap @dsc.xbm -imagepos n \\
         -text "Copyright 1995 DSC Communications Corporation\\n \\
    	    All rights reserved"
     
     .cr hide Cancel
    
     .cr activate
     after 10000 ".cr deactivate"
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    messagedialog, dialog, dialogshell, shell, widget iwidgets-4.1.1/demos/html/scrolledlistbox.n.html0000644003604700454610000003236207444677035020366 0ustar dgp771diviwidgets::scrolledlistbox - Create and manipulate scrolled listbox widgets

    iwidgets::scrolledlistbox - Create and manipulate scrolled listbox widgets

    SYNOPSIS

    iwidgets::scrolledlistbox pathName ?options?

    INHERITANCE

    itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Scrolledwidget <- iwidgets::Scrolledlistbox

    STANDARD OPTIONS


    cursor
    highlightThickness
    selectForeground

    activeBackground
    exportSelection
    relief
    background
    foreground
    selectBackground
    borderWidth
    highlightColor
    selectBorderWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    selectMode
    listvariable

    See the "listbox" widget manual entry for details on the above associated options.

    activeRelief
    elementBorderwidth
    jump
    troughColor

    See the "scrollbar" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    sticky
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   dblClickCommand
    Class:                  Command
    Command-Line Switch:	-dblclickcommand
    
      Specifies a Tcl command procedure which is called when an item is double clicked. Typically this occurs when mouse button 1 is double clicked over an item. Selection policy does not matter.

    Name:                   height
    Class:                  Height
    Command-Line Switch:	-height
    
      Specifies the height of the scrolled list box as an entire unit. The value may be specified in any of the forms acceptable to Tk_GetPixels. Any additional space needed to display the other components such as labels, margins, and scrollbars force the listbox to be compressed. A value of zero along with the same value for the width causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default height is zero.

    Name:                   hscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-hscrollmode
    
      Specifies the the display mode to be used for the horizontal scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   sbWidth
    Class:                  Width
    Command-Line Switch:	-sbwidth
    
      Specifies the width of the scrollbar in any of the forms acceptable to Tk_GetPixels. The default width is 15 pixels..

    Name:                   scrollMargin
    Class:                  Margin
    Command-Line Switch:	-scrollmargin
    
      Specifies the distance between the listbox and scrollbar in any of the forms acceptable to Tk_GetPixels. The default is 3 pixels.

    Name:                   selectionCommand
    Class:                  Command
    Command-Line Switch:	-selectioncommand
    
      Specifies a Tcl command procedure which is called when an item is selected. Selection policy does not matter.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Specifies one of two states for the listbox: normal or disabled. If the listbox is disabled then selection is ignored. The default is normal.

    Name:                   textBackground
    Class:                  Background
    Command-Line Switch -textbackground
    
      Specifies the background color for the listbox. This allows the background within the listbox to be different from the normal background color.

    Name:                   textFont
    Class:                  Font
    Command-Line Switch:	-textfont
    
      Specifies the font to be used for text in the listbox. This allows for the font associated with text internal to the scrolled listbox to be different than the font for labels.

    Name:                   visibleitems
    Class:                  VisibleItems
    Command-Line Switch:	-visibleitems
    
      Specifies the widthxheight in characters and lines for the listbox. This option is only administered if the width and height options are both set to zero, otherwise they take precedence. The default value is 20x10. With the visibleitems option engaged, geometry constraints are maintained only on the listbox. The size of the other components such as labels, margins, and scroll bars, are additive and independent, effecting the overall size of the scrolled list box. In contrast, should the width and height options have non zero values, they are applied to the scrolled list box as a whole. The listbox is compressed or expanded to maintain the geometry constraints.

    Name:                   vscrollMode
    Class:                  ScrollMode
    Command-Line Switch:	-vscrollmode
    
      Specifies the the display mode to be used for the vertical scrollbar: static, dynamic, or none. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static.

    Name:                   width
    Class:                  Width
    Command-Line Switch:	-width
    
      Specifies the width of the scrolled list box as an entire unit. The value may be specified in any of the forms acceptable to Tk_GetPixels. Any additional space needed to display the other components such as labels, margins, and scrollbars force the listbox to be compressed. A value of zero along with the same value for the height causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default width is zero.

    DESCRIPTION

    The iwidgets::scrolledlistbox command creates a scrolled listbox with additional options to manage horizontal and vertical scrollbars. This includes options to control which scrollbars are displayed and the method, i.e. statically or dynamically.

    METHODS

    The iwidgets::scrolledlistbox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command.

    Many of the widget commands for a scrolledlistbox take as one argument an indicator of which entry of the list box to operate on. These indicators are called indexes and may be specified in any of the following forms:

    number
    Specifies the element as a numerical index, where 0 corresponds to the first element in the listbox.
    active
    Indicates the element that has the location cursor. This element will be displayed with an underline when the listbox has the keyboard focus, and it is specified with the activate widget command.
    anchor
    Indicates the anchor point for the selection, which is set with the selection anchor widget command.
    end
    Indicates the end of the listbox. For some commands this means just after the last element; for other commands it means the last element.
    @x,y
    Indicates the element that covers the point in the listbox window specified by x and y (in pixel coordinates). If no element covers that point, then the closest element to that point is used.
    pattern
    If the index doesn't satisfy one of the above forms then this form is used. Pattern is pattern-matched against the items in the list box, in order from the top down, until a matching entry is found. The rules of Tcl_StringMatch are used.

    The following widget commands are possible for scrolledlistbox widgets:

    ASSOCIATED METHODS

    activate
    get
    nearest
    size
    bbox
    index
    scan
    xview
    curselection
    insert
    see
    yview
    delete
    itemconfigure
    selection

    See the "listbox" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the iwidgets::scrolledlistbox command.
    pathName clear
    Clears the listbox of all items.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the iwidgets::scrolledlistbox command.
    pathName getcurselection
    Returns the contents of the listbox element indicated by the current selection indexes. Short cut version of get and curselection command combination.
    pathName justify direction
    Justifies the list contents via teh scroll bars in one of four directions: left, right, top, or bottom.
    pathName selecteditemcount
    Returns the number of items currently selected in the list.
    pathName sort order
    Sort the current list in any of the forms accepted by Tcl's lsort command. Also accepts either ascending or descending order.

    COMPONENTS

    Name:                   listbox
    Class:                  listbox
    
      The listbox component is the listbox widget. See the "listbox" widget manual entry for details on the listbox component item.

    Name:                   horizsb
    Class:                  Scrollbar
    
      The horizsb component is the horizontal scroll bar. See the "scrollbar" widget manual entry for details on the horizsb component item.

    Name:                   vertsb
    Class:                  Scrollbar
    
      The vertsb component is the vertical scroll bar. See the "scrollbar" widget manual entry for details on the vertsb component item.

    EXAMPLE

     package require Iwidgets 4.0
     option add *textBackground white
     proc selCmd {} {
        puts stdout "[.slb getcurselection]"
     }
     proc defCmd {} {
        puts stdout "Double Click"
        return [selCmd]
     }
     iwidgets::scrolledlistbox .slb -selection single \\
        -vscrollmode static -hscrollmode dynamic -labeltext "List" \\
        -selectioncommand selCmd -dblclickcommand defCmd
     pack .slb -padx 10 -pady 10 -fill both -expand yes
     .slb insert end {Hello {Out There} World} 
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    scrolledlistbox, listbox, widget iwidgets-4.1.1/demos/html/timefield.n.html0000644003604700454610000001351507347202003017070 0ustar dgp771divtimefield - Create and manipulate a time field widget

    timefield - Create and manipulate a time field widget

    SYNOPSIS

    timefield pathName ?options?

    INHERITANCE

    itk::Widget <- LabeledWidget <- timefield

    STANDARD OPTIONS

    background
    foreground
    justify
    borderWidth
    highlightColor
    relief
    cursor
    highlightThickness
    exportSelection
    insertBackground

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   childSitePos
    Class:                  Position
    Command-Line Switch:	-childsitepos
    
      Specifies the position of the child site in the time field: n, s, e, or w. The default is e.

    Name:                   command
    Class:                  Command
    Command-Line Switch:	-command
    
      Specifies a Tcl command to be executed upon detection of a Return key press event.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Specifies one of two states for the timefield: normal or disabled. If the timefield is disabled then input is not accepted. The default is normal.

    Name:                   textBackground
    Class:                  Background
    Command-Line Switch:	-textbackground
    
      Background color for inside textual portion of the entry field. The value may be given in any of the forms acceptable to Tk_GetColor.

    Name:                   textFont
    Class:                  Font
    Command-Line Switch:	-textfont
    
      Name of font to use for display of text in timefield. The value may be given in any of the forms acceptable to Tk_GetFont.


    DESCRIPTION

    The timefield command creates an enhanced text entry widget for the purpose of time entry with various degrees of built-in intelligence.

    METHODS

    The timefield command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for timefield widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the timefield command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the timefield command.
    pathName get ?format?
    Returns the current contents of the timefield in a format of string or as an integer clock value using the -string and -clicks format options respectively. The default is by string. Reference the clock command for more information on obtaining times and their formats.
    pathName isvalid
    Returns a boolean indication of the validity of the currently displayed time value. For example, 12:59:59 is valid whereas 25:59:59 is invalid.
    pathName show time
    Changes the currently displayed time to be that of the time argument. The time may be specified either as a string, an integer clock value or the keyword "now" (the default). Reference the clock command for more information on obtaining times and their formats.

    COMPONENTS

    Name:                   time
    Class:                  Entry
    
      The time component provides the entry field for time input and display. See the "entry" widget manual entry for details on the time component item.

    EXAMPLE

     proc returnCmd {} {
       puts [.tf get]
     }
    
     timefield .tf -command returnCmd
     pack .tf -fill x -expand yes -padx 10 -pady 10
    

    AUTHOR

    John A. Tucker Mark L. Ulferts

    KEYWORDS

    timefield, widget iwidgets-4.1.1/demos/html/radiobox.n.html0000644003604700454610000001456407347201437016754 0ustar dgp771divradiobox - Create and manipulate a radiobox widget

    radiobox - Create and manipulate a radiobox widget

    SYNOPSIS

    radiobox pathName ?options?

    INHERITANCE

    itk::Widget <- labeledframe <- radiobox

    STANDARD OPTIONS

    background
    foreground
    borderWidth
    relief
    cursor
    selectColor
    disabledForeground

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable
    labelMargin

    See the "labeledframe" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   command
    Class:                  Command
    Command-Line Switch:    -command
    
      Specifies a Tcl command procedure to be evaluated following a change in the current radio box selection.


    DESCRIPTION

    The radiobox command creates a radio button box widget capable of adding, inserting, deleting, selecting, and configuring radiobuttons as well as obtaining the currently selected button.

    METHODS

    The radiobox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command.

    Many of the widget commands for the radiobox take as one argument an indicator of which radiobutton of the radiobox to operate on. These indicators are called indexes and allow reference and manipulation of radiobuttons. Radiobox indexes may be specified in any of the following forms:

    number
    Specifies the radiobutton numerically, where 0 corresponds to the top radiobutton of the radiobox.
    end
    Indicates the last radiobutton of the radiobox.
    pattern
    If the index doesn't satisfy one of the above forms then this form is used. Pattern is pattern-matched against the tag of each radiobutton in the radiobox, in order from top to bottom, until a matching entry is found. The rules of Tcl_StringMatch are used.

    WIDGET-SPECIFIC METHODS

    pathName add tag ?option value option value?
    Adds a new radiobutton to the radiobuttond window on the bottom. The command takes additional options which are passed on to the radiobutton as construction arguments. These include the standard Tk radiobutton options. The tag is returned.
    pathName buttonconfigure index ?options?
    This command is similar to the configure command, except that it applies to the options for an individual radiobutton, whereas configureapplies to the options for the radiobox as a whole. Options may have any of the values accepted by the add widget command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for entry index (see Tk_ConfigureInfo for information on the format of this list).
    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the radiobox command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the radiobox command.
    pathName delete index
    Deletes a specified radiobutton given an index.
    pathName deselect index
    Deselects a specified radiobutton given an index.
    pathName flash index
    Flashes a specified radiobutton given an index.
    pathName get
    Returns the tag of the currently selected radiobutton.
    pathName index index
    Returns the numerical index corresponding to index.
    pathName insert index tag ?option value option value ...?
    Same as the add command except that it inserts the new radiobutton just before the one given by index, instead of appending to the end of the radiobox. The option, and value arguments have the same interpretation as for the add widget command.
    pathName select index
    Selects a specified radiobutton given an index.

    EXAMPLE

     radiobox .rb -labeltext Fonts
     .rb add times -text Times
     .rb add helvetica -text Helvetica
     .rb add courier -text Courier
     .rb add symbol -text Symbol
     .rb select courier
    
     pack .rb -padx 10 -pady 10 -fill both -expand yes
    

    AUTHORS

    Michael J. McLennan

    Mark L. Ulferts

    KEYWORDS

    radiobox, widget iwidgets-4.1.1/demos/html/scopedobject.n.html0000644003604700454610000000620506570244362017603 0ustar dgp771divscopedobject - Create and manipulate a scoped \[incr Tcl\] class object.

    scopedobject - Create and manipulate a scoped \[incr Tcl\] class object.

    SYNOPSIS

    scopedobject objName ?options?

    INHERITANCE

    None

    STANDARD OPTIONS

    Name:                   enterscopecommand:
    Command-Line Switch:	-enterscopecommand
    
      Specifies a Tcl command to invoke when an object enters scope (i.e. when it is created..). The default is {}.

    Name:                   enterscopecommand:
    Command-Line Switch:	-enterscopecommand
    
      Specifies a Tcl command to invoke when an object exits scope (i.e. when it is deleted..). The default is {}.


    DESCRIPTION

    The scopedobject command creates a base class for defining Itcl classes which posses scoped behavior like Tcl variables. The objects are only accessible within the procedure in which they are instantiated and are deleted when the procedure returns. This class was designed to be a general purpose base class for supporting scoped incr Tcl classes. The options include the execute a Tcl script command when an object enters and exits its scope.

    METHODS

    The scopedobject command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the object. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for scopedobject objects:

    OBJECT-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the scopedobject command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the object. If no option is specified, returns a list describing all of the available options for pathName. If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given objects option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the scopedobject command.

    EXAMPLE

      The scopedobject was primarily meant to be a base class. The following is an example of usage without inheritance:

      proc scopedobject_demo {} {
        scopedobject #auto \
            -exitscopecommand {puts "enter scopedobject_demo"} \
            -exitscopecommand {puts "exit scopedobject_demo"}
      }
    
      scopedobject_demo
    
    

    AUTHOR

    John A. Tucker

    KEYWORDS

    scopedobject, object iwidgets-4.1.1/demos/html/disjointlistbox.n.html0000644003604700454610000002476007447553303020377 0ustar dgp771diviwidgets::disjointlistbox - Create and manipulate a disjointlistbox widget

    iwidgets::disjointlistbox - Create and manipulate a disjointlistbox widget

    SYNOPSIS

    iwidgets::disjointlistbox pathName ?options?

    INHERITANCE

    itk::Widget <- iwidgets::Disjointlistbox

    STANDARD OPTIONS


    activeForeground
    buttonPlacement
    highlightColor
    activeBackground
    activeRelief
    clientData
    highlightThickness
    selectBorderWidth
    background
    cursor
    disabledForeground
    selectForeground
    borderWidth
    foreground
    elementBorderWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    lhsButtonLabel
    rhsButtonLabel

    See the "button" widget manual entry for details on the above associated options.

    labelFont
    lhsLabelText
    rhsLabelText

    See the "label" widget manual entry for details on the above associated options.

    jump
    troughColor

    See the "scrollbar" widget class manual entry for details on the above associated options.

    textBackground
    textFont
    lhsItems
    rhsItems

    See the "scrolledlistbox" widget manual entry for details on the above associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   buttonPlacement
    Class:                  ButtonPlacement
    Command-Line Switch:	-buttonplacement
    
      Specifies the placement of the insertion and removal buttons relative to the scrolledlistbox widgetsn, bottom, or center. The default is bottom.

    Name:                   lhsLabelText
    Class:                  LabelText
    Command-Line Switch:	-lhslabeltext
    
      Specifies the text for the label of the lhs scrolledlistbox. The default is "Available".

    Name:                   rhsLabelText
    Class:                  LabelText
    Command-Line Switch:	-rhslabeltext
    
      Specifies the text for the label of the rhs scrolledlistbox. The default is "Available".

    Name:                   lhsButtonLabel
    Class:                  LabelText
    Command-Line Switch:	-lhsbuttonlabel
    
      Specifies the text for the button of the lhs scrolledlistbox. The default is "Insert >>".

    Name:                   rhsButtonLabel
    Class:                  LabelText
    Command-Line Switch:	-rhsbuttonlabel
    
      Specifies the text for the button of the rhs scrolledlistbox. The default is "<< Remove".

    Name:                   lhsSortOption
    Class:                  LhsSortOption
    Command-Line Switch:	-lhssortoption
    
      Specifies the sort function to be applied to the lhs scrolledlistbox after items are inserted. Accepts the same sort options as the scrolledlistbox sort method (Tcl's lsort command). If "none" is specified, the inserted items are appended to the end of the list, and no sorting is performed. The default is "increasing".

    Name:                   rhsSortOption
    Class:                  RhsSortOption
    Command-Line Switch:	-rhssortoption
    
      Specifies the sort function to be applied to the rhs scrolledlistbox after items are inserted. Accepts the same sort options as the scrolledlistbox sort method (Tcl's lsort command). If "none" is specified, the inserted items are appended to the end of the list, and no sorting is performed. The default is "increasing".


    DESCRIPTION

    The iwidgets::disjointlistbox command creates a disjoint pair of listboxs similar to the OSF/Motif "Book" printing dialog of the "FrameMaker" program. It is implementation constists of a two Scrolledlistboxs, 2 buttons, and 2 labels. The disjoint behavior of this widget exists between the interaction of the two Scrolledlistboxes with one another. That is, a given instance of a Disjointlistbox will never exist, without the aid of a hack magician, which has Scrolledlistbox widgets with items in common. That means the relationship between the two is maintained similar to that of disjoint sets. Users may transfer items between the two Listbox widgets using the the two buttons. Options exists which include the ability to configure the "items" displayed by the 2 Scrolledlistboxes and to control the placement of the insertion and removal buttons.

    METHODS

    The iwidgets::disjointlistbox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for disjointlistbox widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the iwidgets::disjointlistbox command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the iwidgets::disjointlistbox command.
    pathName setlhs
    Set the current contents of the left-most Scrolledlistbox with the input list of items. Removes all (if any) items from the right-most Scrolledlistbox which exist in the input list option to maintain the disjoint property between the two
    pathName setrhs
    Set the current contents of the right-most Scrolledlistbox with the input list of items. Removes all (if any) items from the left-most Scrolledlistbox which exist in the input list option to maintain the disjoint property between the two
    pathName getlhs
    Returns the current contents of the left-most Scrolledlistbox
    pathName getrhs
    Returns the current contents of the right-most Scrolledlistbox
    pathName insertlhs
    Add the input list of items to the current contents of the left-most Scrolledlistbox. Removes all (if any) items from the right-most Scrolledlistbox which exist in the input list option to maintain the disjoint property between the two
    pathName insertrhs
    Add the input list of items to the current contents of the right-most Scrolledlistbox. Removes all (if any) items from the left-most Scrolledlistbox which exist in the input list option to maintain the disjoint property between the two.

    COMPONENTS

    Name:                   lhs
    Class:                  Scrolledlistbox
    
      The lhs component is the scrolledlistbox for the rhs button. See the "scrolledlistbox" widget manual entry for details on the lhs component item.

    Name:                   rhs
    Class:                  Scrolledlistbox
    
      The rhs component is the scrolledlistbox for the rhs button. See the "scrolledlistbox" widget manual entry for details on the rhs component item.

    Name:                   lhsbutton
    Class:                  utton
    
      The lhsbutton component is the button for users to remove selected items from the lhs Scrolledlistbox. See the "button" widget manual entry for details on the lhs button component.

    Name:                   rhsbutton
    Class:                  Button
    
      The rhsbutton component is the button for users to remove selected items from the rhs Scrolledlistbox. See the "button" widget manual entry for details on the rhs button component.

    Name:                   lhsCount
    Class:                  Label
    
      The lhsCount component is the label for displaying a count of the current items in the Scrolledlistbox. See the "Label" widget manual entry for details on the lhsCount label component.

    Name:                   rhsCount
    Class:                  Label
    
      The rhsCount component is the label for displaying a count of the current items in the Scrolledlistbox. See the "Label" widget manual entry for details on the rhsCount label component.

    EXAMPLE

    package require Iwidgets 4.0
    iwidgets::disjointlistbox .dlb
    pack .dlb -padx 10 -pady 10 -fill both -expand yes 
    

    AUTHOR(S)

    John A. Tucker Anthony Parent

    KEYWORDS

    disjointlistbox, widget iwidgets-4.1.1/demos/html/datefield.n.html0000644003604700454610000001667007375230203017060 0ustar dgp771divdatefield - Create and manipulate a date field widget

    datefield - Create and manipulate a date field widget

    SYNOPSIS

    datefield pathName ?options?

    INHERITANCE

    itk::Widget <- LabeledWidget <- datefield

    STANDARD OPTIONS

    background
    foreground
    justify
    borderWidth
    highlightColor
    relief
    cursor
    highlightThickness
    exportSelection
    insertBackground

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   childSitePos
    Class:                  Position
    Command-Line Switch:	-childsitepos
    
      Specifies the position of the child site in the date field: n, s, e, or w. The default is e.

    Name:                   command
    Class:                  Command
    Command-Line Switch:	-command
    
      Specifies a Tcl command to be executed upon detection of a Return key press event.

    Name:                   gmt
    Class:                  GMT
    Command-Line Switch:	-gmt
    
      Determines whether the date is calculated relative to Greenwich Mean Time. Accepts a boolean value. The default is no.

    Name:                   int
    Class:                  DateFormat
    Command-Line Switch:	-int
    
      Used to specify international date formats. This option must be a boolean value. When set to true, the date is formatted as YYYY-MM-DD. When set to false, it is formatted as MM/DD/YYYY. Note that this format is driven by the 'clock scan' command and that YYYY-MM-DD is supported in Tk 8.4 or later. The default is no.

    Name:                   iq
    Class:                  Iq
    Command-Line Switch:	-iq
    
      Specifies the level of intelligence to be shown in the actions taken by the datefield during the processing of keypress events. Valid settings include high, average, and low. With a high iq,the date prevents the user from typing in an invalid date. For example, if the current date is 05/31/1997 and the user changes the month to 04, then the day will be instantly modified for them to be 30. In addition, leap years are fully taken into account. With average iq, the month is limited to the values of 01-12, but it is possible to type in an invalid day. A setting of low iq instructs the widget to do no validity checking at all during date entry. With both average and low iq levels, it is assumed that the validity will be determined at a later time using the date's isvalid command.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Specifies one of two states for the datefield: normal or disabled. If the datefield is disabled then input is not accepted. The default is normal.

    Name:                   textBackground
    Class:                  Background
    Command-Line Switch:	-textbackground
    
      Background color for inside textual portion of the entry field. The value may be given in any of the forms acceptable to Tk_GetColor.

    Name:                   textFont
    Class:                  Font
    Command-Line Switch:	-textfont
    
      Name of font to use for display of text in datefield. The value may be given in any of the forms acceptable to Tk_GetFont.


    DESCRIPTION

    The datefield command creates an enhanced text entry widget for the purpose of date entry with various degrees of built-in intelligence.

    METHODS

    The datefield command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for datefield widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the datefield command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the datefield command.
    pathName get ?format?
    Returns the current contents of the datefield in a format of string or as an integer clock value using the -string and -clicks format options respectively. The default is by string. Reference the clock command for more information on obtaining dates and their formats.
    pathName isvalid
    Returns a boolean indication of the validity of the currently displayed date value. For example, 03/03/1960 is valid whereas 02/29/1997 is invalid.
    pathName show date
    Changes the currently displayed date to be that of the date argument. The date may be specified either as a string, an integer clock value or the keyword "now". Reference the clock command for more information on obtaining dates and their formats.

    COMPONENTS

    Name:                   date
    Class:                  Entry
    
      The date component provides the entry field for date input and display. See the "entry" widget manual entry for details on the date component item.

    EXAMPLE

     proc returnCmd {} {
       puts [.df get]
     }
    
     datefield .df -command returnCmd
     pack .df -fill x -expand yes -padx 10 -pady 10
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    datefield, widget iwidgets-4.1.1/demos/html/promptdialog.n.html0000644003604700454610000001573407347201422017640 0ustar dgp771divpromptdialog - Create and manipulate a prompt dialog widget

    promptdialog - Create and manipulate a prompt dialog widget

    SYNOPSIS

    promptdialog pathName ?options?

    INHERITANCE

    itk::Toplevel <- dialogshell <- dialog <- promptdialog

    STANDARD OPTIONS

    background
    foreground
    insertBorderWidth
    relief
    borderWidth
    highlightColor
    insertOffTime
    selectBackground
    cursor
    highlightThickness
    insertOnTime
    selectBorderWidth
    exportSelection
    insertBackground
    insertWidth
    selectForeground

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    show

    See the "entry" widget manual entry for details on the above associated options.

    invalid
    textBackground
    textFont
    validate

    See the "entryfield" widget manual entry for details on the above associated options.

    labelFont
    labelPos
    labelText

    See the "labeledwidget" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    buttonBoxPadX
    padY
    buttonBoxPadY
    separator
    buttonBoxPos
    thickness
    padX

    See the "dialogshell" widget manual entry for details on the above inherited options.

    height
    master
    modality
    width

    See the "shell" widget manual entry for details on the above inherited options.

    title

    See the "Toplevel" widget manual entry for details on the above inherited options.


    DESCRIPTION

    The promptdialog command creates a prompt dialog similar to the OSF/Motif standard prompt dialog composite widget. The promptdialog is derived from the dialog class and is composed of a EntryField with commands to manipulate the dialog buttons.

    METHODS

    The promptdialog command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for promptdialog widgets:

    ASSOCIATED METHODS

    delete
    insert
    get
    scan
    icursor
    selection
    index
    xview

    See the "entry" widget manual entry for details on the above associated methods.

    clear

    See the "entryfield" widget manual entry for details on the above associated methods.

    INHERITED METHODS

    add
    invoke
    buttonconfigure
    show
    default
    hide

    See the "buttonbox" widget manual entry for details on the above inherited methods.

    childsite

    See the "dialogshell" widget manual entry for details on the above inherited methods.

    activate
    center
    deactivate

    See the "shell" widget manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the promptdialog command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the promptdialog command.

    COMPONENTS

    Name:                   prompt
    Class:                  Entryfield
    
      The prompt component is the entry field for user input in the prompt dialog. See the "entryfield" widget manual entry for details on the prompt component item.

    EXAMPLE

     option add *textBackground white
    
     promptdialog .pd -modality global -title Password -labeltext Password: -show *
     .pd hide Apply
    
     if {[.pd activate]} {
         puts "Password entered: [.pd get]"
     } else {
         puts "Password prompt cancelled"
     }
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    promptdialog, dialog, dialogshell, shell, widget iwidgets-4.1.1/demos/html/CVS/0000755003604700454610000000000013153526747014452 5ustar dgp771diviwidgets-4.1.1/demos/html/CVS/Repository0000644003604700454610000000002413136711010016524 0ustar dgp771diviwidgets/demos/html iwidgets-4.1.1/demos/html/CVS/Entries0000644003604700454610000000521113153526747016005 0ustar dgp771div/buttonbox.n.html/1.4/Mon Sep 10 18:11:00 2001// /calendar.n.html/1.3/Fri Nov 16 15:28:03 2001// /canvasprintbox.n.html/1.4/Mon Sep 10 18:11:15 2001// /canvasprintdialog.n.html/1.4/Mon Sep 10 18:11:21 2001// /checkbox.n.html/1.1/Mon Aug 24 11:05:18 1998// /combobox.n.html/1.4/Mon Sep 10 18:11:27 2001// /dateentry.n.html/1.3/Fri Nov 16 15:28:03 2001// /datefield.n.html/1.3/Fri Nov 16 15:28:03 2001// /dialog.n.html/1.4/Mon Sep 10 18:11:46 2001// /dialogshell.n.html/1.4/Mon Sep 10 18:11:53 2001// /disjointlistbox.n.html/1.3/Mon Mar 25 07:50:27 2002// /entryfield.n.html/1.4/Mon Sep 10 18:12:06 2001// /extbutton.n.html/1.2/Mon Sep 10 18:12:15 2001// /extfileselectionbox.n.html/1.2/Mon Sep 10 18:12:21 2001// /extfileselectiondialog.n.html/1.2/Mon Sep 10 18:12:28 2001// /feedback.n.html/1.3/Mon Aug 24 12:24:06 1998// /fileselectionbox.n.html/1.4/Mon Sep 10 18:13:25 2001// /fileselectiondialog.n.html/1.4/Mon Sep 10 18:13:33 2001// /finddialog.n.html/1.2/Mon Sep 10 18:13:40 2001// /hierarchy.n.html/1.2/Mon Sep 10 18:13:48 2001// /hyperhelp.n.html/1.3/Mon Aug 24 12:24:09 1998// /iwidgets4.0.0UserCmds.html/1.1/Mon Aug 20 19:48:35 2001// /labeledframe.n.html/1.1/Mon Aug 24 11:05:21 1998// /labeledwidget.n.html/1.4/Mon Sep 10 18:13:54 2001// /mainwindow.n.html/1.2/Mon Sep 10 18:14:04 2001// /menubar.n.html/1.3/Mon Aug 24 12:24:10 1998// /messagebox.n.html/1.2/Mon Sep 10 18:14:11 2001// /messagedialog.n.html/1.4/Mon Sep 10 18:14:18 2001// /notebook.n.html/1.3/Mon Aug 24 12:24:12 1998// /optionmenu.n.html/1.5/Fri Oct 26 15:29:20 2001// /panedwindow.n.html/1.5/Mon Sep 10 18:14:32 2001// /promptdialog.n.html/1.4/Mon Sep 10 18:14:42 2001// /pushbutton.n.html/1.4/Mon Sep 10 18:14:49 2001// /radiobox.n.html/1.4/Mon Sep 10 18:14:55 2001// /scopedobject.n.html/1.1/Mon Aug 24 11:05:22 1998// /scrolledcanvas.n.html/1.4/Mon Sep 10 18:15:03 2001// /scrolledframe.n.html/1.4/Mon Sep 10 18:17:30 2001// /scrolledhtml.n.html/1.4/Tue Sep 10 03:05:25 2002// /scrolledlistbox.n.html/1.5/Sat Mar 16 17:17:17 2002// /scrolledtext.n.html/1.5/Tue Sep 10 03:05:25 2002// /selectionbox.n.html/1.4/Mon Sep 10 18:17:51 2001// /selectiondialog.n.html/1.4/Mon Sep 10 18:17:59 2001// /shell.n.html/1.4/Mon Sep 10 18:18:06 2001// /spindate.n.html/1.4/Mon Sep 10 18:18:14 2001// /spinint.n.html/1.3/Mon Aug 24 12:24:25 1998// /spinner.n.html/1.4/Mon Sep 10 18:18:21 2001// /spintime.n.html/1.4/Mon Sep 10 18:18:28 2001// /tabnotebook.n.html/1.3/Mon Aug 24 12:24:30 1998// /tabset.n.html/1.3/Mon Aug 24 12:24:27 1998// /timeentry.n.html/1.2/Mon Sep 10 18:18:35 2001// /timefield.n.html/1.2/Mon Sep 10 18:18:43 2001// /toolbar.n.html/1.4/Thu Nov 18 23:47:10 1999// /watch.n.html/1.2/Mon Sep 10 18:18:50 2001// D iwidgets-4.1.1/demos/html/CVS/Root0000644003604700454610000000006613136711010015276 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/demos/html/tabset.n.html0000644003604700454610000005170306570255573016432 0ustar dgp771divtabset - create and manipulate tabs as as set

    tabset - create and manipulate tabs as as set

    SYNOPSIS

    tabset pathName ?options?

    INHERITANCE

    itk::Widget <- tabset

    STANDARD OPTIONS

    background
    foreground
    width
    font
    selectForeground
    selectBackground
    disabledForeground
    cursor
    height

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   angle
    Class:                  Angle
    Command-Line Switch:	-angle
    
      Specifes the angle of slope from the inner edge to the outer edge of the tab. An angle of 0 specifies square tabs. Valid ranges are 0 to 45 degrees inclusive. Default is 15 degrees. If tabPos is e or w, this option is ignored.

    Name:                   backdrop
    Class:                  Backdrop
    Command-Line Switch:	-backdrop
    
      Specifies a background color to use when filling in the area behind the tabs.

    Name:                   bevelAmount
    Class:                  BevelAmount
    Command-Line Switch:	-bevelamount
    
      Specifes the size of tab corners. A value of 0 with angle set to 0 results in square tabs. A bevelAmount of 4, means that the tab will be drawn with angled corners that cut in 4 pixels from the edge of the tab. The default is 0.

    Name:                   command
    Class:                  Command
    Command-Line Switch:	-command
    Specifes the prefix of a Tcl command to invoke to change the view in the 
    widget associated with the tabset. When a user selects a tab, a Tcl command 
    is invoked. The actual command consists of this option followed by a space 
    and a number. The number is the numerical index of the tab that has been 
    selected.
    

    Name: equalTabs Class: EqualTabs Command-Line Switch: -equaltabs
      Specifies whether to force tabs to be equal sized or not. A value of true means constrain tabs to be equal sized. A value of false allows each tab to size based on the text label size. The value may have any of the forms accepted by the Tcl_GetBoolean, such as true, false, 0, 1, yes, or no.
      For horizontally positioned tabs (tabPos is either s or n), true forces all tabs to be equal width (the width being equal to the longest label plus any padX specified). Horizontal tabs are always equal in height.
      For vertically positioned tabs (tabPos is either w or e), true forces all tabs to be equal height (the height being equal to the height of the label with the largest font). Vertically oriented tabs are always equal in width.

    Name:                   gap
    Class:                  Gap
    Command-Line Switch:	-gap
    
      Specifies the amount of pixel space to place between each tab. Value may be any pixel offset value. In addition, a special keyword overlap can be used as the value to achieve a standard overlap of tabs. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   margin
    Class:                  Margin
    Command-Line Switch:	-margin
    
      Specifies the amount of space to place between the outside edge of the tabset and the outside edge of its tabs. If tabPos is s, this is the amount of space between the bottom edge of the tabset and the bottom edge of the set of tabs. If tabPos is n, this is the amount of space between the top edge of the tabset and the top edge of the set of tabs. If tabPos is e, this is the amount of space between the right edge of the tabset and the right edge of the set of tabs. If tabPos is w, this is the amount of space between the left edge of the tabset and the left edge of the set of tabs. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   padX
    Class:                  PadX
    Command-Line Switch:	-padx
    
      Specifies a non-negative value indicating how much extra space to request for a tab around its label in the X-direction. When computing how large a window it needs, the tab will add this amount to the width it would normally need The tab will end up with extra internal space to the left and right of its text label. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   padY
    Class:                  PadY
    Command-Line Switch:	-pady
    
      Specifies a non-negative value indicating how much extra space to request for a tab around its label in the Y-direction. When computing how large a window it needs, the tab will add this amount to the height it would normally need The tab will end up with extra internal space to the top and bottom of its text label. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   raiseSelect
    Class:                  RaiseSelect
    Command-Line Switch:	-raiseselect
    
      Specifes whether to slightly raise the selected tab from the rest of the tabs. The selected tab is drawn 2 pixels closer to the outside edge of the tabset than the unselected tabs. A value of true says to raise selected tabs, a value of false turns this off. The default is false. The value may have any of the forms accepted by the Tcl_GetBoolean, such as true, false, 0, 1, yes, or no.

    Name:                   start
    Class:                  Start
    Command-Line Switch:	-start
    
      Specifies the amount of space to place between the left or top edge of the tabset and the starting edge of its tabs. For horizontally positioned tabs, this is the amount of space between the left edge of the tabset and the left edge of the first tab. For vertically positioned tabs, this is the amount of space between the top of the tabset and the top of the first tab. This value may change if the user performs a MButton-2 scroll on the tabs. This value may have any of the forms acceptable to Tk_GetPixels.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Sets the active state of the tabset. Specifying normal allows all tabs to be selectable. Specifying disabled disables the tabset causing all tabs to be drawn in the disabledForeground color.

    Name:                   tabBorders
    Class:                  TabBorders
    Command-Line Switch:	-tabborders
    
      Specifies whether to draw the borders of tabs that are not selected. Specifying true (the default) draws these borders, specifying false draws only the border around the selected tab. The value may have any of the forms accepted by the Tcl_GetBoolean, such as true, false, 0, 1, yes, or no.

    Name:                   tabPos
    Class:                  TabPos
    Command-Line Switch:	-tabpos
    
      Specifies the location of the set of tabs in relation to another widget. Must be n, s, e, or w. Defaults to s. North tabs open downward, South tabs open upward. West tabs open to the right, east tabs open to the left.

    DESCRIPTION

    The tabset command creates a new window (given by the pathName argument) and makes it into a tabset widget. Additional options, described above may be specified on the command line or in the option database to configure aspects of the tabset such as its colors, font, and text. The tabset command returns its pathName argument. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist.

    A tabset is a widget that contains a set of Tab buttons. It displays these tabs in a row or column depending on it tabpos. When a tab is clicked on, it becomes the only tab in the tab set that is selected. All other tabs are deselected. The Tcl command prefix associated with this tab (through the command tab configure option) is invoked with the tab index number appended to its argument list. This allows the tabset to control another widget such as a Notebook.

    TABS

    Tabs are drawn to appear attached to another widget. The tabset draws an edge boundary along one of its edges. This edge is known as the attachment edge. This edge location is dependent on the value of tabPos. For example, if tabPos is s, the attachment edge wil be on the top side of the tabset (in order to attach to the bottom or south side of its attached widget). The selected tab is draw with a 3d relief to appear above the other tabs. This selected tab "opens" toward attachment edge.

    Tabs can be controlled in their location along the edges, the angle that tab sides are drawn with, gap between tabs, starting margin of tabs, internal padding around labels in a tab, the font, and its text or bitmap.

    WIDGET-SPECIFIC METHODS

    The tabset command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    option and the args determine the exact behavior of the command.

    Many of the widget commands for a tabset take as one argument an indicator of which tab of the tabset to operate on. These indicators are called indexes and may be specified in any of the following forms:

    number
    Specifies the tab numerically, where 0 corresponds to the first tab in the tab set, 1 to the second, and so on.
    select
    Specifies the currently selected tab's index. If no tab is currently selected, the value -1 is returned.
    end
    Specifes the last tab in the tabset's index. If the tabset is empty this will return -1.
    pattern
    If the index doesn't satisfy any of the above forms, then this form is used. Pattern is pattern-matched against the label of each tab in the tabset, in order from the first to the last tab, until a matching entry is found. The rules of Tcl_StringMatch are used.

    '............................................................................. The following commands are possible for tabset widgets:

      pathName add ?option value option value ...?
      Add a new tab at the end of the tabset. Returns the child site pathName. If additional arguments are present, they specify any of the following options:
        -angle value
        Specifes the angle of slope from the inner edge to the outer edge of the tab. An angle of 0 specifies square tabs. Valid ranges are 0 to 45 degrees inclusive. Default is 15 degrees. If this option is specified as an empty string (the default), then the angle option for the overall tabset is used.
        -background value
        Specifies a background color to use for displaying tabs when they are in their normal state (unselected). If this option is specified as an empty string (the default), then the background option for the overall tabset is used.
        -bevelamount value
        Specifes the size of tab corners. A value of 0 with angle set to 0 results in square tabs. A bevelAmount of 4, means that the tab will be drawn with angled corners that cut in 4 pixels from the edge of the tab. The default is 0. This is generally only set at the tabset configuration level. Tabs normally will want to share the same bevelAmount.
        -bitmap value
        If label is a non-empty string, specifies a bitmap to display in the tab. Bitmap may be of any of the forms accepted by Tk_GetBitmap.
        -disabledforeground value
        Specifies a foreground color to use for displaying tab labels when tabs are in their disable state. If this option is specified as an empty string (the default), then the disabledforeground option for the overall tabset is used.
        -font value
        Specifies the font to use when drawing the label on a tab. If this option is specified as an empty string then the font option for the overall tabset is used.
        -foreground value
        Specifies a foreground color to use for displaying tab labels when tabs are in their normal unselected state. If this option is specified as an empty string (the default), then the foreground option for the overall tabset is used.
        -image value
        If label is a non-empty string, specifies an image to display in the tab. Image must have been created with the image create command. Typically, if the image option is specified then it overrides other options that specify a bitmap or textual value to display in the widget; the image option may be reset to an empty string to re-enable a bitmap or text display.
        -label value
        Specifies a text string to be placed in the tabs label. If this value is set, the bitmap option is overridden and this option is used instead. This label serves as an additional identifier used to reference the tab. This label may be used for the index value in widget commands.
        -selectbackground value
        Specifies a background color to use for displaying the selected tab. If this option is specified as an empty string (the default), then the selectBackground option for the overall tabset is used.
        -selectforeground value
        Specifies a foreground color to use for displaying the selected tab. If this option is specified as an empty string (the default), then the selectForeground option for the overall tabset is used.
        -padx value
        Specifies a non-negative value indicating how much extra space to request for a tab around its label in the X-direction. When computing how large a window it needs, the tab will add this amount to the width it would normally need The tab will end up with extra internal space to the left and right of its text label. This value may have any of the forms acceptable to Tk_GetPixels. If this option is specified as an empty string (the default), then the padX option for the overall tabset is used
        -pady value
        Specifies a non-negative value indicating how much extra space to request for a tab around its label in the Y-direction. When computing how large a window it needs, the tab will add this amount to the height it would normally need The tab will end up with extra internal space to the top and bottom of its text label. This value may have any of the forms acceptable to Tk_GetPixels. If this option is specified as an empty string (the default), then the padY option for the overall tabset is used
        -state value
        Sets the state of the tab. Specifying normal allows this tab to be selectable. Specifying disabled disables the this tab causing its tab label to be drawn in the disabledForeground color. The tab will not respond to events until the state is set back to normal.
      pathName configure ?option? ?value option value ...?
      Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the tabset command.
      pathName delete index1 ?index2?
      Delete all of the tabs between index1 and index2 inclusive. If index2 is omitted then it defaults to index1. Returns an empty string.
      pathName index index
      Returns the numerical index corresponding to index.
      pathName insert index ?option value option value ...?
      Insert a new tab in the tabset before the tab specified by index. The additional arguments are the same as for the add command. Returns the tab's pathName.
      pathName next
      Advances the selected tab to the next tab (order is determined by insertion order). If the currently selected tab is the last tab in the tabset, the selection wraps around to the first tab. It behaves as if the user selected the next tab.
      pathName tabconfigure index ?option? ?value?
      This command is similar to the configure command, except that it applies to the options for an individual tab, whereas configure applies to the options for the tabset as a whole. Options may have any of the values accepted by the add widget command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for tab index (see Tk_ConfigureInfo for information on the format of this list).
      pathName prev
      Moves the selected tab to the previous tab (order is determined by insertion order). If the currently selected tab is the first tab in the tabset, the selection wraps around to the last tab in the tabset. It behaves as if the user selected the previous tab.
      pathName select index
      Selects the tab specified by index as the currently selected tab. It behaves as if the user selected the new tab.

      EXAMPLE

      Following is an example that creates a tabset with two tabs and a list box that the tabset controls. In addition selecting an item from the list also selects the corresponding tab.


      a
      how
      item
      list
      from
      callback.
      item
      selection
      .l
      .l

        proc
        to
        #
        pixel
        list..
        y
        whichItem
        .ts

      a
      items
      #
      1
      selectTab
      -selectmode
      .l
      .l
      .l
      pack
      <ButtonPress-1>
      }
      Create
      its
      selectItem
      labels
      (one
      .ts
      add
      add
      select
      -fill


    proc
    to
    #
    given
    the
    proc
    }
    clear
    selection
    see
    #
    that
    select
    given
    coordinate
    proc
    }
    [.l
    select

      listbox
      (one
      and
      press
      procedure.
      single
      insert
      insert
      selection
      .l
      {

    a
    -command
    #
    to
    and
    -command
    -label
    -label
    0
    x
    #
    that
    select
    from
    an
    tabset
    selectItem
    {
    [.l
    set
    $item
    Define
    knows
    a
    a
    from
    selectTab
    {
    nearest
    $whichItem
    #
    with
    and
    bind
    to
    listbox
    -exportselection
    end
    end
    set
    bind
    selectTab

      tabset,
      to
      Add
      the
      two).
      selectItem
      1
      2
      pack
      -expand
    Define
    knows
    an
    a
    index
    -command
    {
    .l
    curselection]
    $item
    }
    a
    how
    tab
    y
    the
    {
    set
    $y]
    }
    Create
    two
    two)
    button
    the
    .l
    false
    one
    two
    0
    .l
    %y
    #
    set
    call
    two
    tabset
    tabset
    .ts
    .ts
    .ts
    .ts
    no

    AUTHOR

    Bill W. Scott

    KEYWORDS

    tab tabset notebook tabnotebook iwidgets-4.1.1/demos/html/buttonbox.n.html0000644003604700454610000001605507347201064017162 0ustar dgp771divbuttonbox - Create and manipulate a manager widget for buttons

    buttonbox - Create and manipulate a manager widget for buttons

    SYNOPSIS

    buttonbox pathName ?options?

    INHERITANCE

    itk::Widget <- buttonbox

    STANDARD OPTIONS

    background
    cursor

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   orient
    Class:                  Orient
    Command-Line Switch:	-orient
    
      Orientation of the button box: horizontal or vertical. The default is horizontal.

    Name:                   padX
    Class:                  PadX
    Command-Line Switch:	-padx
    
      Specifies a non-negative padding distance to leave between the button group and the outer edge of the button box in the x direction. The value may be given in any of the forms acceptable to Tk_GetPixels. The default is 5 pixels.

    Name:                   padY
    Class:                  PadY
    Command-Line Switch:	-pady
    
      Specifies a non-negative padding distance to leave between the button group and the outer edge of the button box in the y direction. The value may be given in any of the forms acceptable to Tk_GetPixels. The default is 5 pixels.


    DESCRIPTION

    The buttonbox command creates a manager widget for controlling buttons. The button box also supports the display and invocation of a default button. The button box can be configured either horizontally or vertically.

    METHODS

    The buttonbox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command.

    Many of the widget commands for the buttonbox take as one argument an indicator of which button of the button box to operate on. These indicators are called indexes and allow reference and manipulation of buttons regardless of their current map state. buttonbox indexes may be specified in any of the following forms:

    number
    Specifies the button numerically, where 0 corresponds to the left/top-most button of the button box.
    end
    Indicates the right/bottom-most button of the button box.
    default
    Indicates the current default button of the button box. This is the button with the default ring displayed.
    pattern
    If the index doesn't satisfy one of the above forms then this form is used. Pattern is pattern-matched against the tag of each button in the button box, in order from left/top to right/left, until a matching entry is found. The rules of Tcl_StringMatch are used.

    WIDGET-SPECIFIC METHODS

    pathName add tag args
    Add a button distinguished by tag to the end of the button box. If additional arguments are present they specify options to be applied to the button. See PushButton for information on the options available.
    pathName buttonconfigure index ?options?
    This command is similar to the configure command, except that it applies to the options for an individual button, whereas configure applies to the options for the button box as a whole. Options may have any of the values accepted by the PushButton command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for entry index (see Tk_ConfigureInfo for information on the format of this list).
    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the buttonbox command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the buttonbox command.
    pathName default index
    Sets the default button to the button given by index. This causes the default ring to appear arround the specified button.
    pathName delete index
    Deletes the button given by index from the button box.
    pathName hide index
    Hides the button denoted by index. This doesn't remove the button permanently, just inhibits its display.
    pathName index index
    Returns the numerical index corresponding to index.
    pathName insert index tag ?option value option value ...?
    Same as the add command except that it inserts the new button just before the one given by index, instead of appending to the end of the button box. The option, and value arguments have the same interpretation as for the add widget command.
    pathName invoke ?index?
    Invoke the command associated with a button. If no arguments are given then the current default button is invoked, otherwise the argument is expected to be a button index.
    pathName show index
    Display a previously hidden button denoted by index.

    EXAMPLE

     buttonbox .bb
    
     .bb add Yes -text Yes -command "puts Yes" 
     .bb add No -text No -command "puts No"
     .bb add Maybe -text Maybe -command "puts Maybe"
     .bb default Yes
    
     pack .bb -expand yes -fill both
    

    AUTHORS

    Bret A. Schuhmacher

    Mark L. Ulferts

    KEYWORDS

    buttonbox, pushbutton, button, widget iwidgets-4.1.1/demos/html/canvasprintbox.n.html0000644003604700454610000002274607347201103020175 0ustar dgp771divcanvasprintbox - Create and manipulate a canvas print box widget

    canvasprintbox - Create and manipulate a canvas print box widget

    SYNOPSIS

    canvasprintbox pathName ?options?

    INHERITANCE

    itk::Widget <- Canvasprintbox

    STANDARD OPTIONS

    activeBackground
    foreground
    insertBackground
    insertWidth
    selectBackground
    background
    highlightBackground
    insertBorderWidth
    relief
    selectBorderWidth
    borderWidth
    highlightColor
    insertOffTime
    repeatDelay
    selectForeground
    cursor
    highlightThickness
    insertOnTime
    repeatInterval

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    WIDGET-SPECIFIC OPTIONS

    Name:                   filename
    Class:                  FileName
    Command-Line Switch:	-filename
    
      The file to write the postscript output to (Only when output is set to "file"). If posterizing is turned on and hpagecnt and/or vpagecnt is more than 1, x.y is appended to the filename where x is the horizontal page number and y the vertical page number.

    Name:                   hpagecnt
    Class:                  PageCnt
    Command-Line Switch:	-hpagecnt
    
      Is used in combination with posterize to determine over how many pages the output should be distributed. This attribute specifies how many pages should be used horizontaly. Any change to this attribute will automatically update the "stamp". Defaults to 1.

    Name:                   orient
    Class:                  Orient
    Command-Line Switch:	-orient
    
      Determines the orientation of the output to the printer (or file). It can take the value "portrait" or "landscape" (default). Changes to this attribute will be reflected immediately in the "stamp". Defaults to "landscape" but will be changed automaticaly to the value deemed appropiate for the current canvas. Setting this attribute when the canvasprintbox is first constructed (instead of using the "configure" method) will turn off the auto adjustment of this attribute.

    Name:                   output
    Class:                  Output
    Command-Line Switch:	-output
    
      Specifies where the postscript output should go: to the printer or to a file. Can take on the values "printer" or "file". The corresponding entry-widget will reflect the contents of either the printcmd attribute or the filename attribute. Defaults to "printer".

    Name:                   pageSize
    Class:                  PageSize
    Command-Line Switch:	-pagesize
    
      The pagesize the printer supports. Changes to this attribute will be reflected immediately in the "stamp". Defaults to "a4".

    Name:                   posterize
    Class:                  Posterize
    Command-Line Switch:	-posterize
    
      Indicates if posterizing is turned on or not. Posterizing the output means that it is possible to distribute the output over more than one page. This way it is possible to print a canvas/region which is larger than the specified pagesize without stretching. If used in combination with stretching it can be used to "blow up" the contents of a canvas to as large as size as you want (See attributes: hpagecnt and vpagecnt). Any change to this attribute will automatically update the "stamp". Defaults to 0.

    Name:                   printCmd
    Class:                  PrintCmd
    Command-Line Switch:	-printcmd
    
      The command to execute when printing the postscript output. The command will get the postscript directed to its standard input (Only when output is set to "printer"). Defaults to "lpr".

    Name:                   printRegion
    Class:                  PrintRegion
    Command-Line Switch:	-printregion
    
      A list of four coordinates specifying which part of the canvas to print. An empty list means that the canvas' entire scrollregion should be printed. Any change to this attribute will automatically update the "stamp". Defaults to an empty list.

    Name:                   stretch
    Class:                  Stretch
    Command-Line Switch:	-stretch
    
      Determines if the output should be stretched to fill the page (as defined by the attribute pagesize) as large as possible. The aspect-ratio of the output will be retained and the output will never fall outside of the boundaries of the page. Defaults to 0 but will be changed automaticaly to the value deemed appropiate for the current canvas. Setting this attribute when the canvasprintbox is first constructed (instead of using the "configure" method) will turn off the auto adjustment of this attribute.

    Name:                   vPageCnt
    Class:                  PageCnt
    Command-Line Switch:	-vpagecnt
    
      Is used in combination with "posterize" to determine over how many pages the output should be distributed. This attribute specifies how many pages should be used verticaly. Any change to this attribute will automatically update the "stamp". Defaults to 1.


    DESCRIPTION

    Implements a print box for printing the contents of a canvas widget to a printer or a file. It is possible to specify page orientation, the number of pages to print the image on and if the output should be stretched to fit the page. Options exist to control the appearance and actions of the widget.

    METHODS

    The canvasprintbox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for canvasprintbox widgets:

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the canvasprintbox command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the canvasprintbox command.
    pathName getoutput
    Returns the value of the printercmd or filename option depending on the current setting of output.
    pathName print
    Perfrom the actual printing of the canvas using the current settings of all the attributes. Returns a boolean indicating wether the printing was successful or not.
    pathName refresh
    Retrieves the current value for all edit fields and updates the stamp accordingly. Is useful for Apply-buttons.
    pathName setcanvas canvas
    This is used to set the canvas that has to be printed. A stamp-sized copy will automatically be drawn to show how the output would look with the current settings.
    pathName stop
    Stops the drawing of the "stamp". I'm currently unable to detect when a Canvasprintbox gets destroyed or withdrawn. It's therefore advised that you perform a stop before you do something like that.

    COMPONENTS

    Name:                   prtflentry
    Class:                  Entry
    
      The prtflentry component is the entry field for user input of the filename or printer command (depending on the value of output).

    Name:                   hpcnt
    Class:                  Entry
    
      The hpcnt component is the entry field for user input of the number of pages to use horizontaly when posterize is turned on.
    Name:                   vpcnt
    Class:                  Entry
    
      The vpcnt component is the entry field for user input of the number of pages to use verticaly when posterize is turned on.

    EXAMPLE

    canvasprintbox .fsb -orient landscape -stretch 1
    pack .fsb -padx 10 -pady 10 -fill both -expand yes 
    

    AUTHOR

    Tako Schotanus

    KEYWORDS

    canvasprintbox, widget iwidgets-4.1.1/demos/html/spindate.n.html0000644003604700454610000002370707347201746016756 0ustar dgp771divspindate - Create and manipulate time spinner widgets

    spindate - Create and manipulate time spinner widgets

    SYNOPSIS

    spindate pathName ?options?

    INHERITANCE

    itk::Widget <- Spindate

    STANDARD OPTIONS

    background
    cursor
    foreground
    relief

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    textBackground
    textFont

    See the "entryfield" manual entry for details on the above associated options.

    labelFont
    labelMargin

    See the "labeledwidget" manual entry for details on the above associated options.

    arrowOrient
    repeatDelay
    repeatInterval

    See the "spinner" manual entry for details on the above associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   dateMargin
    Class:                  Margin
    Command-Line Switch:	-datemargin
    
      Specifies the margin space between the month, day, and year spinners is any of the forms accpetable to Tcl_GetPixels. The default is 1 pixel.

    Name:                   dayLabel
    Class:                  Text
    Command-Line Switch:	-daylabel
    
      Specifies the text of the label for the day spinner. The default is "Day".

    Name:                   dayOn
    Class:                  dayOn
    Command-Line Switch:	-dayon
    
      Specifies whether or not to display the day spinner in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   dayWidth
    Class:                  Width
    Command-Line Switch:	-daywidth
    
      Specifies the width of the day spinner in any of the forms acceptable to Tcl_GetPixels. The default is 3 pixels.

    Name:                   labelPos
    Class:                  Position
    Command-Line Switch:	-labelpos
    
      Specifies the position of the label along the sides of the various spinners: n, e, s, or w. The default is w.

    Name:                   monthFormat
    Class:                  MonthFormat
    Command-Line Switch:	-monthformat
    
      Specifies the format of month display, integer (1-12) or brief strings (Jan - Dec), or full strings (January - December).

    Name:                   monthLabel
    Class:                  Text
    Command-Line Switch:	-monthlabel
    
      Specifies the text of the label for the month spinner. The default is "Month".

    Name:                   monthOn
    Class:                  monthOn
    Command-Line Switch:	-monthon
    
      Specifies whether or not to display the month spinner in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   monthWidth
    Class:                  Width
    Command-Line Switch:	-monthwidth
    
      Specifies the width of the month spinner in any of the forms acceptable to Tcl_GetPixels. The default is 3 pixels.

    Name:                   orient
    Class:                  Orient
    Command-Line Switch:	-orient
    
      Specifies the orientation of the month, day, and year spinners: vertical or horizontal. The default is horizontal.

    Name:                   yearDigits
    Class:                  YearDigits
    Command-Line Switch:	-yeardigits
    
      Specifies the number of digits to be displayed as the value for the year spinner. The valid values are 2 and 4. The default is 2.

    Name:                   yearLabel
    Class:                  Text
    Command-Line Switch:	-yearlabel
    
      Specifies the text of the label for the year spinner. The default is "Year"

    Name:                   yearOn
    Class:                  yearOn
    Command-Line Switch:	-yearon
    
      Specifies whether or not to display the year spinner in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   yearWidth
    Class:                  Width
    Command-Line Switch:	-yearwidth
    
      Specifies the width of the year spinner in any of the forms acceptable to Tcl_GetPixels. The default is 3 pixels.



    spindate
    set
    use
    entry.
    an
    year


    creates
    command
    pathName.
    be
    various
    widget.
    following
    pathName
    ...
    ?
    the
    exact
    command.
    are
    widgets:



    current
    configuration
    option.
    any
    accepted
    command.
    pathName
    option

    the
    the
    option
    a
    of
    for
    for
    format
    If
    with
    the
    list
    named
    will
    the
    the
    no
    If
    option-value
    then
    the
    to
    value(s);
    the
    empty
    have
    values
    spindate


    current
    spindate
    format
    as
    value
    and
    respectively.
    by
    clock
    information
    and

    date
    the
    to
    the
    date
    either
    an
    or
    Reference
    for
    obtaining
    formats.

    Spinner

    DESCRIPTION


    command
    of
    in
    The
    month,
    spinner
    The
    a
    whose
    This
    used
    operations
    It
    general
    option

    args
    behavior
    The
    possible

    WIDGET-SPECIFIC
    pathName

    value
    option
    Option
    of
    by

    configure
    value
    Query
    configuration
    widget.
    is
    list
    the
    pathName
    information
    of
    option
    no
    command
    describing
    option
    be
    corresponding
    value
    option
    one
    pairs
    the
    given
    have
    in
    command
    string.
    any
    accepted
    command.
    pathName

    contents
    widget
    of
    an
    using
    -clicks
    The
    string.
    command
    on
    their


    currently
    be
    date
    may
    as
    integer
    the
    the
    more
    dates

    Name:


    creates
    spinners
    date
    set
    day,
    widget.
    spindate
    new
    name
    command
    to
    on
    has
    form:
    ?arg
    Option
    determine
    of
    following
    for
    METHODS
    cget
    Returns
    of
    given
    may
    the
    the


    ?option?
    ...
    ?
    or
    options
    If
    specified,
    describing
    available
    (see
    on
    this
    is
    value,
    returns
    the
    (this
    identical
    sublist
    returned
    is
    or
    are
    command
    widget
    the
    this
    returns
    Option
    of
    by

    get
    Returns
    of
    in
    string
    integer
    the
    format
    default
    Reference
    for
    obtaining
    formats.
    pathName

    displayed
    that
    argument.
    be
    a
    clock
    keyword
    clock
    information
    and

    COMPONENTS


    month
    The
    a
    for
    value
    includes
    and

    METHODS


    command
    Tcl
    is
    may
    invoke
    the
    the

    arg
    and
    the
    the
    commands
    spindate

    option
    the
    the
    by
    have
    values
    spindate

    ?value

    modify
    of
    no
    returns
    all
    options
    Tk_ConfigureInfo
    the
    list).
    specified
    then
    a
    one
    list
    to
    of
    if
    specified).
    more
    specified,
    modifies
    option(s)
    given
    case
    an
    may
    the
    the

    ?format?
    the
    the
    a
    or
    clock
    -string
    options
    is
    the
    more
    dates

    show
    Changes
    date
    of
    The
    specified
    string,
    value
    "now".
    command
    on
    their


    Class:

      The month spinner component is the month spinner of the date spinner. See the Spinner widget manual entry for details on the month component item.

    Name:                   day
    Class:                  Spinint
    
      The day spinner component is the day spinner of the date spinner. See the SpinInt widget manual entry for details on the day component item.

    Name:                   year
    Class:                  Spinint
    
      The year spinner component is the year spinner of the date spinner. See the SpinInt widget manual entry for details on the year component item.

    EXAMPLE

    spindate .sd
    pack .sd -padx 10 -pady 10
    

    AUTHORS

    Sue Yockey

    Mark L. Ulferts

    KEYWORDS

    spindate, spinint, spinner, entryfield, entry, widget iwidgets-4.1.1/demos/html/selectiondialog.n.html0000644003604700454610000001636507347201727020315 0ustar dgp771divselectiondialog - Create and manipulate a selection dialog widget

    selectiondialog - Create and manipulate a selection dialog widget

    SYNOPSIS

    selectiondialog pathName ?options?

    INHERITANCE

    itk::Toplevel <- Shell <- Dialogshell <- Dialog <- Selectiondialog

    STANDARD OPTIONS

    activeBackground
    exportSelection
    insertBackground
    insertWidth
    background
    foreground
    insertBorderWidth
    selectBackground
    borderWidth
    highlightColor
    insertOffTime
    selectBorderWidth
    cursor
    highlightThickness
    insertOnTime
    selectForeground

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    textBackground
    textFont

    See the "entryfield" widget manual entry for details on the above associated options.

    labelFont

    See the "labeledwidget" widget manual entry for details on the above associated options.

    activeRelief
    elementBorderWidth
    jump
    troughColor

    See the "scrollbar" widget class manual entry for details on the above associated options.

    textBackground
    textFont

    See the "scrolledlistbox" widget class manual entry for details on the above associated options. childsitepos itemsCommand itemsLabel itemsOn selectionCommand selectionLabel selectionOn

    See the "selectionbox" widget manual entry for details on the above associated options.

    INHERITED OPTIONS

    buttonBoxPadX
    padY
    buttonBoxPadY
    separator
    buttonBoxPos
    thickness
    padX

    See the "dialogshell" widget manual entry for details on the above inherited options.

    height
    master
    modality
    width

    See the "shell" widget manual entry for details on the above inherited options.

    title

    See the "Toplevel" widget manual entry for details on the above inherited options.


    DESCRIPTION

    The selectiondialog command creates a selection box similar to the OSF/Motif standard selection dialog composite widget. The selectiondialog is derived from the Dialog class and is composed of a selectionbox with commands to manipulate the dialog buttons.

    METHODS

    The selectiondialog command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for selectiondialog widgets:

    ASSOCIATED METHODS

    childsite
    selectitem
    clear
    get
    insert

    See the "selectionbox" widget manual entry for details on the above associated methods.

    curselection
    scan
    delete
    selection
    index
    size
    nearest

    See the "listbox" widget manual entry for details on the above associated methods.

    INHERITED METHODS

    add
    invoke
    buttonconfigure
    show
    default
    hide

    See the "buttonbox" widget manual entry for details on the above inherited methods.

    activate
    center
    deactivate

    See the "shell" widget manual entry for details on the above inherited methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the selectiondialog command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the selectiondialog command.

    COMPONENTS

    Name:                   selectionbox
    Class:                  Selectionbox
    
      The selectionbox component is the selection box for the selection dialog. See the "selectionbox" widget manual entry for details on the selectionbox component item.

    EXAMPLE

     selectiondialog .sd 
     .sd activate
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    selectiondialog, selectionbox, dialog, dialogshell, shell, widget iwidgets-4.1.1/demos/html/combobox.n.html0000644003604700454610000003543207347201117016745 0ustar dgp771divcombobox - Create and manipulate combination box widgets

    combobox - Create and manipulate combination box widgets

    SYNOPSIS

    combobox pathName ?options?

    INHERITANCE

    itk::Widget <- LabeledWidget <- Entryfield <- Combobox

    STANDARD OPTIONS


    cursor
    highlightColor
    insertWidth
    insertWidth
    selectBorderWidth

    justify
    highlightThickness
    insertBackground
    insertBorderWidth
    textVariable
    background
    exportSelection
    relief
    insertOffTime
    selectForeground

    borderWidth
    foreground
    width
    insertOnTime
    selectBackground

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    hscrollmode
    textBackground
    textFont
    vscrollmode

    See the "scrolledlistbox" manual entry for details on the above inherited options.

    show

    See the "entry" manual entry for details on the above inherited option.

    INHERITED OPTIONS

    childSitePos
    invalid
    command
    textBackground
    fixed
    textFont
    focusCommand
    validate

    See the "entryfield" class manual entry for details on the inherited options.

    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable
    labelMargin

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   arrowRelief
    Class:                  Relief
    Command-Line Switch:	-arrowrelief
    
      Specifies the relief style to use for a dropdown Combobox's arrow button in a normal (not depressed) state. Acceptable values are raised, sunken, flat, ridge, and groove. Sunken is discouraged as this is the relief used to indicate a depressed state. This option has no effect on simple Comboboxes. The default is raised.

    Name:                   completion
    Class:                  Completion
    Command-Line Switch:	-completion
    
      Boolean given in any of the forms acceptable to Tcl_GetBoolean which determines whether insertions into the entry field, whether from the keyboard or programmatically via the insert method, are automatically completed with the first matching item from the listbox. The default is true.

    Name:                   dropdown
    Class:                  Dropdown
    Command-Line Switch:	-dropdown
    
      Boolean describing the Combobox layout style given in any of the forms acceptable to Tcl_GetBoolean. If true, the Combobox will be a dropdown style widget which displays an entry field and an arrow button which when activated will pop up a scrollable list of items. If false, a simple Combobox style will be used which has an entry field and a scrollable list beneath it which is always visible. Both styles allow an optional label for the entry field area. The default is true.

    Name:                   editable
    Class:                  Editable
    Command-Line Switch:	-editable
    
      Boolean describing whether or not the text entry area is editable by the user. If true the user can add items to the combobox by entering text into the entry area and then pressing Return. If false, the list of items is non-editable and can only be changed by calling the insert or delete methods. (The value in the entry field can still be modified by selecting from the list.) Given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   grab
    Class:                  Grab
    Command-Line Switch:	-grab
    
      This option sets the grab scope for the appearance of the listbox in drop-down comboboxes. It can be either global or local. The default is local.

    Name:                   listHeight
    Class:                  Height
    Command-Line Switch:	-listheight
    
      Height of the listbox specified in any of the forms acceptable to Tk_GetPixels. The default is 150 pixels.

    Name:                   margin
    Class:                  Margin
    Command-Line Switch:	-margin
    
      Specifies the width in pixels between the entry component and the arrow button for a dropdown Combobox given in any of the forms acceptable to Tk_GetPixels. This option has no effect on a simple Combobox. The default is 1.

    Name:                   popupCursor
    Class:                  Cursor
    Command-Line Switch:	-popupcursor
    
      Specifies the cursor to be used for dropdown style listboxes. The value may have any of the forms acceptable to Tk_GetCursor. The default is arrow.

    Name:                   selectionCommand
    Class:                  SelectionCommand
    Command-Line Switch:	-selectioncommand
    
      Specifies a Tcl command procedure which is called when an item in the listbox area is selected. The item will be selected in the list, the listbox will be removed if it is a dropdown Combobox, and the selected item's text will be inserted into the entry field before the -selectioncommand proc is called. The default is {}.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Specifies the overall state of the Combobox megawidget. Can be either normal or disabled. If the Combobox is disabled, no text can be entered into the entry field, no selection can be made in the listbox, and the arrowBtn component is disabled. The default is normal.

    Name:                   unique
    Class:                  Unique
    Command-Line Switch:	-unique
    
      Boolean describing whether or not duplicate items are allowed in the combobox list. If true, then duplicates are not allowed to be inserted. If false, a duplicate entry causes selection of the item. Given in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    DESCRIPTION

    The combobox command creates an enhanced entry field widget with an optional associated label and a scrollable list. When an item is selected in the list area of a Combobox, its value is then displayed in the entry field text area. Functionally similar to an Optionmenu, the Combobox adds (optional) list scrolling and (optional) item editing and inserting capabilities.

    There are two basic styles of Comboboxes (determined by the -dropdown option): dropdown and simple. The dropdown style adds an arrow button to the right of the entry field which when activated will pop up (and down) the scrolled listbox beneath the entry field. The simple (non-dropdown) Combobox permanently displays the listbox beneath the entry field and has no arrow button. Either style allows an optional entry field label.

    METHODS

    The combobox command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for Combobox widgets:

    ASSOCIATED METHODS

    icursor
    scan

    See the "entry" manual entries for details on the above associated methods.

    curselection
    xview
    index
    yview
    see
    size

    See the "listbox" manual entries for details on the above associated methods.

    getcurselection
    justify
    sort

    See the "scrolledlistbox" manual entries for details on the above associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the combobox command.
    pathName clear ?component?
    Clears the contents from one or both components. Valid component values are list, or entry. With no component specified, both are cleared.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the combobox command.
    pathName delete component first ?last?
    Delete one or more elements from a given component, list or entry. If a list item to be removed is currently selected (displayed in the entry field area), the entry field will be cleared.
    pathName get ?index?
    With no arguments, returns the contents currently in the entry field area. With a single argument, returns the contents of the listbox item at the indicated index.
    pathName insert component index element ?element element ...?
    Insert one or more new elements into the given component, list or entry, just before the element given by index.
    pathName selection option first ?last?
    Adjust the selection within the listbox component and updates the contents of the entry field component to the value of the selected item. See the "listbox" manual entry for more details on parameter options.

    COMPONENTS

    Name:                   entry
    Class:                  Entry
    
      Text entry area where the current selection is displayed. If the Combobox is editable and its state is normal, the user can edit the contents of this item.

    Name:                   list
    Class:                  Scrolledlistbox
    
      Scrollable list which stores all the items which the user can select from. For dropdown Comboboxes, this component is hidden until the user pops it up by pressing on the arrow button to the right of the entry component. For simple Comboboxes this component is always visible just beneath the entry component.

    DEFAULT BINDINGS

    The Combobox generally has the same bindings as its primary component items - the Scrolledlistbox and Entryfield. However it also adds these:

    [1] Button-1 mouse press on the arrow key of a dropdown Combobox causes the list to be popped up. If the combobox is non-editable, a Button-1 press on the entry field area will also pop up the list.

    [2] Button-1 mouse press anywhere on the display removes a dropdown listbox which has been popped up, unless the keypress is upon one of the Combobox scrollbars which scrolls the list. If it is pressed upon an item in the list area, that item will be selected before the list is removed.

    [3] Button-3 mouse press on the arrow key of a dropdown Combobox causes the next item to be selected. Shift-Button-3 causes the previous item to be selected.

    [4] Escape keypress removes a dropdown list which has been popped up.

    [5] The <space> and <Return> keystrokes select the current item. They also remove the popped up list for dropdown comboboxes.

    [6] Up and Down arrow keypresses from the entry field and arrow button component cause the previous and next items in the listbox to be selected respectively. Ctl-P and Ctl-N are similarly mapped for emacs emulation.

    [7] Entry field and arrow button component Shift-Up and Shift-Down arrow keys pop up and down the listbox of a dropdown Combobox. The arrow button component also maps <Return> and <space> similarly.

    EXAMPLE

     proc selectCmd {} {
        puts stdout "[.cb2 getcurselection]"
     }
    
     #
     # Non-editable Dropdown Combobox
     #
     combobox .cb1 -labeltext Month: \\
         -selectioncommand {puts "selected: [.cb1 getcurselection]"} \\
         -editable false -listheight 185 -popupcursor hand1 
     .cb1 insert list end Jan Feb Mar Apr May June Jul Aug Sept Oct Nov Dec
    	
     #
     # Editable Dropdown Combobox
     #
     combobox .cb2 -labeltext "Operating System:" -selectioncommand selectCmd
     .cb2 insert list end Linux HP-UX SunOS Solaris Irix
     .cb2 insert entry end L
    
     pack .cb1 -padx 10 -pady 10 -fill x 
     pack .cb2 -padx 10 -pady 10 -fill x
    
    

    ORIGINAL AUTHOR

    John S. Sigler

    CURRENT MAINTAINER

    Mitch Gorman (logain@erols.com)

    KEYWORDS

    combobox, entryfield, scrolledlistbox, itk::Widget, entry, listbox, widget, iwidgets iwidgets-4.1.1/demos/html/menubar.n.html0000644003604700454610000005555306570255552016605 0ustar dgp771divmenubar - Create and manipulate menubar menu widgets

    menubar - Create and manipulate menubar menu widgets

    SYNOPSIS

    menubar pathName ?options?

    INHERITANCE

    itk::Widget <- menubar

    STANDARD OPTIONS

    activeBackground
    activeBorderWidth
    activeForeground
    anchor
    foreground
    borderWidth
    cursor
    disabledForeground
    font
    padX
    highlightBackground
    highligthThickness
    highlightColor
    justify
    padY
    relief
    wrapLength
    background

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   helpVariable
    Class:                  HelpVariable
    Command-Line Switch:	-helpvariable
    
      Specifies the global variable to update whenever the mouse is in motion over a menu entry. This global variable is updated with the current value of the active menu entry's helpStr. Other widgets can "watch" this variable with the trace command, or as is the case with entry or label widgets, they can set their textVariable to the same global variable. This allows for a simple implementation of a help status bar. Whenever the mouse leaves a menu entry, the helpVariable is set to the empty string {}. The mainwindow(1) associates its helpstatus and its menubar in this fashion.

    Name:                   menuButtons
    Class:                  MenuButtons
    Command-Line Switch:	-menubuttons
    
      The menuButton option is a string which specifies the arrangement of menubuttons on the menubar frame. Each menubutton entry is delimited by the newline character.

      -menubuttons
      -text
      -text
      -text

    {
    File
    Edit
    Options
    menubar
    menubutton
    menubutton
    menubutton
    }
    .mb
    file
    edit
    options
      specifies that three menubuttons will be added to the menubar (file, edit, options). Each entry is translated into an add command call.
      The menuButtons option can accept embedded variables, commands, and backslash quoting. Embedded variables and commands must be enclosed in curly braces ({}) to ensure proper parsing of the substituted values.

    DESCRIPTION

    The menubar command creates a new window (given by the pathName argument) and makes it into a menubar menu widget. Additional options, described above may be specified on the command line or in the option database to configure aspects of the menubar such as its colors and font. The menubar command returns its pathName argument. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist.

    A menubar is a widget that simplifies the task of creating menu hierarchies. It encapsulates a frame widget, as well as menubuttons, menus, and menu entries. The menubar allows menus to be specified and referenced in a more consistent manner than using Tk to build menus directly. Menubar allows a menu tree to be expressed in a hierachical "language". The menubar accepts a menuButtons option that allows a list of menubuttons to be added to the menubar. In turn, each menubutton accepts a menu option that specifies a list of menu entries to be added to the menubutton's menu. Cascade entries also accept the menu option for specifying a list of menu entries to be added to the cascade's menu. Additionally, the menubar allows each component of the menubar system to be referenced by a simple menuPathName syntax. The menubar also extends the set of options for menu entries to include a helpStr option.

    MENU PATH NAMES

    A menuPathName is a series of component names separated by the `.' character. Each menubar component can be referenced via these menuPathNames. menuPathNames are similar to widget pathNames in Tk. Some correspond directly to a widget pathName (components of type menu or menubutton), others correspond to a menu entry type. Every widget and entry in a menubar can be referenced with the menuPathName naming convention. A menubar can have four types of components:

      frame. A menubar holds exactly one frame which manages menubuttons. The frame is always signified by the `.' character as the path name.
      menubutton. A menubutton corresponds directly to a Tk menubutton. See menubutton(n).
      menu. A menu is attached to a menubutton and corresponds directly to Tk's menu widget. A menu is always signified by the menuPathName ending with the keyword menu. See menu(n).
      entry. An entry corresponds directly to Tk's menu widget entries. Menus consist of a column of one line entries. Entries may be of type: command, checkbutton, radiobutton, separator, or cascade. For a complete description of these types see the discussion on ENTRIES in menu(n).

    The suffix of a menuPathName may have the form of:

    tkWidgetName
    Specifies the name of the component, either a frame, menubutton, menu, or an entry. This is the normal naming of widgets. For example, .file references a menubutton named file.

    The menuPathName is a series of segment names, each separated by the '.' character. Segment names may be one of the following forms:

    number
    Specifies the index of the the component. For menubuttons, 0 corresponds to the left-most menubutton of the menu bar frame. As an example, .1 would correspond to the second menubutton on the menu bar frame.
      For entries, 0 corresponds to the top-most entry of the menu. For example, .file.0 would correspond to the first entry on the menu attached to the menubutton named file.
    end
    Specifes the last component. For menubuttons, it specifies the right-most entry of the menu bar frame. For menu entries, it specifies the bottom-most entry of the menu.
    last
    Same as end.

    Finally, menu components always end with the menu keyword. These components are automatically created via the -menu option on menubuttons and cascades or via the add or insert commands.

    menu
    Specifes the menu pane that is associated with the given menubutton prefix. For example, .file.menu specifies the menu pane attached to the .file menubutton.

    For example, the path .file.new specifies the entry named new on the menu associated with the file menubutton located on the menu bar. The path .file.menu specifies the menu pane associated with the menubutton .file. The path .last specifies the last menu on the menu bar. The path .0.last would specify the first menu (file) and the last entry on that menu (quit), yielding .file.quit. As a restriction, the last name segment of menuPathName cannot be one of the keywords last, menu, end, nor may it be a numeric value (integer).

    WIDGET-SPECIFIC METHODS

    The menubar command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    option and the args determine the exact behavior of the command.

    In addition, many of the widget commands for menubar take as one argument a path name to a menu component. These path names are called menuPathNames. See the discussion on MENUBAR PATH NAMES above.

    The following commands are possible for menubar widgets:

    pathName add type menuPathName ?option value option value?
    Adds either a menu to the menu bar or a menu entry to a menu pane.
      If additional arguments are present, they specify options available to component type entry. See the man pages for menu(1) in the section on ENTRIES. If type is one of cascade, checkbutton, command, radiobutton, or separator it adds a new entry to the bottom of the menu denoted by the prefix of menuPathName. If additonal arguments are present, they specify options available to menu entry widgets. In addition, the helpStr option is added by the menubar widget to all components of type entry.
      -helpstr value
      Specifes the string to associate with the entry. When the mouse moves over the associated entry, the variable denoted by helpVariable is set. Another widget can bind to the helpVariable and thus display status help.
      If the type of the component added is menubutton or cascade, a menubutton or cascade is added to the menubar. If additional arguments are present, they specify options available to menubutton or cascade widgets. In addition, the menu option is added by the menubar widget to all menubutton and cascade widgets.
      -menu menuSpec
      This is only valid for menuPathNames of type menubutton or cascade. Specifes an option set and/or a set of entries to place on a menu and associate with the menubutton or cascade. The option keyword allows the menu widget to be configured. Each item in the menuSpec is treated as add commands (each with the possibility of having other -menu options). In this way a menu can be recursively built.
        The last segment of menuPathName cannot be one of the keywords last, menu, end. Additionally, it may not be a number. However the menuPathName may be referenced in this manner (see discussion of COMPONENT PATH NAMES).
        Note that the same curly brace quoting rules apply to -menu option strings as did to -menubuttons option strings. See the earlier discussion on umenubuttons in the "WIDGET-SPECIFIC OPTIONS" section.
    pathName cget option
    Returns the current value of the configuration option given by option.
    pathName configure ?options value option value?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string.
    pathName delete menuPathName ?menuPathName2?
    If menuPathName is of component type Menubutton or Menu, delete operates on menus. If menuPathName is of component type Entry, delete operates on menu entries. This command deletes all components between menuPathName and menuPathName2 inclusive. If menuPathName2 is omitted then it defaults to menuPathName. Returns an empty string. If menuPathName is of type menubar, then all menus and the menu bar frame will be destroyed. In this case menuPathName2 is ignored.
    pathName index menuPathName
    If menuPathName is of type menubutton or menu, it returns the position of the menu/menubutton on the menubar frame. If menuPathName is of type command, separator, radiobutton, checkbutton, or cascade, it returns the menu widget's numerical index for the entry corresponding to menuPathName. If path is not found or the path is equal to ".", a value of -1 is returned.
    pathName insert menuPathName type name ?option value?
    Insert a new component named name before the component specified by menuPathName.
      If menuPathName is of type Menubutton or Menu, the new component inserted is of type Menu and given the name name. In this case valid option value pairs are those accepted by menubuttons.
      If menuPathName is of type Entry, the new component inserted is of type entry and given the name name. In this case, valid option value pairs are those accepted by menu entries. Name cannot be one of the keywords last, menu, end. Additionally, it may not be a number. However the menuPathName may be referenced in this manner (see discussion of COMPONENT PATH NAMES).
    pathName invoke menuPathName
    Invoke the action of the menu entry denoted by menuPathName. See the sections on the individual entries in the menu(1) man pages. If the menu entry is disabled then nothing happens. If the entry has a command associated with it then the result of that command is returned as the result of the invoke widget command. Otherwise the result is an empty string. If menuPathName is not a menu entry, an error is issued.
    pathName menucget menuPathName option
    Returns the current value of the configuration option given by option. The component type of menuPathName determines the valid available options.
    pathName menuconfigure menuPathName ?option value?
    Query or modify the configuration options of the componet of the menubar specified by menuPathName. If no option is specified, returns a list describing all of the available options for menuPathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. The component type of menuPathName determines the valid available options.
    pathName path ?mode? pattern
    Returns a fully formed menuPathName that matches pattern. If no match is found it returns -1. The mode argument indicates how the search is to be matched against pattern and it must have one of the following values:
      -glob
      Pattern is a glob-style pattern which is matched against each component path using the same rules as the string match command.
      -regexp
      Pattern is treated as a regular expression and matched against each component of the menuPathName using the same rules as the regexp command. The default mode is -glob.
    pathName type menuPathName
    Returns the type of the component specified by menuPathName. For menu entries, this is the type argument passed to the add/insert widget command when the entry was created, such as command or separator. Othewise it is either a menubutton or a menu.
    pathName yposition menuPathName
    Returns a decimal string giving the y-coordinate within the menu window of the topmost pixel in the entry specified by menuPathName. If the menuPathName is not an entry, an error is issued.

    EXAMPLE ONE: USING GRAMMAR

    The following example creates a menubar with "File", "Edit", "Options" menubuttons. Each of these menubuttons has an associated menu. In turn the File menu has menu entries, as well as the Edit menu and the Options menu. The Options menu is a tearoff menu with selectColor (for radiobuttons) set to blue. In addition, the Options menu has a cascade titled More, with several menu entries attached to it as well. An entry widget is provided to display help status.

    menubar .mb -helpvariable helpVar -menubuttons { menubutton file -text File -menu { options -tearoff false command new -label New \\ -helpstr "Open new document" \\ -command {puts NEW} command close -label Close \\ -helpstr "Close current document" \\ -command {puts CLOSE} separator sep1 command exit -label Exit -command {exit} \\ -helpstr "Exit application" } menubutton edit -text Edit -menu { options -tearoff false command undo -label Undo -underline 0 \\ -helpstr "Undo last command" \\ -command {puts UNDO} separator sep2 command cut -label Cut -underline 1 \\ -helpstr "Cut selection to clipboard" \\ -command {puts CUT} command copy -label Copy -underline 1 \\ -helpstr "Copy selection to clipboard" \\ -command {puts COPY} command paste -label Paste -underline 0 \\ -helpstr "Paste clipboard contents" \\ -command {puts PASTE} } menubutton options -text Options -menu { options -tearoff false -selectcolor blue radiobutton byName -variable viewMode \\ -value NAME -label "by Name" \\ -helpstr "View files by name order" \\ -command {puts NAME} radiobutton byDate -variable viewMode \\ -value DATE -label "by Date" \\ -helpstr "View files by date order" \\ -command {puts DATE} cascade prefs -label Preferences -menu { command colors -label Colors... \\ -helpstr "Change text colors" \\ -command {puts COLORS} command fonts -label Fonts... \\ -helpstr "Change text font" \\ -command {puts FONT} } } }
    frame
    -height
    -textvariable
    -anchor
    -expand
    -fill
    pack
    -fill

    EXAMPLE
    Alternatively
    could
    using
    configure
    menubar
    -menubuttons
    -text
    command
    command
    separator
    -label
    edit


    .edit.undo
    0
    .edit.sep2
    .edit.cut
    1
    .edit.copy
    1
    .edit.paste
    0
    .options
    {
    viewMode
    -label
    byDate
    -value
    Date"
    cascade
    -menu
    -label
    -label
    .mb
    nw
    yes
    option
    the
    evaluated
    the
    positive
    is
    string
    commands,
    However,
    into
    single
    can
    enclosing
    curly
    ensures,
    value
    will
    as
    and
    The
    this

    Menu"
    menubar
    menubutton
    menubutton
    -menu
    \\
    -variable
    -onvalue
    0
    -text

    .fr
    300
    helpVar
    nw
    yes
    both
    .ef
    x
    TWO:
    the
    be
    the
    methods:
    .mb
    {
    File
    new
    close
    sep1
    Quit
    -text
    .mb
    -label
    .mb
    .mb
    -label
    .mb
    -label
    .mb
    -label
    .mb
    -text
    radiobutton
    \\
    "by
    -variable
    DATE
    }
    .options.prefs
    {
    Colors...
    Fonts...
    -side
    -fill

    CAVEATS


    as
    -menu
    by
    subst
    side
    that
    may
    and/or
    substitutions
    more
    word.
    be
    candidate
    braces
    for
    for
    still
    a
    not
    following
    case:
    set
    set
    .mb
    file
    edit
    {
    -label
    {[scope
    1
    }
    Options
    -width
    entry
    pack
    -fill
    pack
    -expand
    -anchor
    -expand
    USING
    same
    created
    add


    .mb
    menubutton
    -menu
    -label
    -label
    command
    }
    Edit
    add
    Undo
    add
    add
    Cut
    add
    Copy
    add
    Paste
    add
    Options
    byName
    -value
    Name"
    viewMode
    -label
    .mb
    -label
    command
    command
    }
    left
    x
    The
    well
    option
    menubar
    command.
    of
    the
    contain
    backslash
    might
    than
    These
    protected
    substitutions
    ({}).
    example,
    an
    be
    single
    multiple
    example

    fileMenuName
    var
    -menubuttons
    -text
    -text
    checkbutton
    Check
    var]}
    \\
    menubutton
    }
    300
    .ef
    .mb
    x
    .fr
    yes
    sw
    yes
    METHODS
    menu
    by
    and

    configure
    file
    {
    New
    Close
    quit
    menubutton
    }
    command
    -underline
    separator
    command
    -underline
    command
    -underline
    command
    -underline
    menubutton
    -menu
    -variable
    NAME
    radiobutton
    \\
    "by
    add
    Preferences
    colors
    fonts
    pack
    -anchor
    -expand
    -menubuttons
    as
    is
    with
    The
    this
    option
    variables,
    substitutions.
    expand
    a
    expansions
    by
    in
    This
    a
    option
    treated
    value
    values.
    illustrates

      "File
      {}
      {
      {$fileMenuName}
      Edit
      check
      \\
      \\
      -offvalue
      options
      The variable fileMenuName will expand to "File Menu" when the subst command is used on the menubutton specification. In addition, the [scope...] command will expand to @scope :: var. By enclosing these inside {} they stay as a single value. Note that only {} work for this. [list...], "" etc. will not protect these from the subst command.

    ACKNOWLEDGMENTS

    Bret Schumaker

      1994 - Early work on a menubar widget.

    Mark Ulferts, Mark Harrison, John Sigler

      Invaluable feedback on grammar and usability of the menubar widget

    AUTHOR

    Bill W. Scott

    KEYWORDS

    frame, menu, menubutton, entries, help iwidgets-4.1.1/demos/html/labeledwidget.n.html0000644003604700454610000001554407347201342017733 0ustar dgp771divlabeledwidget - Create and manipulate a labeled widget

    labeledwidget - Create and manipulate a labeled widget

    SYNOPSIS

    labeledwidget pathName ?options?

    INHERITANCE

    itk::Widget <- labeledwidget

    STANDARD OPTIONS

    background
    cursor
    foreground

    See the "options" manual entry for details on the standard options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   disabledForeground
    Class:                  DisabledForeground
    Command-Line Switch:	-disabledforeground
    
      Specifies the foreground to be used when the state is disabled.

    Name:                   labelBitmap
    Class:                  Bitmap
    Command-Line Switch:	-labelbitmap
    
      Specifies a bitmap to display in the widget, in any of the forms acceptable to Tk_GetBitmap. This option overrides the labeltext option.

    Name:                   labelFont
    Class:                  Font
    Command-Line Switch:	-labelfont
    
      Specifies the font to be used for the label.

    Name:                   labelImage
    Class:                  Image
    Command-Line Switch:	-labelimage
    
      Specifies a image to be used as the label. The image may be any of the values created by the image create command. This option overrides both the labelbitmap and labeletext options.

    Name:                   labelMargin
    Class:                  Margin
    Command-Line Switch:	-labelmargin
    
      Specifies the distance between the childsite and label in any of the forms acceptable to Tk_GetPixels. The default is 2 pixel.

    Name:                   labelPos
    Class:                  Position
    Command-Line Switch:	-labelpos
    
      Specifies the position of the label along the side of the childsite: nw, n, ne, sw, s, se, en, e, es, wn, w, or ws. The default is w.

    Name:                   labelText
    Class:                  Text
    Command-Line Switch:	-labeltext
    
      Specifies the text of the label around the childsite.

    Name:                   labelVariable
    Class:                  Variable
    Command-Line Switch:	-labelvariable
    
      Specifies the text variable of the label around the childsite.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Specifies one of two states for the label: normal or disabled. If the label is disabled then it is displayed in a disabled foreground color. The default is normal.


    DESCRIPTION

    The labeledwidget command creates a labeled widget which contains a label and child site. The child site is a frame which can filled with any widget via a derived class or though the use of the childsite method. This class was designed to be a general purpose base class for supporting the combination of label widget and a childsite. The options include the ability to position the label around the childsite widget, modify the font and margin, and control the display of the labels.

    METHODS

    The labeledwidget command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for labeledwidget widgets:

    WIDGET-SPECIFIC METHODS

    pathName childsite
    Return the path name of the child site.
    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the labeledwidget command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the labeledwidget command.

    STATIC METHODS

    Labeledwidget::alignlabels widget ?widget ...?
    The alignlabels procedure takes a list of widgets derived from the Labeledwidget class and uses the label margin to make each widget have the same total space for the combination of label and margin. The net effect is to left align the labels. Generally, this method is only useful with a label position of w, which is the default.

    COMPONENTS

    Name:                   label
    Class:                  label
    
      The label component provides the label for the labeled widget. See the "label" widget manual entry for details on the label component item.

    Name:                   lwchildsite
    Class:                  frame
    
      The lwchildsite component is the user child site for the labeled widget. See the "frame" widget manual entry for details on the lwchildsite component item.

    EXAMPLE

      The labeledwidget was primarily meant to be a base class. The ScrolledListBox and EntryField are good examples of derived classes of the labeledwidget class. In order to provide equal support for composite classes, the 'childsite' methods also exists. The following is an example of 'childsite' method usage.

     labeledwidget .lw -labeltext "Canvas Widget" -labelpos s
     pack .lw -fill both -expand yes -padx 10 -pady 10
    
     set cw [canvas [.lw childsite].c -relief raised -width 200 -height 200]
     pack $cw -padx 10 -pady 10
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    labeledwidget, widget iwidgets-4.1.1/demos/html/entryfield.n.html0000644003604700454610000002250307347201166017301 0ustar dgp771diventryfield - Create and manipulate a entry field widget

    entryfield - Create and manipulate a entry field widget

    SYNOPSIS

    entryfield pathName ?options?

    INHERITANCE

    itk::Widget <- LabeledWidget <- entryfield

    STANDARD OPTIONS

    background
    foreground
    insertBorderWidth
    justify
    selectForeground
    borderWidth
    highlightColor
    insertOffTime
    relief
    textVariable
    cursor
    highlightThickness
    insertOnTime
    selectBackground
    width
    exportSelection
    insertBackground
    insertWidth
    selectBorderWidth

    See the "options" manual entry for details on the standard options.

    ASSOCIATED OPTIONS

    show
    state

    See the "entry" manual entry for details on the associated options.

    INHERITED OPTIONS

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" class manual entry for details on the inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   childSitePos
    Class:                  Position
    Command-Line Switch:	-childsitepos
    
      Specifies the position of the child site in the entry field: n, s, e, or w. The default is e.

    Name:                   command
    Class:                  Command
    Command-Line Switch:	-command
    
      Specifies a Tcl command to be executed upon detection of a Return key press event.

    Name:                   fixed
    Class:                  Fixed
    Command-Line Switch:	-fixed
    
      Restrict entry to the specified number of chars. A value of 0, which is the default, denotes no limit. The value is the maximum number of chars the user may type into the field, regardles of field width. For example, if the field width is set to 20 and the fixed value is 10, the user will only be able to type 10 characters into the field which is 20 characters long.

    Name:                   focusCommand
    Class:                  Command
    Command-Line Switch:	-focuscommand
    
      Specifies a Tcl command to be executed upon reception of focus.

    Name:                   invalid
    Class:                  Command
    Command-Line Switch:	-invalid
    
      Specifies a Tcl command to be executed upon determination of invalid input. The default is bell.

    Name:                   textBackground
    Class:                  Background
    Command-Line Switch:	-textbackground
    
      Background color for inside textual portion of the entry field. The value may be given in any of the forms acceptable to Tk_GetColor.

    Name:                   textFont
    Class:                  Font
    Command-Line Switch:	-textfont
    
      Name of font to use for display of text in entryfield. The value may be given in any of the forms acceptable to Tk_GetFont.

    Name:                   validate
    Class:                  Command
    Command-Line Switch:	-validate
    
      The validate option allows specification of a validation mechanism. Standard character validation such as numeric, alphabetic, integer, hexidecimal, real, and alphanumeric can be handled through the use of keywords. Should more extensive validation be necessary, the value may contain the name of a command script. The script should return a boolean value. True for valid, false for invalid. If false is returned, then the procedure associated with the invalid option will be invoked. If the validation script contains any % characters, then the script will not be executed directly. Instead, a new script will be generated by replacing each %, and the character following it, with information from the entryfield. The replacement depends on the character following the %, as defined in the list below.
    %c
    Replaced with the current input character.
    %P
    Replaced with the contents of the entryfield modified to include the latest keystoke. This is equivalent to peeking at the future contents, enabling rejection prior to the update.
    %S
    Replaced with the current contents of the entryfield prior to the latest keystroke being added.
    %W
    Replaced with the entryfield widget pathname.


    DESCRIPTION

    The entryfield command creates an enhanced text entry widget with an optional associated label. Addtional options support validation and establishing a upper limit on the number of characters which may be entered in the field.

    METHODS

    The entryfield command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for entryfield widgets:

    ASSOCIATED METHODS

    delete
    insert
    get
    scan
    icursor
    selection
    index
    xview

    See the "entry" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the entryfield command.
    pathName childsite
    Returns the path name of the child site.
    pathName clear
    Clear entry widget
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the entryfield command.

    COMPONENTS

    Name:                   efchildsite
    Class:                  frame
    
      The efchildsite component is the user child site for the entry field. See the "frame" widget manual entry for details on the efchildsite component item.

    Name:                   entry
    Class:                  entry
    
      The entry component provides the entry field for user text input and display. See the "entry" widget manual entry for details on the entry component item.

    EXAMPLE

     option add *textBackground white
     
     proc returnCmd {} {
         puts stdout "Return Pressed"
     }
     
     proc invalidCmd {} {
         puts stdout "Alphabetic contents invalid"
     }
     
     entryfield .ef -command returnCmd
     
     entryfield .fef -labeltext "Fixed:" -fixed 10 -width 12
     
     entryfield .nef -labeltext "Numeric:" -validate numeric -width 12
     
     entryfield .aef -labeltext "Alphabetic:" \\
        -validate alphabetic -width 12 -invalid invalidCmd
     
     entryfield .pef -labeltext "Password:" \\
        -show \267 -width 12 -command returnCmd
     
     Labeledwidget::alignlabels .ef .fef .nef .aef .pef
    
     pack .ef -fill x -expand yes -padx 10 -pady 5
     pack .fef -fill x -expand yes -padx 10 -pady 5
     pack .nef -fill x -expand yes -padx 10 -pady 5
     pack .aef -fill x -expand yes -padx 10 -pady 5
     pack .pef -fill x -expand yes -padx 10 -pady 5
    

    AUTHORS

    Sue Yockey

    Mark L. Ulferts

    KEYWORDS

    entryfield, widget iwidgets-4.1.1/demos/html/dialogshell.n.html0000644003604700454610000001572207347201151017422 0ustar dgp771divdialogshell - Create and manipulate a dialog shell widget

    dialogshell - Create and manipulate a dialog shell widget

    SYNOPSIS

    dialogshell pathName ?options?

    INHERITANCE

    itk::Toplevel <- Shell <- Dialogshell

    STANDARD OPTIONS

    background
    cursor
    foreground

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    height
    master
    modality
    width

    See the "shell" manual entry for details on the above inherited options.

    title

    See the "Toplevel" manual entry for details on the above inherited options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   buttonBoxPadX
    Class:                  Pad
    Command-Line Switch:	-buttonboxpadx
    
      Specifies a non-negative padding distance to leave between the button group and the outer edge of the button box in the x direction. The value may be given in any of the forms accpetable to Tk_GetPixels. The default is 5 pixels.

    Name:                   buttonBoxPadY
    Class:                  Pad
    Command-Line Switch:	-buttonboxpady
    
      Specifies a non-negative padding distance to leave between the button group and the outer edge of the button box in the y direction. The value may be given in any of the forms accpetable to Tk_GetPixels. The default is 5 pixels.

    Name:                   buttonBoxPos
    Class:                  Position
    Command-Line Switch:	-buttonboxpos
    
      Attaches buttons to the given side of the dialog: n, s, e or w. The default is s.

    Name:                   padX
    Class:                  Pad
    Command-Line Switch:	-padx
    
      Specifies a padding distance for the childsite in the X-direction in any of the forms acceptable to Tk_GetPixels. The default is 10.

    Name:                   padY
    Class:                  Pad
    Command-Line Switch:	-pady
    
      Specifies a padding distance for the childsite in the Y-direction in any of the forms acceptable to Tk_GetPixels. The default is 10.

    Name:                   separator
    Class:                  Separator
    Command-Line Switch:	-separator
    
      Specifies whether a line is drawn to separate the buttons from the dialog box contents in any of the forms acceptable to Tcl_GetBoolean. The default is true.

    Name:                   thickness
    Class:                  Thickness
    Command-Line Switch:	-thickness
    
      Specifies the thickness of the separator in any of the forms acceptable to Tk_GetPixels. The default is 3 pixels.

    DESCRIPTION

    The dialogshell command creates a dialog shell which is a top level widget composed of a button box, separator, and child site area. The class also has methods to control button construction.

    METHODS

    The dialogshell command create a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for dialogshell widgets:

    INHERITED METHODS

    activate
    center
    deactivate

    See the "shell" manual entry for details on the above inherited methods.

    ASSOCIATED METHODS

    add
    hide
    show
    buttonconfigure
    index
    default
    insert
    delete
    invoke

    See the "buttonbox" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the dialogshell command.
    pathName childsite
    Returns the pathname of the child site widget.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the dialogshell command.

    COMPONENTS

    Name:                   dschildsite
    Class:                  frame
    
      The dschildsite component is the user child site for the dialog shell. See the "frame" widget manual entry for details on the dschildsite component item.

    Name:                   separator
    Class:                  frame
    
      The separator component devides the area between the user child site and the button box. See the "frame" widget manual entry for details on the separator component item.

    Name:                   bbox
    Class:                  ButtonBox
    
      The bbox component is the button box containing the buttons for the dialog shell. See the "ButtonBox" widget manual entry for details on the bbox component item.

    EXAMPLE

     dialogshell .ds -modality none
     
     .ds add OK -text "OK" 
     .ds add Cancel -text "Cancel"
     .ds default OK
     
     .ds activate
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    dialogshell, dialog, shell, widget iwidgets-4.1.1/demos/html/timeentry.n.html0000644003604700454610000001511207347201773017156 0ustar dgp771divtimeentry - Create and manipulate a timeentry widget

    timeentry - Create and manipulate a timeentry widget

    SYNOPSIS

    timeentry pathName ?options?

    INHERITANCE

    itk::Widget <- LabeledWidget <- Timefield <- Timeentry

    STANDARD OPTIONS

    background
    foreground
    justify
    borderWidth
    highlightColor
    relief
    cursor
    highlightThickness
    exportSelection
    insertBackground

    See the "options" manual entry for details on the standard options.

    INHERITED OPTIONS

    disabledForeground
    labelMargin
    state
    labelBitmap
    labelPos
    labelFont
    labelText
    labelImage
    labelVariable

    See the "labeledwidget" class manual entry for details on these inherited options.

    command
    textFont
    format
    seconds
    textBackground

    See the "timefield" class manual entry for details on these inherited options.

    ASSOCIATED OPTIONS

    hourRadius
    pivotRadius
    clockColor
    watchWidth
    hourColor
    pivotColor
    clockStipple
    minuteRadius
    secondRadius
    tickColor
    minuteColor
    secondColor
    watchHeight

    See the "watch" manual entry for details on the associated options.

    WIDGET-SPECIFIC OPTIONS

    Name:                   closeText
    Class:                  Text
    Command-Line Switch:	-closetext
    
      Specifies the text to be displayed on the close button of the watch popup. The default is Close.

    Name:                   grab
    Class:                  Grab
    Command-Line Switch:	-grab
    
      Specifies the grab level, local or global, to be obtained before bringing up the popup watch. The default is global. For more information concerning grab levels, consult the documentation for Tk's grab command.

    Name:                   icon
    Class:                  Icon
    Command-Line Switch:	-icon
    
      Specifies the watch icon image to be used in the timeentry. This image must have been created previously with the image create command. Should one not be provided, then one will be generated, pixmap if possible, bitmap otherwise.

    Name:                   state
    Class:                  State
    Command-Line Switch:	-state
    
      Specifies the state of the widget which may be disabled or normal. A disabled state prevents selection of the timefield or time icon button.


    DESCRIPTION

    The timeentry command creates a time entry field with a popup watch by combining the timefield and watch widgets together. This allows a user to enter the time via the keyboard or by using the mouse and selecting the watch icon which brings up a popup watch.

    METHODS

    The timeentry command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:

    pathName option ?arg arg ...?
    
    Option and the args determine the exact behavior of the command. The following commands are possible for timeentry widgets:

    INHERITED METHODS

    get
    isvalid
    show

    See the "timefield" manual entry for details on the associated methods.

    WIDGET-SPECIFIC METHODS

    pathName cget option
    Returns the current value of the configuration option given by option. Option may have any of the values accepted by the timeentry command.
    pathName configure ?option? ?value option value ...?
    Query or modify the configuration options of the widget. If no option is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the timeentry command.

    COMPONENTS

    Name:                   label
    Class:                  Label
    
      The label component provides a label component to used to identify the time. See the "label" widget manual entry for details on the label component item.

    Name:                   iconbutton
    Class:                  Label
    
      The iconbutton component provides a labelbutton component to act as a lightweight button displaying the watch icon. Upon pressing the labelbutton, the watch appears. See the "label" widget manual entry for details on the labelbutton component item.

    Name:                   time
    Class:                  Entry
    
      The time component provides the entry field for time input and display. See the "entry" widget manual entry for details on the time component item.

    EXAMPLE

     timeentry .te
     pack .te
    

    AUTHOR

    Mark L. Ulferts

    KEYWORDS

    timeentry, widget iwidgets-4.1.1/demos/labeledframe0000644003604700454610000000230707340260414015366 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: labeledframe in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 set tk_strictMotif 1 iwidgets::Labeledframe .pr -labelpos ne -labeltext "Print range" set cs [.pr childsite] radiobutton $cs.all \ -highlightthickness 0 \ -anchor w \ -justify left \ -text "All" \ -underline 0 \ -value 1 radiobutton $cs.range \ -highlightthickness 0 \ -anchor w \ -justify left \ -text "Pages" \ -underline 2 \ -value 0 iwidgets::entryfield $cs.from \ -highlightthickness 0 \ -labelpos w \ -labeltext "from:" \ -width 10 [$cs.from component label] configure -justify left -underline 0 iwidgets::entryfield $cs.to \ -highlightthickness 0 \ -labelpos w \ -labeltext "to:" \ -width 10 [$cs.to component label] configure -justify left -underline 0 pack $cs.all -side top -fill x -anchor w pack $cs.range -side left -fill x -anchor w pack $cs.from -side left -fill x -anchor w pack $cs.to -side left -fill x -anchor w pack .pr -fill both iwidgets-4.1.1/demos/extfileselectionbox0000644003604700454610000000050607340260226017042 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: extfileselectionbox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::extfileselectionbox .fsb -width 4i -height 4i pack .fsb iwidgets-4.1.1/demos/fileselectionbox0000644003604700454610000000050007340260346016316 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: fileselectionbox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::fileselectionbox .fsb -width 4i -height 4i pack .fsb iwidgets-4.1.1/demos/toolbar0000644003604700454610000000274407340260761014437 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: toolbar in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 label .status -textvariable statusVar -width 40 -anchor w pack .status -side bottom iwidgets::toolbar .tb -helpvariable statusVar -orient vertical pack .tb -side left -anchor nw -padx 4 -pady 4 set imagedir [file join ${iwidgets::library} demos images] .tb add button select \ -helpstr "Select drawing elements" \ -image [image create photo -file [file join $imagedir select.gif]] \ -balloonstr "Selection tool" \ -command {puts "tool: select"} .tb add button magnify \ -helpstr "Magnify drawing area" \ -image [image create photo -file [file join $imagedir mag.gif]] \ -balloonstr "Zoom tool" \ -command {puts "tool: magnify"} .tb add button ruler \ -helpstr "Measure distances on drawing" \ -image [image create photo -file [file join $imagedir ruler.gif]] \ -balloonstr "Ruler tool" \ -command {puts "tool: ruler"} .tb add frame filler \ -borderwidth 1 \ -width 10 \ -height 10 .tb add button poly \ -helpstr "Draw a polygon" \ -image [image create photo -file [file join $imagedir poly.gif]] \ -balloonstr "Polygon tool" \ -command {puts "tool: polygon"} canvas .worksp -width 2i -height 3i \ -borderwidth 2 -relief sunken -background white pack .worksp -side right -expand yes -fill both -padx 4 -pady 4 iwidgets-4.1.1/demos/canvasprintdialog0000644003604700454610000000152207340260112016464 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: canvasprintdialog in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell # # Make a canvas for the main application: # canvas .c -width 200 -height 200 -background white pack .c .c create rectangle 30 30 150 150 -fill blue .c create oval 70 70 190 190 -fill red .c create polygon 60 50 110 180 10 180 -fill green .c create text 100 5 -anchor n -text "Example Drawing" button .print -text "Print..." -command { if {[.pcd activate]} { puts "use command \".pcd print\" to really print" } else { puts "aborted" } } pack .print iwidgets::canvasprintdialog .pcd -modality application \ -printcmd "lpr" -pagesize "A4" .pcd setcanvas .c iwidgets-4.1.1/demos/disjointlistbox0000644003604700454610000000055207340260201016205 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: disjointlistbox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::disjointlistbox .dlb pack .dlb -padx 10 -pady 10 -fill both -expand yes .dlb insertlhs {black white red blue yellow green magenta} iwidgets-4.1.1/demos/iwidgets.gif0000644003604700454610000001705706577264041015371 0ustar dgp771divGIF87an÷ÿÿÿ÷÷÷ïïïçççßßß×××ÏÏÏÇÇǾ¾¾¶¶¶®®®¦¦¦žžž–––ŽŽŽ†††yyyqqqiiiaaaYYYQQQIIIAAA888000((( ( YAAA((ÿÿA0ÿiYÿ(aIA÷QÿQŽyq†qiiYQaQIÏQÿQyiaŽiYiI8aA0ßY®AqaYQA8ïi ÿiÇQ¦AŽqaiQAﮆÿa†iYÏ–içŽIßiqQ8iI0aA(׎Qç–Qï†0×i®†a¾Žaמi–iIÏ–a–a8¶q8×q iYIqYAI8(ß–QφAçŽ8¶®¦yqiqiaqaQyaI¦†aצqiQ8aI0YA(¶†Qç¦a®yI8(ÿ–(÷Ž ßyï†ÿŽ( çŽ(ç†ÿŽaQ8žyI–qAçŽqaI¦y8÷®0÷¾Qÿ¦ž–†®qIA0ç®(צ Ï–ÿÏQ÷ÇIï¾AÿÇ0Ïžߦß®(ÿ¾×¶ ÷×(ïÏ ß¾÷×ßÇ(÷ß(¾¶aÿ÷Aÿ÷ ççßÇǾ®®¦yyqÏÏ¶ŽŽyÿÿ×00((( ¶¶Ž––iÿÿ¶QQ8ÿÿ¦ïïŽÿÿ–aa8ÿÿq††8÷÷YççQ00ÿÿ8ÿÿIQ y†a¦¾yqŽQŽž†–¦–yŽyiyiYqYaŽi8YQ8ŽyQ†yiž–aϾ–ÏÇ–×ÏyÏÇiǾ ia0ž–Y÷ï ¦žž––Žßçç×ßß¶¾¾¾ÇDz²²¦®®ž¦¦¾ÏϦ¶¶QYY×ïï–¦¦ßÿÿ–®®†žž¾ççi††Çÿÿ¦××¶ÿÿy¶¶–ßßi¦¦†ÏÏYŽŽžÿÿY––†ïïAyy†ÿÿqßß AAAŽŽQ¶¶0qqQÇÇ0yyaÿÿA®®YÿÿIÿÿ(ÿÿaaÿÿÿÿ(AIy†–,nþH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£ÇŠ |I’¡€SžJª\) åFVÊ)`ÀHŽfêÜØ²@Xªìzq@T#Êt¢€£ hJõ¡bŽ©B ´ªW… `ë«Ùƒ8°ÌA׳p<õ95nÜšxk×lË–}í¦ l—á¸Î 58ìw¬+Æ^ŸBhTH$d¦5tR¥Ê˜—I(À쎪Fø”šäÓ¥8C²<°%$­?  $ÍÑéR´0é¤Ü €à ^#U|öÖöyJƒ‡ T#/ Ô8þ—ZZ›ÀW˜h{BEQ+ÓH,¶%“¨²ž{r °G#a€×È# &ÐS (ƒE#w HPMĨÒ p'z ’ªAIp6À "‹€†æ™¦@hàgŒ@Q" ²…Áа܈#6"ä¡1…àHk\¢ÚS @Âc}¥h¡APÀ=–2IBÊñÇ"h'Ø^ˆ€Q0@ÇŽˆp€@]¶€ÔGÇ–À ˜œY!dr‚%ÐÀtf(Fy&"$0æ_`Ù#¦Î@6€y òdmŽN0ÊŽ’ZcþQÐ %\7Pƒ¥Ò‰H"ÏX—~@€ÈoQ)ÔBµ!À@3;†ñÅ20šð€®€8p€t‡ @Â*P$`Ic ¢<g¢G€”R@­×µôE¯Y ,P€¯g€°ô ɦyÈÀŸ¬qf")pÉ% LÀ‡u 2G^ èÑD%H ò€%Fê!…, 0i`“üà®z8b <@A-uèˆKˆÄ)A!’ÀXr³»€Ð""vDpÁÌ}=•GÐBkçƒ,ÁHë¡À%7 öÇzܡŠóÜtëAÇ3ö*þ$s3ñ-w àꢂ ¡ `0÷!@PDÝ”×1ÁÁ¶ö8K¡@1>¥€%–DÑ9΀˜Nùê8³±Æ‹ë…aðÁ"Ezt´’4€A¸ã<îÄÁG4C5ÔXpŒ5,‹!àÅìU%ðbœàÎDÃq÷ÅÁ®4ðqDÁC)wÜrK3·ÄÂMÚ€„ðª®nö·µPG%˜Eý8€*È& º `Ðtx@ˆ1[Z†Í 0¬O …  R iv[SsPCqVÌòS͉%câG¢0(€±UQNï&ÐUxA,à ` ƒg÷À@/~ñŒ¨¤XÀA id#²Ø3ï ®¯®cx v³ˆØÀ(Nq Æ¡Žh— KÙÀAöé€X#<˜À2p0‘pQ¬5Ûjƒ3X )†A lphÀæ¨Å,¤Á ]XY»Àò5¶|nðb‘Íx¤auðàÈü þŒà—^v0"> ÎÜŒ9êbÔ…Æ1t‘ ]d£êð† ËQŽ^ôB¼àÅ6°Ñ kT¸ÀŽÁ‹^¤`ÀM€Âਙ–˜ xàcPÂʼÐE9~Ž_ãÁø…:ÔAoüBÐÞÐ."\`cÙÈÆ@’a Ocåð Îö…7ÄÁÕ¥å~>8€ƒÕÂpÇ0†[ÿ9À[¸ñƒG<â Jûøà €csã0ÁyÒg ¬UÅCÊàÁ Tð‰aXàh)Du«‰¦ÔÅ¢¯c4  lÀ1ÂQ‹Ì€ ØCþ´@ 7¥% Œ N°ƒq C àB( {æßi@ß,.HÀµ¨Æ4 h&C¸G¢à€háÒ½S´W¢0eLÌ'8ÜQ „oà™ƒ“#ÈéýÉQîu¯dW.ü±Í[Ì`F7Ž`‰( H€Ì¦Îx!?ÃHa€ƒÞ¢D¼âÓÎx²Ïû»XtÑ¥ñ€gH#Ø<˜Ae`˜¼)Ê!ÀxPdàg8Ë%ö½¾Ùƒ\¸@6@Ð xöHF¶¡‹jhãÓȆ5º±‹^œ/0À¾øÎ’ òÀ@Žv„¸ÃZP€*þЀ! -jßh"T û¿¶8>°1œ¹×:r‹S¦¤Å<§Œ#€U@o}5ÑÚÁú´¢$ »0 ±@Y$@ÀcšVñb4á!  ?GÔ “uàž4nA€ñWR%–ÀL h <ÀÈp0*ø”¡6;U<Õ!@6€ JPM>‘q€qÈ` Ù0 <0ƒ`p¤p˜Ì÷Õ4* `sð%@þgŒ3\‚Ôd` 0Ÿ Ö` Exñ s„ ]xU±—p þqUc†hhlxîp ŸLèWÑÍ   {$À›¤5âW;hÎÒ‰¨R¢s†WH8€ à…–X€JÌ´‡ò@-0$ËwUN¸-a‚âƨ à3²g4pæ€ É0ÆxÉô¢Ï`eÛ@p¨Íø…r1 С°Œ>hŒj±`s0à ¾@o16 €  ºà G@Žåh㤠Œ æ(†å¨Ï÷Ep°¿ðרQÉe P_GžH 6=@Ð}„ˆŠ@¡ ‰Py¡ þ,“â& äÐ3`ŠÇx+>cµÈ ÖP /Ð ¤ FI + p‚;y5Ñ;Ï   /“Xp ß PÂpvx” ¡%G–@ p ”{ð¬÷ ÖpBÐ °¥p ™°xM‰éB ‹  ÷Ñh1)p °NŒ) µøIŒ·{%™‰™ôÆÀ¸1Ç0$ÃqP}ÙEÏÈ ª°zQ B1‰Ô€ Îo`Ë` Ôp™ÃÀÊo>d‡v À{Ç ž`͈¢¥Oyqª z1Ä` ކÜÑŒ06@þ‚# € êpZ ÃñPM8Éx—· r!Í€ðÁ°Ë0*ë¤ ¦Ð €1Ä`Gð ¹@ µÀu‡Gô66"ôG‘ ÈxÇ b“ cJ‚ › £‚”ðþ‰W%  a°  T p Ö0 Óp Õ°eÄ` Ç DÔ– B`wd—'rZ*5N pƒ~9#¯òEª€½ÈDÏ1‘¢ÐBX€>AÓ@›Ìp Ëð|ÇpÄ0 0 Å`£Ó° °_Ð À —@W•[]iÚÄ€ˆ”' ÀÊ þZÀ‰  ¡p¢×P °¥x.ð9Ä€[´‰ €H±LSÅ0y¹¨Ê~i€dÔwÐ rÁLÀƒ  ɰªà&¡RBB: §Xt‘[Š[ºÚ™P°Ø°Ž@¢²zÒ œ!HµÊ„À}•«F'ÄúŸÁ„ ä  akµŽp …À )«€œÓJ€ ¤¹$ßâ„>Áw{Z‰ÐeÚ0Ͱ‚DëÄ ”§Á®ëª €_P¶õ*B‘\+2Bñ PÎâ@ óРPÍÀþX±ð ϱˆpˆp_†Ášcxp¹ú±ráŽC‹‚Ð`€(¨*u à0óà)›…@–p[·N¯6ÛŸÒ À ‚¯úõ0Yá x´cȧРi5GÛ¢Ьd2Ð óð´ ²@~[~¸e É,ºB'{0,ŠÊ^‰d m02)xWA sK¹£R.*0B û‚¢Ãa²y µ€ <„Ê d +S#<ªÉ³òz†ã·Ä0 j»/µkµ‹[yỜt‘% 0ð´Q‹ 7LpšæKs3ÀSý;&4CØ[M D~Üð›]z¾ê[#Ê·¾GÁÊÇ4jÉ4Ô…ÜÐ €VÍзPBh-+189pN‡ES“° %<ãP hë|ÛeLÁ0›ÃšÚÃ>ŒÌb·+ÐÐ 5–ÂpƒR‡.Œ»^E^@`B 3Ò­Û;À×W«–pÌÃ?\¦›ÚÃð&¦ ÐÐÆp×Ý ]l £Ë8%‡±éýþp€SÀ¾õM 5šJPj11ñNÇ€hÜÃ<šÇ°4µ ð–•@É…;¦wÌ qìÆÎÀ € 6`õEŠ;}LT0 ª0 aÐG0æ5$0ŸËÈÕ@¦¬{ ` ™ª© ° • G` Ÿ¬wLd pC ãâÜìžnìÆpë ê€áàØ€Röõ-´3_Y…° G0Ï8pY pÈ5ÌŒ, üÅ Æ0.Û<Í•À Ü|GÞ™ Ñ<–1ZGË„œßüÍÝ€€¡Ú5¦Îù1Mpº¹'P£pVp4pþŽ( Là¾u»Å ÐÅÓ üQG Í{åIôV  ôIó6™ô&™DÝNñòÍÕ Õà cJ @Œ†¬ /03ð$0U`ÒcpF舳/ŠüŸŒ # ƒµœxv@͉íÔÖí4×tÍ `׎d×1á P»ÕP é ¸ÀÇ`Æ€5¡ç,600FhVðGp fÈÀ4šÆÏÔº“ wmס}סíH  OyÚªÝ}ñ‚¦ÊgÓð ° cL $¡eˆ€ Pñ€@º80 3˜½­ ‘¢C8˜ª×út\úþÔ}Ð}րՀșÎÀ4÷   Ó –мHÊ!x´;uD~k@4 ]¨“ÉŠqBÀÕŠJÖ-ÝÖíßPݨ4à.Ö>$ý„™ØÚ€ Æ` ûýP0ŒÃpƒ ö98.ø(0,‡ÈÍîXÀ]ªÕýžâŽâŽp·âÏÎôZǰÇp ¹ ߀ÐÀËŠ¹å»d ÚÑ G0LYÖ¹mŒ0:ôÛŒ+ÖÇæIå2^åÌAV¤cž˜08ƒ£=kÌDÞ ˰Æ P ûʯhÀéHÉ€!·«‹|§cƒþp Pdµ2ÌÑå¤c Þå‚nž.è‚– ã,ËlÍp¢dp'|ÁÈà'ånŸ `!ðV`3pF7€ç1óv àò½äItîL‹Þ赾莾ëºÞèÀ7½{õµÌ `¸]¦Z°88¥žÒ!pcG€V°h°ípªþŸí„]]ê&²0,ã–2Îîôfí>c#GôîAÄRŸ­x¦´Xt)€3@U@î9Ô~gÐ"°í"ð´Ê›Ý]ÈÉärM8 ßGðê2~âPÀÕ pDönþï$GpDB&GóîFê† @×¢$™M_Ýg íh°#à'›² p~ËŒ\à·ÀŒ£ƒ³$êF0Ïò>. ÝæY°~È@òèvòé–D4 ~; äç£mÚ°½fˆäcÐí°åŠÎëêžë».f2ƒç”ó<V0GŽG×wíäfîÆOÑ1cÿAÍ p0 Ê£< ù“?ù 'H§­ÝÖÂ` wõ!@V „Šnž°'nŸ§Ý}vMozWŠ»Z\04 qoÚ  Ö¬©ëÔDôÈÜ0 ;Å0.Œ?ùOޝü`öÊþÃpð-öéß»È\`ׄ¿ &}ƒym™p#œúÀ¸¹Y Í0Ï`à §wçë«Á3–Ð Àç0 G›Ô*%8–?µSÛ !¡Y…fÍ& lv@@ xÀaBƒÉH¨`AÓ¼yVŽÌ€`À@%  ¥–xù2ÀL5èCƒ†$8P`%K˜5 @Ð`‚† 8Œ£†­®iÐbM @V3 ¸ìêu‚† àÚЬ‚8˜ ¶G+FŒpI@tæ^š5ýòí+€€ }¬Ð8r„Æ„= Rú… @ðKÍ0``ÚTƒ¹ ¸teþ«vͪ_ÄšP!î,Õ `` ¶(ž¼™€„¼Tð°Áb óü7°\2ÌÛ !D#Šg8XP 9€ô¬pC 4ç ZÛg`×Ü[…‰ Ù+ &¸0 A¹ ¶`&ÁP€,À,ÁƒÁ¸ã"›0L‹ £ 2Ø@„2@A1fx`ÈTrk7KÊ(9p º $ÀF`ÒIÇ=È(`I¸FœþPà5ÈX"€’Bð æqð#P@`Âí#™¸K‚çò@„3úH¬ ŠS€¥Ú2VLÍ‚ 2Ðþ@8òƒ ¼áåF¯©f4h¶Ù`‚Št)9•Hñx« Ê f¸Ë€½(̯5`(AÞ"ðr‚ À<à CÁd` ¤H`«Å .à`ƒ  ì`sÀ!'lzÑE—oÌ áŒÜî%– €µ" ñY¥­ö Ìá"èÖã–:v5Xè4ÁÞ,±Ä¡(ÈÀƒ<(51tòzJ—Ijëèß X@¡¢€þK2ˆ¥õ2ë¹ú˜ šuúi¿ÔäñÕ©™,9ñi'ø—#Þ=#1Éi¨‡VXºj¦IxŒîíZ‚VY›i¡03ÂÀýcq(ªËõtítOFXÎàà}—L)ušÁ ãCÀDwIiÅÐéˆw;èÀѰé–àQ\X§6ð@Ð¥6Ý˵Ă *ÀÀƒŠßµ¢^ÉǸ€yÀXúÄúa .€À²4§õ%9#ŠÇþ¸'Œ‹jeAŸ£Jæ4€!ØÀ<`…1XÁdlƒ*Ì 1gðÀÿ¼Ò .ÜfnGÂÞ ¯”À㨄{ð^V }QÍ‚)—yà TAzX»5“lÁò‚ä„5õ¦ 0Àbç1**@z±L¶Ç=áÐp´[@ín'!ºŠ›““¬À‰±B©2>€U h Pd8¸M@ cQ:FÆîàU² JµKdGŽ/A‚`B#ôÁ óÀ0D .@jAÐ%íG!0ZÉ~ŠôX[B`„3ˆ `À0·£,À%¤ÁPþ¸ 8„dÀ’Ñ@œ„%WYå+™©U cpƒ.`‰Ï( Ъ`Ä#ˆaW3’b;háºL¥*£9: MsÑTI Ž`… ` kp€bPž áBCÂ*(01VÍyVT&öì¢Ã,¤€0Óx([b°‰†^ ˆa•@ xÅ¢ól%Ç^Z@ÑC BP*÷]ÀÒ%JHgÊs¦ÅhF›e!0`î›Ç­>áª:ДɤãH†rÔ—ÆÔ•/-Í(°> ÈâQåB&;éX¡<“«o]bRév”¦öd²`2Uú/P¶:&÷„k`áZSÝ$Ó”t„(I†¢TÁ66°**QÒŠ:Ö²—- Q/Û¬€;iwidgets-4.1.1/demos/notebook0000644003604700454610000000413507340260454014610 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: notebook in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell option add *Scale.width 8 . configure -background white iwidgets::optionmenu .pages -labeltext "Page:" -command { .nb view [.pages get] } pack .pages -padx 4 -pady 4 .pages insert end "Personal Info" "Favorite Color" "Blank Page" iwidgets::notebook .nb -width 3i -height 2.6i pack .nb -padx 4 -pady 4 # Page #1 # ---------------------------------------------------------------------- set page [.nb add -label "Personal Info"] iwidgets::entryfield $page.name -labeltext "Name:" -labelpos nw pack $page.name iwidgets::entryfield $page.addr -labeltext "Address:" -labelpos nw pack $page.addr iwidgets::entryfield $page.addr2 -labeltext "City, State:" -labelpos nw pack $page.addr2 iwidgets::entryfield $page.email -labeltext "E-mail:" -labelpos nw pack $page.email # Page #2 # ---------------------------------------------------------------------- set page [.nb add -label "Favorite Color"] frame $page.sample -width 20 -height 20 \ -borderwidth 2 -relief raised pack $page.sample -fill both -pady 4 scale $page.r -label "Red" -orient horizontal \ -from 0 -to 255 -command "set_color $page" pack $page.r -fill x scale $page.g -label "Green" -orient horizontal \ -from 0 -to 255 -command "set_color $page" pack $page.g -fill x scale $page.b -label "Blue" -orient horizontal \ -from 0 -to 255 -command "set_color $page" pack $page.b -fill x proc set_color {page {val 0}} { set r [$page.r get] set g [$page.g get] set b [$page.b get] set color [format "#%.2x%.2x%.2x" $r $g $b] $page.sample configure -background $color } set_color $page # Page #3 # ---------------------------------------------------------------------- set page [.nb add -label "Blank Page"] label $page.title -text "(put your widgets here)" \ -background black -foreground white \ -width 25 -height 3 pack $page.title -expand yes -fill both .nb view "Personal Info" iwidgets-4.1.1/demos/buttonbox0000644003604700454610000000065207340260050015004 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: buttonbox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::buttonbox .bb .bb add OK -text OK -command "puts OK" .bb add Apply -text Apply -command "puts Apply" .bb add Cancel -text Cancel -command "puts Cancel" .bb default OK pack .bb -expand yes -fill both iwidgets-4.1.1/demos/dialog0000644003604700454610000000223507340260163014223 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: dialog in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::radiobox .rb -labelpos nw \ -labeltext "Use modality to\nlock up your\napplication:" pack .rb -padx 4 -pady 4 .rb add none -text "-modality none" .rb add application -text "-modality application" .rb add global -text "-modality global" .rb select none button .activate -text "Push Me" -command { .d configure -modality [.rb get] .d activate } pack .activate # # Build a generic dialog # iwidgets::dialog .d .d buttonconfigure OK -command { puts "pushed: OK" .d deactivate 1 } .d buttonconfigure Apply -command { puts "pushed: Apply" } .d buttonconfigure Cancel -command { puts "pushed: Cancel" .d deactivate 0 } .d buttonconfigure Help -command { puts "pushed: Help" } # # Add something to the top of the dialog... # set win [.d childsite] label $win.ex -text "Standard Dialog\n(put your widgets here)" \ -background black -foreground white \ -width 40 -height 5 pack $win.ex -expand yes -fill both -padx 4 -pady 4 iwidgets-4.1.1/demos/watch0000644003604700454610000000070607340260767014105 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: watch in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 set tk_strictMotif 1 iwidgets::watch .w -state disabled -showampm no -width 155 -height 155 pack .w -padx 10 -pady 10 -fill both -expand yes proc fix_time {} { if {! [winfo exists .w]} return .w show after 1000 fix_time } fix_time iwidgets-4.1.1/demos/messagedialog0000644003604700454610000000110207340260446015564 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: messagedialog in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 button .b -text "Confirm..." -command { if {[.md activate]} { puts "selected: Yes" } else { puts "selected: No" } } pack .b iwidgets::messagedialog .md -title "Message Dialog" -modality application \ -bitmap questhead -text "Are you sure?" .md hide Help .md buttonconfigure OK -text "Yes" .md buttonconfigure Cancel -text "No" iwidgets-4.1.1/demos/menubar0000644003604700454610000000467207340260430014421 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: menubar in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::menubar .mb -helpvariable helpVar -menubuttons { menubutton file -text "File" -menu { options -tearoff false command new -label "New" \ -helpstr "Open new document" \ -command {puts "selected: New"} command close -label "Close" \ -helpstr "Close current document" \ -command {puts "selected: Close"} separator sep1 command exit -label "Exit" -command {exit} \ -helpstr "Exit application" } menubutton edit -text "Edit" -menu { options -tearoff false command undo -label "Undo" -underline 0 \ -helpstr "Undo last command" \ -command {puts "selected: Undo"} separator sep2 command cut -label "Cut" -underline 1 \ -helpstr "Cut selection to clipboard" \ -command {puts CUT} command copy -label "Copy" -underline 1 \ -helpstr "Copy selection to clipboard" \ -command {puts "selected: Copy"} command paste -label "Paste" -underline 0 \ -helpstr "Paste clipboard contents into document" \ -command {puts "selected: Paste"} } menubutton options -text "Options" -menu { options -tearoff false -selectcolor blue radiobutton byName -variable viewMode \ -value NAME -label "by Name" \ -helpstr "View files by name order" \ -command {puts "selected: by Name"} radiobutton byDate -variable viewMode \ -value DATE -label "by Date" \ -helpstr "View files by date order" \ -command {puts "selected: by Date"} cascade prefs -label "Preferences" -menu { command colors -label Colors... \ -helpstr "Change text colors" \ -command {puts "selected: Colors..."} command fonts -label "Fonts..." \ -helpstr "Change text font" \ -command {puts "selected: Fonts..."} } } } pack .mb -fill x frame .fr -width 200 -height 200 -background white pack .fr -fill both label .help -anchor w -textvariable helpVar -width 40 pack .help -fill x iwidgets-4.1.1/demos/spinint0000644003604700454610000000150107340260701014441 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: spinint in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell . configure -background white iwidgets::spinint .times -labeltext "Countdown:" -range {0 10} -width 3 pack .times -padx 10 -pady 10 .times delete 0 end .times insert end "5" frame .test pack .test -padx 10 -pady 10 button .test.go -text "Go" -command { set count [.times get] while {$count >= 0} { .test.readout configure -text $count update after 200 incr count -1 } .test.readout configure -text "blast-off!" } pack .test.go -side left label .test.readout -width 15 -background seashell pack .test.readout -side left -padx 4 -pady 4 iwidgets-4.1.1/demos/hierarchy0000644003604700454610000001152707340260371014747 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: hierarchy in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 # This demo displays a users file system starting at thier HOME # directory. You can change the starting directory by setting the # environment variable SHOWDIR. # if {![info exists env(SHOWDIR)]} { set env(SHOWDIR) $env(HOME) } # ---------------------------------------------------------------------- # PROC: get_files file # # Used as the -querycommand for the hierarchy viewer. Returns the # list of files under a particular directory. If the file is "", # then the SHOWDIR is used as the directory. Otherwise, the node itself # is treated as a directory. The procedure returns a unique id and # the text to be displayed for each file. The unique id is the complete # path name and the text is the file name. # ---------------------------------------------------------------------- proc get_files {file} { global env if {$file == ""} { set dir $env(SHOWDIR) } else { set dir $file } if {[catch {cd $dir}] != 0} { return "" } set rlist "" foreach file [lsort [glob -nocomplain *]] { lappend rlist [list [file join $dir $file] $file] } return $rlist } # ---------------------------------------------------------------------- # PROC: select_node tags status # # Select/Deselect the node given the tags and current selection status. # The unique id which is the complete file path name is mixed in with # all the tags for the node. So, we'll find it by searching for our # SHOWDIR and then doing the selection or deselection. # ---------------------------------------------------------------------- proc select_node {tags status} { global env set uid [lindex $tags [lsearch -regexp $tags $env(SHOWDIR)]] if {$status} { .h selection remove $uid } else { .h selection add $uid } } # ---------------------------------------------------------------------- # PROC: expand_node tags # # Expand the node given the tags. The unique id which is the complete # file path name is mixed in with all the tags for the node. So, we'll # find it by searching for our SHOWDIR and then doing the expansion. # ---------------------------------------------------------------------- proc expand_node {tags} { global env set uid [lindex $tags [lsearch -regexp $tags $env(SHOWDIR)]] .h expand $uid } # ---------------------------------------------------------------------- # PROC: collapse_node tags # # Collapse the node given the tags. The unique id which is the complete # file path name is mixed in with all the tags for the node. So, we'll # find it by searching for our SHOWDIR and then doing the collapse. # ---------------------------------------------------------------------- proc collapse_node {tags} { global env set uid [lindex $tags [lsearch -regexp $tags $env(SHOWDIR)]] .h collapse $uid } # ---------------------------------------------------------------------- # PROC: expand_recursive # # Recursively expand all the file nodes in the hierarchy. # ---------------------------------------------------------------------- proc expand_recursive {node} { set files [get_files $node] foreach tagset $files { set uid [lindex $tagset 0] .h expand $uid if {[get_files $uid] != {}} { expand_recursive $uid } } } # ---------------------------------------------------------------------- # PROC: expand_all # # Expand all the file nodes in the hierarchy. # ---------------------------------------------------------------------- proc expand_all {} { expand_recursive "" } # ---------------------------------------------------------------------- # PROC: collapse_all # # Collapse all the nodes in the hierarchy. # ---------------------------------------------------------------------- proc collapse_all {} { .h configure -querycommand "get_files %n" } # # Create the hierarchy mega-widget, adding commands to both the item # and background popup menus. # iwidgets::hierarchy .h -querycommand "get_files %n" -visibleitems 30x15 \ -labeltext $env(SHOWDIR) -selectcommand "select_node %n %s" pack .h -side left -expand yes -fill both .h component itemMenu add command -label "Select" \ -command {select_node [.h current] 0} .h component itemMenu add command -label "Deselect" \ -command {select_node [.h current] 1} .h component itemMenu add separator .h component itemMenu add command -label "Expand" \ -command {expand_node [.h current]} .h component itemMenu add command -label "Collapse" \ -command {collapse_node [.h current]} .h component bgMenu add command -label "Expand All" -command expand_all .h component bgMenu add command -label "Collapse All" -command collapse_all .h component bgMenu add command -label "Clear Selections" \ -command {.h selection clear} iwidgets-4.1.1/demos/scrolledlistbox0000644003604700454610000000142707340260626016206 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: scrolledlistbox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell . configure -background white iwidgets::scrolledlistbox .slb -labeltext "Scrolledlistbox" \ -vscrollmode dynamic -hscrollmode none \ -selectmode single \ -labelpos nw -selectioncommand { puts "click: [.slb getcurselection]" } pack .slb -padx 4 -pady 4 .slb insert 0 Hello World! Cruel .slb delete "Hello" .slb insert 0 "Goodbye" button .add -text "Add" -command { .slb insert end "Goodbye!" } pack .add -padx 4 -pady 4 button .del -text "Delete" -command { .slb delete 0 } pack .del -padx 4 -pady 4 iwidgets-4.1.1/demos/scrolledtext0000644003604700454610000000072007340260634015500 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: scrolledtext in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::scrolledtext .st -labeltext "Scrolledtext" -wrap none \ -vscrollmode static -hscrollmode dynamic \ -width 5i -height 2i pack .st .st import [file join ${iwidgets::library} demos scrolledtext] iwidgets-4.1.1/demos/labeledwidget0000644003604700454610000000127007340260405015555 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: labeledwidget in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 . configure -background white iwidgets::labeledwidget .lw -labeltext "Label Text:" pack .lw -padx 4 -pady 4 set win [.lw childsite] label $win.ex -text "(put your widgets here)" \ -background black -foreground white \ -width 30 -height 3 pack $win.ex -expand yes -fill both -padx 4 -pady 4 iwidgets::optionmenu .pos -labeltext "Position:" -command { .lw configure -labelpos [.pos get] } pack .pos -padx 4 -pady 4 .pos insert end e n ne nw s se sw w .pos select w iwidgets-4.1.1/demos/scrolledhtml0000644003604700454610000000072207340260620015455 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: scrolledhtml in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::scrolledhtml .sh -labeltext "Scrolledhtml" \ -width 5i -height 3i \ -wrap word -linkcommand ".sh import -link" -padx 10 pack .sh .sh import [file join ${iwidgets::library} demos demo.html] iwidgets-4.1.1/demos/extfileselectiondialog0000644003604700454610000000071107340260235017507 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: extfileselectiondialog in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::extfileselectiondialog .efsd -modality application button .select -text "Files..." -command { if {[.efsd activate]} { puts "selected: [.efsd get]" } else { puts "" } } pack .select -side left iwidgets-4.1.1/demos/catalog0000644003604700454610000003147410625401371014403 0ustar dgp771div#!/bin/sh # ---------------------------------------------------------------------- # PROGRAM: demo program for [incr Widgets] # ---------------------------------------------------------------------- # Michael J. McLennan # Bell Labs Innovations for Lucent Technologies # mmclennan@lucent.com # http://www.tcltk.com/itcl/ # ====================================================================== # Copyright (c) 1993-1998 Lucent Technologies, Inc. # ====================================================================== #\ exec wish8.4 "$0" package require Iwidgets 4.0 # ---------------------------------------------------------------------- option add *Scrolledtext.textBackground white startupFile option add *Scrolledlistbox.textBackground white startupFile option add *Scrolledhtml.textBackground white startupFile option add *Scrolledhtml.padX 10 startupFile option add *boxColor blue startupFile option add *boxTextColor white startupFile # ---------------------------------------------------------------------- global selfdir set selfdir [file normalize [file dirname [info script]]] # ---------------------------------------------------------------------- # USAGE: iw_demo_file # # Returns the proper demo file name for a demo called . # ---------------------------------------------------------------------- proc iw_demo_file {name} { global selfdir return [file join $selfdir $name] } # ---------------------------------------------------------------------- # USAGE: iw_demo_manpage # # Returns the proper man page file for a demo called . # ---------------------------------------------------------------------- proc iw_demo_manpage {name} { global selfdir return [file join $selfdir html $name.n.html] } # ---------------------------------------------------------------------- # USAGE: iw_load_demo # # Loads a demo program with the given . Demos can be written # as if they will pop up in the main application window, but they will # pop up inside the tab notebook instead. # ---------------------------------------------------------------------- proc iw_load_demo {name} { global widgets catch {eval destroy [winfo children $widgets(info-example)]} iw_lock on iw_status "Loading..." set win [frame $widgets(info-example).inner] pack $win -expand yes set loadcmd { set fid [open [iw_demo_file $name] r] set code [read $fid] close $fid } if {[catch $loadcmd result] == 0} { regsub -all "(\"|\{|\\\[| |\n|^|\t)((\\.\[A-Za-z0-9\]+)+)" \ $code "\\1$win\\2" code regsub -all "(\"|\{|\\\[| |\n|^)(\\. )" \ $code "\\1$win " code if {[catch {uplevel #0 $code} result] == 0} { $widgets(info-code) clear $widgets(info-code) import [iw_demo_file $name] iw_draw_hier $name iw_load_manpage $name iw_lock off iw_status "" return } } catch {eval destroy [winfo children $win]} label $win.err -background white -wraplength 4i \ -text "Can't load demo:\n$result" pack $win.err -expand yes iw_lock off iw_status "" } # overload a few critical functions that might be used by demo programs... rename exit tcl_exit proc exit {{status 0}} { # do nothing } rename puts tcl_puts proc puts {args} { global widgets if {[llength $args] == 1} { iw_status [lindex $args 0] } else { eval tcl_puts $args } } # ---------------------------------------------------------------------- # USAGE: iw_load_manpage # # Loads the man page for the current demo. Man pages are not # automatically loaded unless the man page viewer is visible. # This procedure checks to see if the viewer is visible, and loads # the man page if needed. # ---------------------------------------------------------------------- set iwManPage "" proc iw_load_manpage {{name ""}} { global widgets iwManPage if {[winfo ismapped $widgets(info-manpage)]} { if {$name == ""} { set name [$widgets(list) getcurselection] } if {$name != $iwManPage} { iw_lock on iw_status "Loading man page..." $widgets(info-manpage) import [iw_demo_manpage $name] iw_lock off iw_status "" place forget $widgets(info-manpage-feedback) } set iwManPage $name } } # ---------------------------------------------------------------------- # USAGE: iw_manpage_progress # # Handles the progress meter whenever an HTML man page is rendered. # If the progress meter is not showing, it is put up, and the current # state is updated. If the meter is at 100%, it is taken down. # ---------------------------------------------------------------------- proc iw_manpage_progress {n} { global widgets remaining if {![winfo ismapped $widgets(info-manpage-feedback)]} { $widgets(info-manpage-feedback) configure -steps $n $widgets(info-manpage-feedback) reset place $widgets(info-manpage-feedback) -relx 0.5 -rely 0.5 \ -anchor c -width 200 update set remaining $n } $widgets(info-manpage-feedback) step [expr $remaining - $n] set remaining $n } # ---------------------------------------------------------------------- # USAGE: iw_status # # Displays a status near the top of the window. # ---------------------------------------------------------------------- proc iw_status {message} { global widgets $widgets(status) configure -text $message update } # ---------------------------------------------------------------------- # USAGE: iw_lock # # Locks or unlocks the main window. Sets a grab on the main menu, # so that all events are sent to it. # ---------------------------------------------------------------------- proc iw_lock {state} { global widgets if {$state} { grab set $widgets(mainMenu) . configure -cursor watch } else { grab release $widgets(mainMenu) . configure -cursor "" } } # ---------------------------------------------------------------------- # USAGE: iw_draw_hier # # Queries the hierarchy for a particular class in demo and # draws a class diagram into a display window. Usually invoked when # a demo is loaded to display the class hierarchy for the associated # widget. # ---------------------------------------------------------------------- proc iw_draw_hier {name} { global widgets set canv $widgets(info-hier) $canv delete all set class [string toupper [string index $name 0]][string tolower [string range $name 1 end]] if {[catch [list namespace eval iwidgets [list itcl::find classes $class]]] == 0} { set objs [namespace eval iwidgets [list itcl::find objects -class $class]] if {[llength $objs]} { update idletasks set bases [[lindex $objs 0] info heritage] iw_draw_level [lrange $bases 1 end] $canv [lindex $bases 0] set bbox [$canv bbox all] $canv move all [expr [lindex $bbox 0] * -1] [expr [lindex $bbox 1] * -1] $canv xview moveto 0 $canv yview moveto 0 set bbox [$canv bbox all] set x [expr ([winfo width $widgets(info)] / 2) - ([lindex $bbox 2] / 2)] set y 10 $canv move all $x $y } } } # ---------------------------------------------------------------------- # USAGE: iw_draw_level # # Draws one level of the hierarchy for . # ---------------------------------------------------------------------- proc iw_draw_level {bases canv class} { set org [iw_draw_box $canv $class] set top $org set offset 0 if {[llength $bases]} { $canv lower [$canv create line $offset $org \ $offset [expr $top-10] \ -40 [expr $top-10] \ -24 [expr $top-10] \ -20 [expr $top-16] \ -16 [expr $top-10] \ -20 [expr $top-16] \ -20 [expr $top-26]] $canv move all 20 [expr -($top-26+$org)] set del [iw_draw_level [lrange $bases 1 end] $canv [lindex $bases 0]] $canv move all -20 [expr $top-26+$org] set top [expr $top+$del-30+$org] incr offset 4 } return $top } # ---------------------------------------------------------------------- # USAGE: iw_draw_box # # Draws one box for a class hierarchy onto a canvas window. # ---------------------------------------------------------------------- proc iw_draw_box {canv class} { set bg [option get $canv boxColor BoxColor] set textbg [option get $canv boxTextColor BoxTextColor] set cname [string trimleft $class :] $canv create text 0 0 -anchor center -text $cname \ -fill $textbg -tags $class set bbox [$canv bbox $class] set x0 [expr [lindex $bbox 0]-4] set y0 [expr [lindex $bbox 1]-4] set x1 [expr [lindex $bbox 2]+4] set y1 [expr [lindex $bbox 3]+4] $canv create rectangle $x0 $y0 $x1 $y1 \ -outline black -fill $bg $canv raise $class return $y0 } # ---------------------------------------------------------------------- wm title . {[incr Widgets] Demo} wm geometry . 750x440 frame .mbar -borderwidth 2 -relief raised pack .mbar -fill x set widgets(mainMenu) [menubutton .mbar.main -text "Main" -menu .mbar.main.m] pack .mbar.main -side left menu .mbar.main.m .mbar.main.m add command -label "About..." -command {.about activate} .mbar.main.m add separator .mbar.main.m add command -label "Quit" -command tcl_exit iwidgets::panedwindow .pw -orient vertical pack .pw -expand yes -fill both .pw add "widgets" set pane [.pw childsite "widgets"] set widgets(list) $pane.wlist iwidgets::scrolledlistbox $widgets(list) -labeltext "Select a widget:" \ -selectioncommand {iw_load_demo [$widgets(list) getcurselection]} \ -labelpos nw -vscrollmode dynamic -hscrollmode none \ -exportselection no pack $widgets(list) -expand yes -fill both -padx 8 .pw add "info" set pane [.pw childsite "info"] set widgets(info) $pane.info .pw fraction 25 75 set widgets(status) [label $pane.status] pack $pane.status -anchor w iwidgets::tabnotebook $widgets(info) -tabpos s pack $widgets(info) -expand yes -fill both set widgets(info-example) [$widgets(info) add -label "Example"] $widgets(info-example) configure -background white set win [$widgets(info) add -label "Example Code"] set widgets(info-code) [iwidgets::scrolledtext $win.code \ -wrap none -vscrollmode dynamic -hscrollmode none] pack $widgets(info-code) -expand yes -fill both -padx 4 -pady 4 set win [$widgets(info) add -label "Inheritance"] set widgets(info-hier) [iwidgets::scrolledcanvas $win.canv -textbackground white \ -vscrollmode dynamic -hscrollmode dynamic] pack $widgets(info-hier) -expand yes -fill both -padx 4 -pady 4 set win [$widgets(info) add -label "Man Page"] set widgets(info-manpage) [iwidgets::scrolledhtml $win.html \ -wrap word -vscrollmode dynamic -hscrollmode none \ -feedback "iw_manpage_progress" \ -linkcommand "$win.html import -link"] pack $widgets(info-manpage) -expand yes -fill both -padx 4 -pady 4 set widgets(info-manpage-feedback) [iwidgets::feedback $win.html.fb \ -borderwidth 2] bind $widgets(info-manpage) {iw_load_manpage} $widgets(info) select "Example" # ---------------------------------------------------------------------- # "About" window # ---------------------------------------------------------------------- iwidgets::dialog .about -title {About: [incr Widgets] Demo} -modality none .about hide "Apply" .about hide "Help" .about hide "Cancel" .about buttonconfigure "OK" -command ".about deactivate" .about default "OK" set win [.about childsite] label $win.title -text {[incr Widgets]} pack $win.title catch {$win.title configure -font -*-helvetica-bold-o-normal-*-*-180-*} set file [file join $selfdir iwidgets.gif] label $win.icon -image [image create photo -file $file] pack $win.icon -side left label $win.by -text "Contributed By" pack $win.by catch {$win.by configure -font -*-helvetica-medium-r-normal-*-*-100-*} label $win.authors -text "Mark L. Ulferts Sue Yockey John Sigler Bill Scott Alfredo Jahn Tako Schotanus Kris Raney John Tucker Mitch Gorman John Reekie Ken Copeland Tony Parent Chad Smith and Michael McLennan " pack $win.authors catch {$win.authors configure -font -*-helvetica-medium-o-normal-*-*-120-*} # ---------------------------------------------------------------------- # Load up a list of demos... # ---------------------------------------------------------------------- foreach file [lsort [glob [file join $selfdir *]]] { set name [file tail $file] if {![file isdirectory $file] && ![string match *.* $name] && ![string match catalog $name] && ![string match scopedobject $name]} { if {$name == "mainwindow"} { # This demo is doesn't work well with the catalog # so we skip it. continue } $widgets(list) insert end $name } } $widgets(list) selection set 0 uplevel #0 [$widgets(list) cget -selectioncommand] iwidgets-4.1.1/demos/timefield0000644003604700454610000000055307340260752014733 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: timefield in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 proc returnCmd {} { puts [.df get] } iwidgets::timefield .df -labeltext "Time:" -command returnCmd pack .df -fill x -expand yes -padx 10 -pady 10 iwidgets-4.1.1/demos/demo.html0000644003604700454610000000176307302304675014665 0ustar dgp771divDemo HTML Page
    iwidgets logo

    Display Your HTML Pages

    Now you can write all of your documentation in HTML format! You can publish it on the World Wide Web, or bundle it with your tool and display it using a hyperhelp or scrolledhtml widget.


    Most of the usual HTML tags are recognized and supported.
    So you can include things like:

    • block quotes
    • bold
    • code
    • color images
    • definition lists
    • directory lists
    • italic
    • preformatted text
    • superscript
    • unordered lists
    • ...and much, much more!


    Build it. Document it. Let us display it.

    iwidgets-4.1.1/demos/radiobox0000644003604700454610000000066107340260567014604 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: radiobox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::radiobox .rb -labeltext "Size:" -labelpos nw pack .rb -padx 4 -pady 4 -fill both .rb add small -text "Small" .rb add med -text "Medium" .rb add large -text "Large" .rb add xlarge -text "Biggie" .rb select med iwidgets-4.1.1/demos/checkbox0000644003604700454610000000063307340260127014552 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: checkbox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::checkbox .cb -labeltext Styles .cb add bold -text Bold .cb add italic -text Italic .cb add underline -text Underline .cb select underline pack .cb -padx 10 -pady 10 -fill both -expand yes iwidgets-4.1.1/demos/entryfield0000644003604700454610000000204107340260207015123 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: entryfield in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell . configure -background white iwidgets::entryfield .login -labeltext "Login:" -labelpos nw \ -command { focus [.passwd component entry] } pack .login -padx 4 -pady 4 iwidgets::entryfield .passwd -labeltext "Password:" -labelpos nw -show "\267" \ -command { focus [.phone component entry] } pack .passwd -padx 4 -pady 4 iwidgets::entryfield .phone -labeltext "Phone:" -labelpos nw \ -command { focus [.login component entry] } \ -validate {check_phonenum %W "%c"} pack .phone -padx 4 -pady 4 proc check_phonenum {entry char} { set current [$entry get] set len [string length $current] if {$len == 3 || $len == 7} { $entry delete 0 end $entry insert 0 "$current-" } if {$len < 12 && [string match {[0-9]} $char]} { return 1 } return 0 } iwidgets-4.1.1/demos/optionmenu0000644003604700454610000000064307340260463015165 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: optionmenu in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::optionmenu .cb -labeltext "Font:" -labelpos w -command { puts "selected: [.cb get]" } pack .cb .cb insert end Ariel Courier Helvetica Knarly Lucida \ Rumpus Symbol Times "Zapf Dingbats" iwidgets-4.1.1/demos/extbutton0000644003604700454610000000120507346163222015020 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: extbutton in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::extbutton .eb1 -text "Bitmap example" -bitmap info \ -background bisque -activeforeground red -bitmapforeground blue \ -defaultring 1 -command {puts "Bisque is beautiful"} iwidgets::extbutton .eb2 -text "Image example" -bd 3 -image \ [image create photo -file $iwidgets::library/demos/images/clear.gif] \ -font 9x15bold -background lightgreen -imagepos e \ -activebackground lightyellow pack .eb1 .eb2 -pady 8 iwidgets-4.1.1/demos/shell0000644003604700454610000000054207340260664014100 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: selectiondialog in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::shell .sh -modality none -padx 20 -pady 20 -title Shell pack [label [.sh childsite].l -text SHELL] .sh center .sh activate iwidgets-4.1.1/demos/scopedobject0000644003604700454610000000047207340260575015440 0ustar dgp771div#!/bin/sh # \ exec wish8.4 -f $0 $* package require Iwidgets 4.0 # # Demo script for the Scopedobject class # proc scopedobject_demo {} { iwidgets::scopedobject #auto \ -exitscopecommand {puts "enter scopedobject_demo"} \ -exitscopecommand {puts "exit scopedobject_demo"} } scopedobject_demo iwidgets-4.1.1/demos/feedback0000644003604700454610000000076007340260336014513 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: feedback in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 . configure -background white iwidgets::feedback .fb -labeltext "Status " -steps 22 pack .fb -padx 4 -pady 4 button .go -text "Go" -command { .fb reset for {set i 0} {$i < 22} {incr i} { .fb step after 100 } } pack .go -padx 4 -pady 4 iwidgets-4.1.1/demos/finddialog0000644003604700454610000002277407340260363015100 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: finddialog in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 # # Demo script for the Finddialog class # proc find {} { if {! [winfo exists .findd]} { iwidgets::finddialog .findd -textwidget .st } .findd center .st .findd activate } iwidgets::scrolledtext .st -visibleitems 50x14 -wrap none pack .st button .findb -text "Press to Search Text" -command find pack .findb -pady 5 .st insert end " The Declaration of Independence (Adopted in Congress 4 July 1776) When, in the course of human events, it becomes necessary for one people to dissolve the political bonds which have connected them with another, and to assume among the powers of the earth, the separate and equal station to which the laws of nature and of nature's God entitle them, a decent respect to the opinions of mankind requires that they should declare the causes which impel them to the separation. We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable rights, that among these are life, liberty and the pursuit of happiness. That to secure these rights, governments are instituted among men, deriving their just powers form the consent of the governed. That whenever any form of government becomes destructive to these ends, it is the right of the people to alter or to abolish it, and to institute new government, laying its foundation on such principles and organizing its powers in such form, as to them shall seem most likely to effect their safety and happiness. Prudence, indeed, will dictate that governments long established should not be changed for light and transient causes; and accordingly all experience hath shown that mankind are more disposed to suffer, while evils are sufferable, than to right themselves by abolishing the forms to which they are accustomed. But when a long train of abuses and usurpations, pursuing invariably the same object evinces a design to reduce them under absolute despotism, it is their right, it is their duty, to throw off such government, and to provide new guards for their future security. --Such has been the patient sufferance of these colonies; and such is now the necessity which constrains them to alter their former systems of government. The history of the present King of Great Britain is a history of repeated injuries and usurpations, all having in direct object the establishment of an absolute tyranny over these states. To prove this, let facts be submitted to a candid world. He has refused his assent to laws, the most wholesome and necessary for the public good. He has forbidden his governors to pass laws of immediate and pressing importance, unless suspended in their operation till his assent should be obtained; and when so suspended, he has utterly neglected to attend to them. He has refused to pass other laws for the accommodation of large districts of people, unless those people would relinquish the right of representation in the legislature, a right inestimable to them and formidable to tyrants only. He has called together legislative bodies at places unusual, uncomfortable, and distant from the depository of their public records, for the sole purpose of fatiguing them into compliance with his measures. He has dissolved representative houses repeatedly, for opposing with manly firmness his invasions on the rights of the people. He has refused for a long time, after such dissolutions, to cause others to be elected; whereby the legislative powers, incapable of annihilation, have returned to the people at large for their exercise; the state remaining in the meantime exposed to all the dangers of invasion from without, and convulsions within. He has endeavored to prevent the population of these states; for that purpose obstructing the laws for naturalization of foreigners; refusing to pass others to encourage their migration hither, and raising the conditions of new appropriations of lands. He has obstructed the administration of justice, by refusing his assent to laws for establishing judiciary powers. He has made judges dependent on his will alone, for the tenure of their offices, and the amount and payment of their salaries. He has erected a multitude of new offices, and sent hither swarms of officers to harass our people, and eat out their substance. He has kept among us, in times of peace, standing armies without the consent of our legislature. He has affected to render the military independent of and superior to civil power. He has combined with others to subject us to a jurisdiction foreign to our constitution, and unacknowledged by our laws; giving his assent to their acts of pretended legislation: For quartering large bodies of armed troops among us: For protecting them, by mock trial, from punishment for any murders which they should commit on the inhabitants of these states: For cutting off our trade with all parts of the world: For imposing taxes on us without our consent: For depriving us in many cases, of the benefits of trial by jury: For transporting us beyond seas to be tried for pretended offenses: For abolishing the free system of English laws in a neighboring province, establishing therein an arbitrary government, and enlarging its boundaries so as to render it at once an example and fit instrument for introducing the same absolute rule in these colonies: For taking away our charters, abolishing our most valuable laws, and altering fundamentally the forms of our governments: For suspending our own legislatures, and declaring themselves invested with power to legislate for us in all cases whatsoever. He has abdicated government here, by declaring us out of his protection and waging war against us. He has plundered our seas, ravaged our coasts, burned our towns, and destroyed the lives of our people. He is at this time transporting large armies of foreign mercenaries to complete the works of death, desolation and tyranny, already begun with circumstances of cruelty and perfidy scarcely paralleled in the most barbarous ages, and totally unworthy the head of a civilized nation. He has constrained our fellow citizens taken captive on the high seas to bear arms against their country, to become the executioners of their friends and brethren, or to fall themselves by their hands. He has excited domestic insurrections amongst us, and has endeavored to bring on the inhabitants of our frontiers, the merciless Indian savages, whose known rule of warfare, is undistinguished destruction of all ages, sexes and conditions. In every stage of these oppressions we have petitioned for redress in the most humble terms: our repeated petitions have been answered only by repeated injury. A prince, whose character is thus marked by every act which may define a tyrant, is unfit to be the ruler of a free people. Nor have we been wanting in attention to our British brethren. We have warned them from time to time of attempts by their legislature to extend an unwarrantable jurisdiction over us. We have reminded them of the circumstances of our emigration and settlement here. We have appealed to their native justice and magnanimity, and we have conjured them by the ties of our common kindred to disavow these usurpations, which, would inevitably interrupt our connections and correspondence. We must, therefore, acquiesce in the necessity, which denounces our separation, and hold them, as we hold the rest of mankind, enemies in war, in peace friends. We, therefore, the representatives of the United States of America, in General Congress, assembled, appealing to the Supreme Judge of the world for the rectitude of our intentions, do, in the name, and by the authority of the good people of these colonies, solemnly publish and declare, that these united colonies are, and of right ought to be free and independent states; that they are absolved from all allegiance to the British Crown, and that all political connection between them and the state of Great Britain, is and ought to be totally dissolved; and that as free and independent states, they have full power to levy war, conclude peace, contract alliances, establish commerce, and to do all other acts and things which independent states may of right do. And for the support of this declaration, with a firm reliance on the protection of Divine Providence, we mutually pledge to each other our lives, our fortunes and our sacred honor. New Hampshire: Josiah Bartlett, William Whipple, Matthew Thornton Massachusetts: John Hancock, Samual Adams, John Adams, Robert Treat Paine, Elbridge Gerry Rhode Island: Stephen Hopkins, William Ellery Connecticut: Roger Sherman, Samuel Huntington, William Williams, Oliver Wolcott New York: William Floyd, Philip Livingston, Francis Lewis, Lewis Morris New Jersey: Richard Stockton, John Witherspoon, Francis Hopkinson, John Hart, Abraham Clark Pennsylvania: Robert Morris, Benjamin Rush, Benjamin Franklin, John Morton, George Clymer, James Smith, George Taylor, James Wilson, George Ross Delaware: Caesar Rodney, George Read, Thomas McKean Maryland: Samuel Chase, William Paca, Thomas Stone, Charles Carroll of Carrollton Virginia: George Wythe, Richard Henry Lee, Thomas Jefferson, Benjamin Harrison, Thomas Nelson, Jr., Francis Lightfoot Lee, Carter Braxton North Carolina: William Hooper, Joseph Hewes, John Penn South Carolina: Edward Rutledge, Thomas Heyward, Jr., Thomas Lynch, Jr., Arthur Middleton Georgia: Button Gwinnett, Lyman Hall, George Walton " iwidgets-4.1.1/demos/datefield0000644003604700454610000000061407375230203014704 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: datefield in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 proc returnCmd {} { puts [.df get] } iwidgets::datefield .df -labeltext "Date (International Format):" \ -command returnCmd -int 1 pack .df -fill x -expand yes -padx 10 -pady 10 iwidgets-4.1.1/demos/dialogshell0000644003604700454610000000171307340260172015253 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: dialogshell in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::radiobox .rb -labeltext "Use modality to\nlock up your\napplication:" pack .rb -padx 4 -pady 4 .rb add none -text "-modality none" .rb add application -text "-modality application" .rb add global -text "-modality global" .rb select none button .activate -text "Push Me" -command { .ds configure -modality [.rb get] .ds activate } pack .activate # # Build a generic dialog # iwidgets::dialogshell .ds .ds add dismiss -text "Dismiss" -command {.ds deactivate} .ds default dismiss # # Add something to the top of the dialog... # set win [.ds childsite] label $win.ex -text "Minimal Dialog\n(put your widgets here)" \ -background black -foreground white \ -width 40 -height 5 pack $win.ex -expand yes -fill both -padx 4 -pady 4 iwidgets-4.1.1/demos/images/0000755003604700454610000000000013136711010014274 5ustar dgp771diviwidgets-4.1.1/demos/images/mag.gif0000644003604700454610000000026706577264041015556 0ustar dgp771divGIF87aÂiiiÛÛÛ‚‚‚ÿÿÿyiïI<Ž,„ºÜþ0ÊI+ Û„÷C°=B÷}âÈtDÛ¢ªR ® «]PÛ^ºuƒ¯42…„[eÐC¾ƒÁ¯éìM©BëµT%nuYï—YÓO¡Œ&0O @­0}…aNWcòz|t €{ƒ …‡‚‰‹yˆ‰ ’“†ƒ”š›˜–Š £# ;iwidgets-4.1.1/demos/images/select.gif0000644003604700454610000000017406577264042016267 0ustar dgp771divGIF87a¡iiiÿÿÿ,U„©Ëí£œ,X ƒ×½u^¢\0"¥y¦ÆÊŠ̶]Ë^ÛßCýz1á裣¥‹¶bÎ@¨hÊ ÀÞ8*j“Û 5Z×A#5¿Ôì¶û o;iwidgets-4.1.1/demos/images/points.xbm0000644003604700454610000000160006557146163016341 0ustar dgp771div#define dotPencilOp_width 32 #define dotPencilOp_height 32 static unsigned char dotPencilOp_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x24, 0x00, 0x18, 0x00, 0x24, 0x00, 0x18, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x30, 0x00, 0x0e, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x30, 0xa0, 0x01, 0x00, 0x60, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; iwidgets-4.1.1/demos/images/box.xbm0000644003604700454610000000160006557146155015616 0ustar dgp771div#define Tool_32_box_width 32 #define Tool_32_box_height 32 static unsigned char Tool_32_box_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; iwidgets-4.1.1/demos/images/help.gif0000644003604700454610000000111706577264041015735 0ustar dgp771divGIF87af&óÿÿÿÿÿÿÿ€ÿÿ€€€€ÙÙÙ€€€€,f&þ0ÉI«½8ëÍ»ÿ`(Ždiž(,¤p®íñÊxn­@ßÓ® Ц+~^¾ß!á»IM£ôB X¯Öe³–€œÓ)te8 YæOýÃZÃáñ²|P¸¯¥$/ÞÉuv „.nK{`}2V + tv….6,“ |Œ8V†€ ‚†‡œ‰ž‹oB°³:o¯s,vl¹4¯´²ÆÈ1¢¤fIMª¬¯ Ê]ÄØ)Æ™”,j=ž¿Áá6ÚT°ÈXÛNox%¢¸™e¦>éM+­DGŒÝyo ‰7Í`±åÀ>`>u(«Ý ¹M 0 ^)AþY¶¡æêŸlb<¦Nƒ£„•…{xnÉ;nÌöŽåAh0wÉÔÒb"‰Pꤵ²çz¹î *Ä&À´~Š®±[Ê•'Á®Ooš´°Î ª4ŒÚlY«m6w^ß Û“Ô,[¬®Âj `N–MyÊû)a¬.³ ö¥­YŽm"èÙ}ÆC‰^’þ‡ÒœZ¤oeíŒÅ¢éÜ’t Â5`²©,Í.ó½ÙòŒ‡‹ÎÒèiÛ©é0|·òW«Ñ~âMnpˆ—ޏœù<Ž£ìQ.tù^圭Ǻ ºè½Mßãpí¦,’äA?ìUPÜÏ?|þÿ(à€F;iwidgets-4.1.1/demos/images/line.xbm0000644003604700454610000000157206557146161015762 0ustar dgp771div#define lineOp_width 32 #define lineOp_height 32 static unsigned char lineOp_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; iwidgets-4.1.1/demos/images/text.xbm0000644003604700454610000000157206557146165016023 0ustar dgp771div#define font_edit_width 32 #define font_edit_height 32 static unsigned char font_edit_bits[] = { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x80, 0x7b, 0x00, 0x00, 0x80, 0x7e, 0x00, 0x00, 0xc0, 0xfd, 0x00, 0x00, 0x60, 0xfb, 0x00, 0x00, 0xb0, 0xf7, 0x00, 0x00, 0xd0, 0xef, 0x00, 0x00, 0xf8, 0xdf, 0x00, 0x00, 0xd4, 0x7f, 0x00, 0x00, 0xaa, 0x1f, 0x00, 0x00, 0x15, 0x0f, 0x00, 0x80, 0x82, 0x06, 0x03, 0x40, 0x01, 0x01, 0x07, 0xa0, 0x80, 0x00, 0x0f, 0x10, 0x40, 0x00, 0x1f, 0x08, 0x20, 0x00, 0x3b, 0xe4, 0x1f, 0x00, 0x73, 0x1a, 0x00, 0x00, 0xe3, 0x07, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, 0xe3, 0x03, 0x00, 0x00, 0x7b, 0x07, 0x00, 0x00, 0x1f, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; iwidgets-4.1.1/demos/images/close.gif0000644003604700454610000000037106577264041016113 0ustar dgp771divGIF89a ³Ì™™™™™™™™™™™ÌÌÌÿÿÿÿÿÿÌÿÿÿÿÿÿ!ù , @¦°ÉI«½ ±;ÿ^¥-ª¦ìê¶ÀqHçbßx®ßñ<À`C4 §–ÒÕ£mШtJ….š™vËíz}Űð(›Í%ñE3ò^ð6¯/ç˼]…ßëï24Hƒ„Hjˆ‰Š‹Œgidf$…Gm#—†>št(s~¦¥£ª+©§v­«ª¥;´µ¨‡oUº»·ž®²‡_ÃÄ`ÇÈ;iwidgets-4.1.1/demos/images/print.gif0000644003604700454610000000040706577264042016143 0ustar dgp771divGIF87af&ñÿÿÿÿÿÙÙÙ,f&àœ©Ëí£œ´Ú‹³Þ¼û†âH–扦êÊBÁ ÇrK#€çzÔþ½ z>PË, P·Ü £Š—ñ¹£f¦ÚƒÕÕÅ‘P˜4jÖ|9Nì°WS¿Ö:ѾŽuÚϺ!,±öw§G75((Æ…4@(gc¸é% 8a™p×(Ç8éIªF·¹Õ *˜‡ ¶ÈåõȰê(ÚØú€ûwÖ@›zk+Ö P,°›h‘,lø‰8z¹©ë øÌ<½ðºÈËd¢Kç}Þ-þQj>¾¦îþ/?O_oŸ¯¿ÏßP;iwidgets-4.1.1/demos/images/cut.gif0000644003604700454610000000026306577264041015601 0ustar dgp771divGIF89a ³Ì™™™™™™™™™™™ÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿ!ù, @`ðÉI«½8ë}`˜Œ‰grèdi릣YbGœ¹ÎoïÿÀ`¯baH‡h#%Z8Îh¢Z¯Ø¬vËí&u˜"*F5v>⯓ %ºÍ.æmuXƒ/EÏfZÆ:á^‚[;iwidgets-4.1.1/demos/images/oval.xbm0000644003604700454610000000157206557146163015776 0ustar dgp771div#define ovalOp_width 32 #define ovalOp_height 32 static unsigned char ovalOp_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, 0x03, 0x80, 0x01, 0x80, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x02, 0x00, 0x03, 0x80, 0x01, 0x00, 0x1c, 0x70, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; iwidgets-4.1.1/demos/images/new.gif0000644003604700454610000000032406577264042015576 0ustar dgp771divGIF89a ³/OO¿¿¿Ò´ŒõÞ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ù, @PHª½ØÎÍ% `(Žá`@ÐQdëéú½4ws'°N9]ëÆ GÄñ¸Sá˜0ÔO ÍødPR˜E:‹]ÑÖnb˰¯ÒÊf«¹ÌÊ”7]§K¯‡Ïžìodhc,ƒ…e„yq‡‹GŠhig‰‘†“a—”?žŸ ¡¢Ÿ;iwidgets-4.1.1/demos/images/open.gif0000644003604700454610000000040206577264042015743 0ustar dgp771divGIF89a ³Ì™™™™™™™™™™™ÌÌÌÿÿÿÿÿÿÌÿÿÿÿÿÿ!ù , @¯°ÉI«½¼ÍÀ`6hÙ@ª®_Œ 2ÌtmÏȲÇþÀÉK&c#ŸÈˆ9sЧ4·ë5zجv‹ z¿`¯éä91ÃÑfLî¼x–7Ê<­óäͨ¾­*Í€GVa„…†‡ˆ„G‰.mp†D’”“–”-’lmk‘jkžd‘¡B ,¦){}¨n|´°²µº~.«º¯N¼)Á:ÆÇÈÇ `ˆf„à ëŒÌ1SP±†Cfs.â(P€cG (àPŠ $Iš<é‚…Ë>õb–tD…Š6UrƌьuŽ)jâ§„¤1™š8úT¨J©X³jÝʵ«×¯`%$;iwidgets-4.1.1/demos/images/copy.gif0000644003604700454610000000041506577264041015757 0ustar dgp771divGIF89a ³Ì™™™™™™™™™™™ÌÌÌÿÿÿÿÿÿÌÿÿÿÿÿÿ!ù , @º°ÉI«½<„`(z\‰f§}lÚ=p “&¸¹®ö0<3ç+œpX ’H=^+…*ÞJ´,ùKÙˆX! 1êz¿"î-je–šÎ¹Æ$¸Ñ×N+ɯã"]G}܃X:2UiY‚ƒYŠVއƒ’““*cv.o8xCQhŸ–j8¡œrtKgn…G¤†FsI‘1c³=|=„P€«P”·V_S¼~@OD»<½¿ÂÉŠ˜ÄÊ‹\vÛ_ ;iwidgets-4.1.1/demos/images/CVS/0000755003604700454610000000000013153526747014753 5ustar dgp771diviwidgets-4.1.1/demos/images/CVS/Repository0000644003604700454610000000002613136711010017027 0ustar dgp771diviwidgets/demos/images iwidgets-4.1.1/demos/images/CVS/Entries0000644003604700454610000000162413153526747016312 0ustar dgp771div/box.xbm/1.1/Mon Jul 27 18:52:29 1998// /clear.gif/1.2/Mon Sep 14 19:01:53 1998/-kb/ /close.gif/1.2/Mon Sep 14 19:01:53 1998/-kb/ /copy.gif/1.2/Mon Sep 14 19:01:53 1998/-kb/ /cut.gif/1.2/Mon Sep 14 19:01:53 1998/-kb/ /exit.gif/1.2/Mon Sep 14 19:01:53 1998/-kb/ /find.gif/1.2/Mon Sep 14 19:01:53 1998/-kb/ /help.gif/1.2/Mon Sep 14 19:01:53 1998/-kb/ /line.xbm/1.1/Mon Jul 27 18:52:33 1998// /mag.gif/1.2/Mon Sep 14 19:01:53 1998/-kb/ /new.gif/1.2/Mon Sep 14 19:01:54 1998/-kb/ /open.gif/1.2/Mon Sep 14 19:01:54 1998/-kb/ /oval.xbm/1.1/Mon Jul 27 18:52:35 1998// /paste.gif/1.2/Mon Sep 14 19:01:54 1998/-kb/ /points.xbm/1.1/Mon Jul 27 18:52:35 1998// /poly.gif/1.2/Mon Sep 14 19:01:54 1998/-kb/ /print.gif/1.2/Mon Sep 14 19:01:54 1998/-kb/ /ruler.gif/1.2/Mon Sep 14 19:01:54 1998/-kb/ /save.gif/1.2/Mon Sep 14 19:01:54 1998/-kb/ /select.gif/1.2/Mon Sep 14 19:01:54 1998/-kb/ /text.xbm/1.1/Mon Jul 27 18:52:37 1998// D iwidgets-4.1.1/demos/images/CVS/Root0000644003604700454610000000006613136711010015577 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/demos/images/ruler.gif0000644003604700454610000000025606577264042016142 0ustar dgp771divGIF87aÂiii¾¶ÿI<Žyiï,{ºÜþ0ÊI«½8»À»ÿ` @a ãà ÄÀºí+·h´Æ8¬¿)Ì»œl`û¹ŽÈc,éK:wL•ñ‰\ºjRªv€Ín©’Õwx,Ž Ökóœì6Äßto3ݦ¹k;éfÀÇG}~u€xf…QR(‹ŒŽs~’•–—˜™š ;iwidgets-4.1.1/demos/images/poly.gif0000644003604700454610000000021506577264042015767 0ustar dgp771divGIF87a¡iii¾¶ÿI<Žyiï,f„©Ëí£œ´ª€³Þ<Ö…œð-Ø€¦êª’`ÀƬkÂò=ЗÇzrêùJ;’QÀ»ýž#2)[:‚8iƒª$B°Q탛sZ_3±w [àq¤}žÀ׆9cŽKšfºÿ(8ˆP;iwidgets-4.1.1/demos/images/clear.gif0000644003604700454610000000042706577264041016076 0ustar dgp771divGIF89a ³Ì™™™™™™™™™™™ÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿ!ù, @ÄÐÉI«½ ƒËÁúË#.r˜[מø€pÆMHm#@£ËsïSžÒé X>Èñh¶àÐxT­JRêÔ¸4`®Ø>šŸâ,ÉED¥aÌnÛšÚ_nÕÀáóc5STT;%75Iaci‹`ŽŒ\hŒƒ&EEGto$C.'œzK!"&›cjqž©“v/M¯Kw²¢Y¬1¸d:+-•ˆ8}UUj€P7ˆSW¿AtÍÏ|†ÕbÅ‘’”Þ]àäâæ;iwidgets-4.1.1/demos/images/save.gif0000644003604700454610000000041606577264042015745 0ustar dgp771divGIF87af&ñÿÿÿ  ÙÙÙ,f&眩Ëí£œ´Ú‹³Þ¼û†âH–扦êʶ®ÄòLÓïzÍË·šÛ†ÄbPø¥Ž¢À„Í” æÓ¨CvxÔƒõ:Œn|2õ kbÕdy:`{Ýoy}UßÍ®=NW³–ÕE¸e3·øÆèˆq„Ô#IÇ¡Øæ&g×s—õ j)¨¸Y*º :zñר‰j ;HHùéjaFÆIÛwº+Q™‹x™* ¼üª;7È'kÍÜ<"®óm‚^³ÎB9_oŸ¯¿Ïßïÿ0 À) ;iwidgets-4.1.1/demos/images/paste.gif0000644003604700454610000000057006577264042016124 0ustar dgp771divGIF89a ³Ì™™™ÌÌÿ™™™™™™™ÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿ!ù, @þÈI«½i ÖyŽ$Ø-h ¬œgÈáÌ3@;ÏŠ®<Ð~°’ðqä€Ãå”Ú4±"¢Ylþ@¢á¡  š¨+¬(˜Ï…Oñ˜\.zð8©ÄXŒhÌ7Ñ€¯!9rp[` ?‰Š‹‰…\<bz“zLH([’2&i68d=/1^ªªD/tn@ƒrluw¶»+¹vƒ~aÀ·y{+P)Ž?ÎkÇPÎ¥EŽÄ¥XO”:†,ÙCO†oáÚäÖp~ˆ¼=_oé@QÏùÎ9)—‡örÄx€ÃA<8ä¼ñUꔌ:‘ÕÃWÀ1úôÁÂEKà/& C¾ZÓ¥ÍI2ªŒUÒ"6uãÈ•héfÈ›8½˜¼ ²gÆ ;iwidgets-4.1.1/demos/images/exit.gif0000644003604700454610000000061406577264041015757 0ustar dgp771divGIF87af&òp€/OOЀPÙÙÙõÞ³ÿÿ9cc,f&þHºÜþ0ÊI«½8ëÍ»ÿ`(Žd œhªe;A,Ï1P°nîÁ4mßPÃëÕ …lÈ´{¿2ج:N„ç,*]Z¿ Àádäv©`+À0†"¥poººfkmð8š¸ÂI°t‚m2xyS}~€Y‹Š‚ƒE†yr|‰’œvG‡ˆW~€§(!užžm•z‰š ¨a© «¬’®I‡—} X´¦²b¼Ê¼œ¼<¯g±*Ã)³Æ/}»„x°£ÇÖ‹ÅBuÎ[ßÑáÕ¶ÖælÛGëí¢ÈâŽýòÿ9’iá–ĸ}+æý+ÆÒ˜ÐôñI°–BÄÜ„6ZÇ\¿ötl¢È—%‘#‡°Â2"”"©`I ´·`z É³¦Ož¯€ÐÔù¡§ÑŸYL õIt'Ò£@}ÝxÚÔ)Tªx¦ö¬Êá*Ô+©rK¶¬Ù³hÓnH;iwidgets-4.1.1/demos/calendar0000644003604700454610000000143407340260063014534 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: calendar in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *Calendar.buttonForeground black option add *Calendar.outline black option add *Calendar.weekdayBackground white option add *Calendar.weekendBackground mistyrose option add *Calendar.selectColor red . configure -background white iwidgets::calendar .cal pack .cal -expand yes -fill both iwidgets::optionmenu .days -labeltext "Start Day:" -command { set day [.days get] .cal configure -startday $day -days $caldays($day) } pack .days -padx 4 -pady 4 array set caldays { sunday {S M T W T F S} monday {Mo Tu We Th Fr Sa Su} } .days insert end sunday monday iwidgets-4.1.1/demos/scrolledcanvas0000644003604700454610000000244607340260603015772 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: scrolledcanvas in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell . configure -background white iwidgets::scrolledcanvas .canv -labeltext "Scrolledcanvas" \ -vscrollmode dynamic -hscrollmode dynamic -autoresize yes pack .canv -expand yes -fill both -padx 4 -pady 4 .canv xview moveto 0 .canv yview moveto 0 button .zoomin -text "Zoom In" -command { .canv scale all 0 0 2 2 .canv configure -scrollregion [.canv bbox all] } pack .zoomin -side left -expand yes -padx 4 -pady 4 button .zoomout -text "Zoom Out" -command { .canv scale all 0 0 0.5 0.5 .canv xview moveto 0 .canv yview moveto 0 .canv configure -scrollregion [.canv bbox all] } pack .zoomout -side left -expand yes -padx 4 -pady 4 bind [.canv component canvas] {add_rectangle %W %x %y} bind [.canv component canvas] {add_rectangle %W %x %y} proc add_rectangle {win x y} { set x [$win canvasx $x] set y [$win canvasy $y] $win create rectangle \ [expr $x-4] [expr $y-4] \ [expr $x+4] [expr $y+4] \ -outline "" -fill red $win configure -scrollregion [$win bbox all] } iwidgets-4.1.1/demos/selectionbox0000644003604700454610000000065207340260644015467 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: selectionbox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::selectionbox .sb -selectionlabel "Font:" -height 2i pack .sb .sb insert items end Ariel Courier Helvetica Knarly Lucida \ Rumpus Symbol Times "Zapf Dingbats" iwidgets-4.1.1/demos/CVS/0000755003604700454610000000000013153526746013505 5ustar dgp771diviwidgets-4.1.1/demos/CVS/Repository0000644003604700454610000000001713136711007015570 0ustar dgp771diviwidgets/demos iwidgets-4.1.1/demos/CVS/Entries0000644003604700454610000000457213153526746015051 0ustar dgp771divD/html//// D/images//// /buttonbox/1.3/Mon Aug 20 19:08:24 2001// /calendar/1.3/Mon Aug 20 19:08:35 2001// /canvasprintbox/1.3/Mon Aug 20 19:08:51 2001// /canvasprintdialog/1.3/Mon Aug 20 19:08:58 2001// /catalog/1.9/Thu May 24 21:26:17 2007// /checkbox/1.3/Mon Aug 20 19:09:11 2001// /combobox/1.3/Mon Aug 20 19:09:17 2001// /dateentry/1.3/Mon Aug 20 19:09:24 2001// /datefield/1.4/Fri Nov 16 15:28:03 2001// /demo.html/1.2/Mon May 21 21:33:49 2001// /dialog/1.3/Mon Aug 20 19:09:39 2001// /dialogshell/1.3/Mon Aug 20 19:09:46 2001// /disjointlistbox/1.3/Mon Aug 20 19:09:53 2001// /entryfield/1.3/Mon Aug 20 19:09:59 2001// /extbutton/1.4/Fri Sep 7 15:24:02 2001// /extfileselectionbox/1.3/Mon Aug 20 19:10:14 2001// /extfileselectiondialog/1.3/Mon Aug 20 19:10:21 2001// /feedback/1.4/Mon Aug 20 19:11:26 2001// /fileselectionbox/1.3/Mon Aug 20 19:11:34 2001// /fileselectiondialog/1.3/Mon Aug 20 19:11:40 2001// /finddialog/1.3/Mon Aug 20 19:11:47 2001// /hierarchy/1.3/Mon Aug 20 19:11:53 2001// /hyperhelp/1.3/Mon Aug 20 19:11:59 2001// /iwidgets.gif/1.2/Mon Sep 14 19:01:53 1998/-kb/ /labeledframe/1.3/Mon Aug 20 19:12:12 2001// /labeledwidget/1.3/Mon Aug 20 19:12:05 2001// /mainwindow/1.5/Mon Aug 20 19:12:18 2001// /menubar/1.3/Mon Aug 20 19:12:24 2001// /messagebox/1.3/Mon Aug 20 19:12:31 2001// /messagedialog/1.3/Mon Aug 20 19:12:38 2001// /notebook/1.3/Mon Aug 20 19:12:44 2001// /optionmenu/1.3/Mon Aug 20 19:12:51 2001// /panedwindow/1.3/Mon Aug 20 19:12:58 2001// /promptdialog/1.3/Mon Aug 20 19:13:04 2001// /pushbutton/1.3/Mon Aug 20 19:13:52 2001// /radiobox/1.3/Mon Aug 20 19:13:59 2001// /scopedobject/1.3/Mon Aug 20 19:14:05 2001// /scrolledcanvas/1.3/Mon Aug 20 19:14:11 2001// /scrolledframe/1.3/Mon Aug 20 19:14:18 2001// /scrolledhtml/1.3/Mon Aug 20 19:14:24 2001// /scrolledlistbox/1.3/Mon Aug 20 19:14:30 2001// /scrolledtext/1.3/Mon Aug 20 19:14:36 2001// /selectionbox/1.3/Mon Aug 20 19:14:44 2001// /selectiondialog/1.3/Mon Aug 20 19:14:51 2001// /shell/1.3/Mon Aug 20 19:15:00 2001// /spindate/1.3/Mon Aug 20 19:15:06 2001// /spinint/1.3/Mon Aug 20 19:15:13 2001// /spinner/1.3/Mon Aug 20 19:15:20 2001// /spintime/1.3/Mon Aug 20 19:15:27 2001// /tabnotebook/1.3/Mon Aug 20 19:15:33 2001// /tabset/1.3/Mon Aug 20 19:15:42 2001// /timeentry/1.3/Mon Aug 20 19:15:48 2001// /timefield/1.3/Mon Aug 20 19:15:54 2001// /toolbar/1.3/Mon Aug 20 19:16:01 2001// /watch/1.5/Mon Aug 20 19:16:07 2001// iwidgets-4.1.1/demos/CVS/Root0000644003604700454610000000006613136711007014340 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/demos/scrolledframe0000644003604700454610000000145407340260612015607 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: scrolledframe in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::scrolledframe .sf -width 4i -height 2i -labeltext "Scrolledframe" pack .sf set win [.sf childsite] set all "" foreach option [.sf configure] { if {[llength $option] == 5} { set name [lindex $option 0] set val [lindex $option end] set entry [iwidgets::entryfield $win.#auto] pack $entry -fill x $entry configure -labeltext $name \ -command ".sf configure $name \[$entry get\]" $entry insert 0 $val lappend all $entry } } eval iwidgets::Labeledwidget::alignlabels $all iwidgets-4.1.1/demos/fileselectiondialog0000644003604700454610000000070007340260354016766 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: fileselectiondialog in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::fileselectiondialog .fsd -modality application button .select -text "Files..." -command { if {[.fsd activate]} { puts "selected: [.fsd get]" } else { puts "" } } pack .select -side left iwidgets-4.1.1/demos/pushbutton0000644003604700454610000000101707340260560015175 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: pushbutton in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 . configure -background white iwidgets::pushbutton .pb -text "Push Me" -defaultring yes -command { puts "Hello, World!" } pack .pb -padx 4 -pady 4 checkbutton .default -text "Default ring" -variable defring \ -command {.pb configure -defaultring $defring} pack .default -padx 4 -pady 4 .default invoke iwidgets-4.1.1/demos/promptdialog0000644003604700454610000000105307340260500015455 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: promptdialog in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell button .b -text "Get Password..." -command { if {[.pd activate]} { puts "password: [.pd get]" } else { puts "cancelled" } } pack .b iwidgets::promptdialog .pd -title "Prompt Dialog" -modality application \ -labeltext "Password:" -show "*" .pd hide Apply .pd hide Help iwidgets-4.1.1/demos/panedwindow0000644003604700454610000000154007340260472015304 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: panedwindow in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 . configure -background white iwidgets::panedwindow .pw -width 3i -height 3i pack .pw -padx 4 -pady 4 .pw add "top" set pane [.pw childsite "top"] label $pane.l -text "(put some widgets here)" \ -background black -foreground white pack $pane.l -expand yes -fill both .pw add "bottom" set pane [.pw childsite "bottom"] label $pane.l -text "(put other widgets here)" \ -background black -foreground white pack $pane.l -expand yes -fill both .pw fraction 40 60 iwidgets::optionmenu .orient -labeltext "Orientation:" -command { .pw configure -orient [.orient get] } pack .orient -padx 4 -pady 4 .orient insert end horizontal vertical iwidgets-4.1.1/demos/hyperhelp0000644003604700454610000000076207340260377014776 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: hyperhelp in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell button .push -text "Help..." -command { set win [iwidgets::hyperhelp .#auto -title "Hyperhelp demo" -modality none \ -topics {demo} -helpdir [file join ${iwidgets::library} demos]] $win showtopic demo $win activate } pack .push iwidgets-4.1.1/demos/tabnotebook0000644003604700454610000000424007340260725015275 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: tabnotebook in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell option add *Tabnotebook.backdrop DimGray option add *Scale.width 8 . configure -background white iwidgets::tabnotebook .tnb -width 5i -height 3i pack .tnb -padx 4 -pady 4 # Page #1 # ---------------------------------------------------------------------- set page [.tnb add -label "Personal Info"] iwidgets::entryfield $page.name -labeltext "Name:" -labelpos nw pack $page.name iwidgets::entryfield $page.addr -labeltext "Address:" -labelpos nw pack $page.addr iwidgets::entryfield $page.addr2 -labeltext "City, State:" -labelpos nw pack $page.addr2 iwidgets::entryfield $page.email -labeltext "E-mail:" -labelpos nw pack $page.email # Page #2 # ---------------------------------------------------------------------- set page [.tnb add -label "Favorite Color"] frame $page.sample -width 20 -height 20 \ -borderwidth 2 -relief raised pack $page.sample -fill both -pady 4 scale $page.r -label "Red" -orient horizontal \ -from 0 -to 255 -command "set_color $page" pack $page.r -fill x scale $page.g -label "Green" -orient horizontal \ -from 0 -to 255 -command "set_color $page" pack $page.g -fill x scale $page.b -label "Blue" -orient horizontal \ -from 0 -to 255 -command "set_color $page" pack $page.b -fill x proc set_color {page {val 0}} { set r [$page.r get] set g [$page.g get] set b [$page.b get] set color [format "#%.2x%.2x%.2x" $r $g $b] $page.sample configure -background $color } set_color $page # Page #3 # ---------------------------------------------------------------------- set page [.tnb add -label "Blank Page"] label $page.title -text "(put your widgets here)" \ -background black -foreground white \ -width 25 -height 3 pack $page.title -expand yes -fill both iwidgets::optionmenu .orient -labeltext "Tabs:" -command { .tnb configure -tabpos [.orient get] } pack .orient -padx 4 -pady 4 .orient insert end n s e w .tnb view "Personal Info" .tnb configure -tabpos [.orient get] iwidgets-4.1.1/demos/spintime0000644003604700454610000000043107340260717014615 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: spintime in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::spintime .st pack .st iwidgets-4.1.1/demos/spinner0000644003604700454610000000137707340260710014446 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: spinner in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell proc spinMonth {win step} { set months { January February March April May June July August September October November December } set index [expr [lsearch $months [$win get]] + $step] if {$index < 0} {set index 11} if {$index > 11} {set index 0} $win delete 0 end $win insert 0 [lindex $months $index] } iwidgets::spinner .sm -labeltext "Month:" -width 10 -fixed 10 \ -decrement {spinMonth .sm -1} -increment {spinMonth .sm 1} pack .sm .sm insert 0 "January" iwidgets-4.1.1/demos/timeentry0000644003604700454610000000045707340260744015015 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: timeentry in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 iwidgets::timeentry .de -labeltext "Time:" pack .de -fill x -expand yes -padx 10 -pady 10 iwidgets-4.1.1/demos/messagebox0000644003604700454610000000207507340260437015127 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: messagebox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 . configure -background white iwidgets::messagebox .mb -hscrollmode dynamic -labeltext "Messages" \ -labelpos n -visibleitems 50x8 pack .mb -padx 5 -pady 5 -fill both -expand yes .mb type add ERROR -background red -foreground white -bell 1 .mb type add WARNING -background yellow -foreground black .mb type add INFO -background white -foreground black frame .cntls -background white pack .cntls -padx 5 -pady 5 -fill x button .cntls.error -text "Error" -command { .mb issue "This is an error message in red with a beep" ERROR } pack .cntls.error -side left -expand yes button .cntls.warning -text "Warning" -command { .mb issue "This warning message in yellow" WARNING } pack .cntls.warning -side left -expand yes button .cntls.info -text "Info" -command { .mb issue "This is an informational message" INFO } pack .cntls.info -side left -expand yes iwidgets-4.1.1/demos/spindate0000644003604700454610000000045407340260672014601 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: spindate in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::spindate .sd -monthformat brief pack .sd iwidgets-4.1.1/demos/dateentry0000644003604700454610000000055307340260144014763 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: dateentry in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 proc returnCmd {} { puts [.de get] } iwidgets::dateentry .de -labeltext "Date:" -command returnCmd pack .de -fill x -expand yes -padx 10 -pady 10 iwidgets-4.1.1/demos/selectiondialog0000644003604700454610000000115707340260653016137 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: selectiondialog in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell iwidgets::selectiondialog .sd -modality application .sd configure -selectionlabel "Font:" .sd insert items end Ariel Courier Helvetica Knarly Lucida \ Rumpus Symbol Times "Zapf Dingbats" button .select -text "Font..." -command { if {[.sd activate]} { puts "selected: [.sd get]" } else { puts "cancelled" } } pack .select -side left iwidgets-4.1.1/demos/canvasprintbox0000644003604700454610000000117107340260103016015 0ustar dgp771div# ---------------------------------------------------------------------- # DEMO: canvasprintbox in [incr Widgets] # ---------------------------------------------------------------------- package require Iwidgets 4.0 option add *textBackground seashell # # Make a canvas for the main application: # canvas .c -width 200 -height 200 -background white pack .c .c create rectangle 30 30 150 150 -fill blue .c create oval 70 70 190 190 -fill red .c create polygon 60 50 110 180 10 180 -fill green .c create text 100 5 -anchor n -text "Example Drawing" iwidgets::canvasprintbox .pcb -printcmd "lpr" -pagesize "A4" .pcb setcanvas .c iwidgets-4.1.1/README0000644003604700454610000002350213254754500012616 0ustar dgp771div------------------------------------------------------------------------------ [incr Widgets] - version 4.1.1 ------------------------------------------------------------------------------ Please send general comments, suggestions, and questions to chad_smith@adc.com or itclguy@yahoo.com. Much of this file was written by Mark Ulferts, the original [incr Widgets] guy, several years ago when the Iwidgets were first released. Chad has assumed responsibilities for updates and maintenance. ============================================================================== Copyright (c) 1995 DSC Technologies Corporation ============================================================================== This software is copyrighted by DSC Technologies and private individual contributors. The copyright holder is specifically listed in the header of each file. The following terms apply to all files associated with the software unless explicitly disclaimed in individual files by private contributors. Permission to use, copy, modify, distribute and license this software and its documentation for any purpose, and without fee or written agreement with DSC, is hereby granted, provided that the above copyright notice appears in all copies and that both the copyright notice and warranty disclaimer below appear in supporting documentation, and that the names of DSC Technologies Corporation or DSC Communications Corporation not be used in advertising or publicity pertaining to the software without specific, written prior permission. DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. RESTRICTED RIGHTS: Use, duplication or disclosure by the government is subject to the restrictions as set forth in subparagraph (c) (1) (ii) of the Rights in Technical Data and Computer Software Clause as DFARS 252.227-7013 and FAR 52.227-19. ============================================================================== OVERVIEW ------------------------------------------------------------------------------ - Introduction - Distribution - Web site - Getting started - Contributions - Acknowledgements ------------------------------------------------------------------------------ Introduction ------------------------------------------------------------------------------ [incr Widgets] is an object-oriented mega-widget set which extends Tcl/Tk and is based on [incr Tcl] and [incr Tk]. This set of mega-widgets delivers many new, general purpose widgets like option menus, comboboxes, selection boxes, and various dialogs whose couterparts are found in Motif and Windows. Since [incr Widgets] is based on the [incr Tk] extension, the Tk framework of configuration options, widget commands, and default bindings is maintained. In other words, each [incr Widgets] mega-widget seamlessly blends with the standard Tk widgets. They look, act and feel like Tk widgets. In addition, all [incr Widgets] mega-widgets are object oriented and may themselves be extended, using either inheritance or composition. [incr Widgets] offers a strong object-oriented foundation which addresses the need for a flexible and extensible mega-widget set. Its usage replaces common widget combinations with higher level abstractions, simplifying code, reducing errors, increasing readability, adding productivity, and promoting a singular look-and-feel. The ability to extend [incr Widgets] enables developers to create new mega-widgets based on previous work. In short, [incr Widgets] is a library of reusable mega-widgets that can be easily extended using composition or inheritance, allowing quicker development of large scale applications. Usage drastically reduces development time. New dialogs can be created in hours. Whole applications in a few days. Reuse becomes a reality. Many projects are benefitting frm the intergration of this mega-widget set into their development strategy. [incr Widgets] is an [incr Tcl] and [incr Tk] success story. Good products come from good foundations. Distribution ------------------------------------------------------------------------------ The [incr Widgets] distribution may be downloaded at SourceForge: www.sourceforge.net/projects/incrtcl. The current distribution is version 4.1.1. Web site ------------------------------------------------------------------------------ For the most current news regarding [incr Widgets] please consult the web site - http://incrtcl.sourceforge.net/iwidgets. Many thanks to Brett Schwarz who has done an incredible job overhauling this site. Take a look! Getting started ------------------------------------------------------------------------------ The "doc" directory contains man pages and a technical paper. The man pages are installed under the man directory off your --prefix, and as of version 4.0.1 are prepended with the text "iwidgets_" to easily differentiate [incr Widgets] man pages from those of other extensions. doc/iwidgets.ps ... Updated paper presented at Tcl Workshop 95. doc/*.n ........... Man pages The "demos" directory contains demo scripts for each mega-widget as well as html versions of all the [incr Widgets] man pages. The demos are also installed under the lib directory off your --prefix. demos/catalog ..... Comprehensive demo package which illustrates [incr Widgets] usage additionally displaying the source. demos/html ..... HTML version of the [incr Widgets] man pages. The "tests" directory contains a set of test scripts for [incr Widgets]. They also make for a great demo of the flexiblity of the mega-widgets. Installation ------------------------------------------------------------------------------ NOTE: Having the itcl distribution is a prerequsite to using iwidgets. Thus, if you don't have itcl you need to visit Source Forge to download and install it first. Once you have downloaded and installed [incr Tcl] and [incr Tk], you can proceed with [incr Widgets] installation as follows: 1) Copy the iwidgets4.1.1.tar.gz file to your toplevel [incr Tcl] directory. For example, if you have the itcl3.2.1 distribution in a directory named /usr/local/tcl/itcl3.2.1, then you should copy the iwidgets file to this directory. Note, if you don't copy the iwidgets archive to this directory, then you will need to specify the --with-itcl flag when you run the configure script. 2) Untar/unzip the archive: gunzip -c iwidgets4.1.1.tar.gz |tar xvf - 3) Run the configuration script: cd iwidgets4.1.1 ./configure By default, the configuration script will set things up to be installed in "/usr/local". You can change this by specifying a different "prefix" in the "configure" command. You'll want to use the same value you used for the prefix in the configuration of your [incr Tcl/Tk] distribution. ./configure --prefix=/your/install/path The "configure" script generates a Makefile from the Makefile.in template. Also, as mentioned eariler, you may need to tell the [incr Widgets] where the [incr Tcl] source is located. For example, if your toplevel [incr Tcl] directory is located in /opt/tools/tcl/itcl3.2.1 and you are building the [incr Widgets] in a directory other than this, then you will need to use the following: ./configure --prefix=/your/install/path \ --with-itcl=/opt/tools/tcl/itcl3.2.1 4) Run the test suite: make test 7) Install the [incr Widgets] man pages, demos, and script files. make install Acknowledgements ------------------------------------------------------------------------------ Thanks to Brett Schwarz for a ton of work done on the new [incr Widgets] web site, http://incrtcl.sourceforge.net/iwidgets. Thanks to the original develment team, comprised of Mark Ulferts, Sue Yockey, Bret Schuhmacher, Alfredo Jahn, John Sigler, and Bill Scott. Also thanks to Mark Harrison for his influence, confidence, and ideas. Thanks also to the new set of contributors which include John Tucker, Mitch Gorman, John Reekie, Alfredo Jahn, Ken Copeland, Tako Schotanus, Tony Parent and Michael McLennan Thanks to Michael McLennan, creator of [incr Tcl] and [incr Tk], for the beta copies, training, assistance, and his infectious enthusiasm. Thanks to DSC Communications for picking up the copyright and supporting the public release of this software. Thanks to John P. Davis for creating the [incr Widgets] "Flaming Toaster" logo which can be seen at http://www.tcltk.com/iwidgets Thanks to WebNet Technologies for their assistance is designing the [incr Widgets] web site, as well as hosting it. Special thanks to my wife Karen for supporting this effort and to our two girls, Katelyn and Bailey, who occasionally shared the PC with me. Also thanks to my Discman and its relentless power supply as well as my rock and roll CD collection. No music, no software. -- ____________________________________________________________________________ _/_/ _/_/ _/ _/ _/ Mark L. Ulferts _/ _/ _/ _/ _/ _/ _/ ulferts@swbell.net _/ _/_/ _/ _/ _/ _/ mulferts@austin.dsccc.com _/ _/ _/ _/ _/_/_/ _/ _/_/_/_/ _/ DSC Communications Corp, Austin Texas iwidgets-4.1.1/win/0000755003604700454610000000000013254755147012541 5ustar dgp771diviwidgets-4.1.1/win/makefile.vc0000644003604700454610000000314707302572414014644 0ustar dgp771div# Microsoft Visual C++ 4.0 makefile # # Copyright (c) 1993-1998 Lucent Technologies, Inc. # # RCS #(@) $Id: makefile.vc,v 1.4 2001/05/22 23:23:56 davygrvy Exp $ !include "pkg.vc" # You must define INSTALLDIR on the commandline, if Iwidgets is to be installed # from outside the Itcl source tree. !ifndef INSTALLDIR !include "../../config.vc" !endif ROOT = .. PACKAGE = iwidgets$(IWIDGETS_DOTVERSION) LIB_INSTALL_DIR = $(INSTALLDIR)\lib BIN_INSTALL_DIR = $(INSTALLDIR)\bin INCLUDE_INSTALL_DIR = $(INSTALLDIR)\include PKG_INSTALL_DIR = $(INSTALLDIR)\lib\$(PACKAGE) SCRIPT_INSTALL_DIR = $(PKG_INSTALL_DIR)\scripts DEMO_INSTALL_DIR = $(PKG_INSTALL_DIR)\demos # do nothing for this target. release : install : if not exist "$(INSTALLDIR)" mkdir "$(INSTALLDIR)" if not exist "$(LIB_INSTALL_DIR)" mkdir "$(LIB_INSTALL_DIR)" if not exist "$(PKG_INSTALL_DIR)" mkdir "$(PKG_INSTALL_DIR)" if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)" if not exist "$(DEMO_INSTALL_DIR)" mkdir "$(DEMO_INSTALL_DIR)" if not exist "$(DEMO_INSTALL_DIR)\html" mkdir "$(DEMO_INSTALL_DIR)\html" if not exist "$(DEMO_INSTALL_DIR)\images" mkdir "$(DEMO_INSTALL_DIR)\images" copy $(ROOT)\win\*.tcl "$(PKG_INSTALL_DIR)" copy $(ROOT)\generic\*.* "$(SCRIPT_INSTALL_DIR)" copy $(ROOT)\demos\*.* "$(DEMO_INSTALL_DIR)" copy $(ROOT)\demos\images\*.* "$(DEMO_INSTALL_DIR)\images" copy $(ROOT)\demos\html\*.* "$(DEMO_INSTALL_DIR)\html" copy $(ROOT)\demos\catalog "$(PKG_INSTALL_DIR)\catalog.tcl" echo package ifneeded Iwidgets $(IWIDGETS_DOTVERSION) [list source [file join $$dir iwidgets.tcl]] > \ "$(PKG_INSTALL_DIR)\pkgIndex.tcl" iwidgets-4.1.1/win/pkg.vc0000644003604700454610000000061107351714025013641 0ustar dgp771div###################################################################### # # Global package version numbers for iwidgets. # ###################################################################### # $Id: pkg.vc,v 1.4 2001/09/18 18:53:09 smithc Exp $ ###################################################################### IWIDGETS_DOTVERSION = 4.0.1 IWIDGETS_VERSION = $(IWIDGETS_DOTVERSION:.=) iwidgets-4.1.1/win/iwidgets.tcl0000644003604700454610000000220207351714025015047 0ustar dgp771div# # iwidgets.tcl # ---------------------------------------------------------------------- # Invoked automatically by [incr Tk] upon startup to initialize # the [incr Widgets] package. # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@spd.dsccc.com # # @(#) $Id: iwidgets.tcl,v 1.5 2001/09/18 18:53:09 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 Mark L. Ulferts # ====================================================================== # See the file "license.terms" for information on usage and # redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. package require Tcl 8.1 package require Tk 8.1 package require Itcl 3.2 package require Itk 3.2 namespace eval ::iwidgets { namespace export * variable library [file dirname [info script]] variable version 4.0.1 } lappend auto_path $iwidgets::library \ [file join $iwidgets::library generic] \ [file join $iwidgets::library scripts] package provide Iwidgets $iwidgets::version iwidgets-4.1.1/win/CVS/0000755003604700454610000000000013153526747013174 5ustar dgp771diviwidgets-4.1.1/win/CVS/Repository0000644003604700454610000000001513136711011015247 0ustar dgp771diviwidgets/win iwidgets-4.1.1/win/CVS/Entries0000644003604700454610000000020213153526747014522 0ustar dgp771div/iwidgets.tcl/1.5/Tue Sep 18 18:53:09 2001// /makefile.vc/1.4/Tue May 22 23:23:56 2001// /pkg.vc/1.4/Tue Sep 18 18:53:09 2001// D iwidgets-4.1.1/win/CVS/Root0000644003604700454610000000006613136711011014021 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/tclconfig/0000755003604700454610000000000013254743311013702 5ustar dgp771diviwidgets-4.1.1/tclconfig/install-sh0000755003604700454610000000421510175313477015715 0ustar dgp771div#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5; it is not part of GNU. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" instcmd="$mvprog" chmodcmd="" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog -f" src="" dst="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; *) if [ x"$src" = x ] then src=$1 else dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` fi # Make a temp file name in the proper directory. dstdir=`dirname $dst` dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp # and set any options; do chmod last to preserve setuid bits if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi # Now rename the file to the real destination. $doit $rmcmd $dst $doit $mvcmd $dsttmp $dst exit 0 iwidgets-4.1.1/tclconfig/tcl.m40000644003604700454610000034101310226557501014730 0ustar dgp771div# tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: tcl.m4,v 1.2 2005/04/11 20:34:09 hobbs Exp $ AC_PREREQ(2.50) #------------------------------------------------------------------------ # TEA_PATH_TCLCONFIG -- # # Locate the tclConfig.sh file and perform a sanity check on # the Tcl compile flags # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tcl=... # # Defines the following vars: # TCL_BIN_DIR Full path to the directory containing # the tclConfig.sh file #------------------------------------------------------------------------ AC_DEFUN(TEA_PATH_TCLCONFIG, [ dnl Make sure we are initialized AC_REQUIRE([TEA_INIT]) # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, [ --with-tcl directory containing tcl configuration (tclConfig.sh)], with_tclconfig=${withval}) AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case ${with_tclconfig} in */tclConfig.sh ) if test -f ${with_tclconfig}; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig=`echo ${with_tclconfig} | sed 's!/tclConfig\.sh$!!'` fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)` else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig=`(cd $i; pwd)` break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig=`(cd $i/unix; pwd)` break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_WARN("Cannot find Tcl configuration definitions") exit 0 else no_tcl= TCL_BIN_DIR=${ac_cv_c_tclconfig} AC_MSG_RESULT([found $TCL_BIN_DIR/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- # # Locate the tkConfig.sh file # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tk=... # # Defines the following vars: # TK_BIN_DIR Full path to the directory containing # the tkConfig.sh file #------------------------------------------------------------------------ AC_DEFUN(TEA_PATH_TKCONFIG, [ # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, [ --with-tk directory containing tk configuration (tkConfig.sh)], with_tkconfig=${withval}) AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case ${with_tkconfig} in */tkConfig.sh ) if test -f ${with_tkconfig}; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig=`echo ${with_tkconfig} | sed 's!/tkConfig\.sh$!!'` fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)` else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig=`(cd $i; pwd)` break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig=`(cd $i/unix; pwd)` break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_WARN("Cannot find Tk configuration definitions") exit 0 else no_tk= TK_BIN_DIR=${ac_cv_c_tkconfig} AC_MSG_RESULT([found $TK_BIN_DIR/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Subst the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE # #------------------------------------------------------------------------ AC_DEFUN(TEA_LOAD_TCLCONFIG, [ AC_MSG_CHECKING([for existence of $TCL_BIN_DIR/tclConfig.sh]) if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then AC_MSG_RESULT([loading]) . $TCL_BIN_DIR/tclConfig.sh else AC_MSG_RESULT([file not found]) fi # # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f $TCL_BIN_DIR/Makefile ; then TCL_LIB_SPEC=${TCL_BUILD_LIB_SPEC} TCL_STUB_LIB_SPEC=${TCL_BUILD_STUB_LIB_SPEC} TCL_STUB_LIB_PATH=${TCL_BUILD_STUB_LIB_PATH} fi # # eval is required to do the TCL_DBGX substitution # eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) #AC_SUBST(TCL_BUILD_LIB_SPEC) #AC_SUBST(TCL_BUILD_STUB_LIB_SPEC) ]) #------------------------------------------------------------------------ # TEA_LOAD_TKCONFIG -- # # Load the tkConfig.sh file # # Arguments: # # Requires the following vars to be set: # TK_BIN_DIR # # Results: # # Sets the following vars that should be in tkConfig.sh: # TK_BIN_DIR #------------------------------------------------------------------------ AC_DEFUN(TEA_LOAD_TKCONFIG, [ AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then AC_MSG_RESULT([loading]) . $TK_BIN_DIR/tkConfig.sh else AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) fi # # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f $TK_BIN_DIR/Makefile ; then TK_LIB_SPEC=${TK_BUILD_LIB_SPEC} TK_STUB_LIB_SPEC=${TK_BUILD_STUB_LIB_SPEC} TK_STUB_LIB_PATH=${TK_BUILD_STUB_LIB_PATH} fi # # eval is required to do the TK_DBGX substitution # eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" AC_SUBST(TK_VERSION) AC_SUBST(TK_BIN_DIR) AC_SUBST(TK_SRC_DIR) AC_SUBST(TK_LIB_FILE) AC_SUBST(TK_LIB_FLAG) AC_SUBST(TK_LIB_SPEC) AC_SUBST(TK_STUB_LIB_FILE) AC_SUBST(TK_STUB_LIB_FLAG) AC_SUBST(TK_STUB_LIB_SPEC) AC_SUBST(TK_LIBS) AC_SUBST(TK_XINCLUDES) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries # on Windows. # # Sets the following vars: # SHARED_BUILD Value of 1 or 0 #------------------------------------------------------------------------ AC_DEFUN(TEA_ENABLE_SHARED, [ AC_MSG_CHECKING([how to build libraries]) AC_ARG_ENABLE(shared, [ --enable-shared build and link with shared libraries [--enable-shared]], [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then AC_MSG_RESULT([shared]) SHARED_BUILD=1 else AC_MSG_RESULT([static]) SHARED_BUILD=0 AC_DEFINE(STATIC_BUILD) fi AC_SUBST(SHARED_BUILD) ]) #------------------------------------------------------------------------ # TEA_ENABLE_THREADS -- # # Specify if thread support should be enabled. If "yes" is # specified as an arg (optional), threads are enabled by default. # TCL_THREADS is checked so that if you are compiling an extension # against a threaded core, your extension must be compiled threaded # as well. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # #------------------------------------------------------------------------ AC_DEFUN(TEA_ENABLE_THREADS, [ AC_ARG_ENABLE(threads, [ --enable-threads build with threads], [tcl_ok=$enableval], [tcl_ok=$1]) if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants. AC_DEFINE(USE_THREAD_ALLOC) AC_DEFINE(_REENTRANT) AC_DEFINE(_THREAD_SAFE) AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the # same library, as some systems hide it there until # pthread.h is defined. We could alternatively do an # AC_TRY_COMPILE with pthread.h, but that will work with # libpthread really doesn't exist, like AIX 4.2. # [Bug: 4359] AC_CHECK_LIB(pthread, __pthread_mutex_init, tcl_ok=yes, tcl_ok=no) fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else AC_CHECK_LIB(pthreads, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else AC_CHECK_LIB(c, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "no"; then AC_CHECK_LIB(c_r, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 AC_MSG_WARN("Don t know how to find pthread lib on your system - thread support disabled") fi fi fi fi # Does the pthread-implementation provide # 'pthread_attr_setstacksize' ? ac_saved_libs=$LIBS LIBS="$LIBS $THREADS_LIBS" AC_CHECK_FUNCS(pthread_attr_setstacksize) LIBS=$ac_saved_libs AC_CHECK_FUNCS(readdir_r) fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output AC_MSG_CHECKING([for building with threads]) if test "${TCL_THREADS}" = "1"; then AC_DEFINE(TCL_THREADS) #LIBS="$LIBS $THREADS_LIBS" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no (default)]) fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then AC_MSG_WARN([ Building ${PACKAGE_NAME} without threads enabled, but building against a Tcl that IS thread-enabled.]) fi ;; *) if test "${TCL_THREADS}" = "1"; then AC_MSG_WARN([ --enable-threads requested, but attempting building against a Tcl that is NOT thread-enabled.]) fi ;; esac AC_SUBST(TCL_THREADS) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SYMBOLS -- # # Specify if debugging symbols should be used # Memory (TCL_MEM_DEBUG) debugging can also be enabled. # # Arguments: # none # # Requires the following vars to be set: # CFLAGS_DEBUG # CFLAGS_OPTIMIZE # LDFLAGS_DEBUG # LDFLAGS_OPTIMIZE # # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to CFLAGS_DEBUG if true # Sets to CFLAGS_OPTIMIZE if false # LDFLAGS_DEFAULT Sets to LDFLAGS_DEBUG if true # Sets to LDFLAGS_OPTIMIZE if false # DBGX Formerly used as debug library extension; # always blank now. # #------------------------------------------------------------------------ AC_DEFUN(TEA_ENABLE_SYMBOLS, [ dnl Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) DBGX="" AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, [ --enable-symbols build with debugging symbols [--disable-symbols]], [tcl_ok=$enableval], [tcl_ok=no]) if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE}" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) fi fi if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi AC_SUBST(TCL_DBGX) AC_SUBST(CFLAGS_DEFAULT) AC_SUBST(LDFLAGS_DEFAULT) if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then AC_DEFINE(TCL_MEM_DEBUG) fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then AC_MSG_RESULT([enabled symbols mem debugging]) else AC_MSG_RESULT([enabled $tcl_ok debugging]) fi fi ]) #------------------------------------------------------------------------ # TEA_ENABLE_LANGINFO -- # # Allows use of modern nl_langinfo check for better l10n. # This is only relevant for Unix. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. # #------------------------------------------------------------------------ AC_DEFUN(TEA_ENABLE_LANGINFO, [ AC_ARG_ENABLE(langinfo, [ --enable-langinfo use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic], [langinfo_ok=$enableval], [langinfo_ok=yes]) HAVE_LANGINFO=0 if test "$langinfo_ok" = "yes"; then if test "$langinfo_ok" = "yes"; then AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) fi fi AC_MSG_CHECKING([whether to use nl_langinfo]) if test "$langinfo_ok" = "yes"; then AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);],[langinfo_ok=yes],[langinfo_ok=no]) if test "$langinfo_ok" = "no"; then langinfo_ok="no (could not compile with nl_langinfo)"; fi if test "$langinfo_ok" = "yes"; then AC_DEFINE(HAVE_LANGINFO) fi fi AC_MSG_RESULT([$langinfo_ok]) ]) #-------------------------------------------------------------------- # TEA_CONFIG_CFLAGS # # Try to determine the proper flags to pass to the compiler # for building shared libraries and other such nonsense. # # Arguments: # none # # Results: # # Defines the following vars: # # DL_OBJS - Name of the object file that implements dynamic # loading for Tcl on this system. # DL_LIBS - Library file(s) to include in tclsh and other base # applications in order for the "load" command to work. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol is # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # TCL_LIB_FILE - Name of the file that contains the Tcl library, such # as libtcl7.8.so or libtcl7.8.a. # TCL_LIB_SUFFIX -Specifies everything that comes after the "libtcl" # in the shared library name, using the # ${PACKAGE_VERSION} variable to put the version in # the right place. This is used by platforms that # need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, # since it needs to have a version after the .so, and # ${PACKAGE_VERSION}.a on AIX, since the Tcl shared # library needs to have a .a extension whereas shared # objects for loadable extensions have a .so # extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # TCL_NEEDS_EXP_FILE - # 1 means that an export file is needed to link to a # shared library. # TCL_EXP_FILE - The name of the installed export / import file which # should be used to link to the Tcl shared library. # Empty if Tcl is unshared. # TCL_BUILD_EXP_FILE - # The name of the built export / import file which # should be used to link to the Tcl shared library. # Empty if Tcl is unshared. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - We add CFLAGS to pass to the compiler # # Subst's the following vars: # DL_LIBS # CFLAGS_DEBUG # CFLAGS_OPTIMIZE # CFLAGS_WARNING # # STLIB_LD # SHLIB_LD # SHLIB_CFLAGS # LDFLAGS_DEBUG # LDFLAGS_OPTIMIZE #-------------------------------------------------------------------- AC_DEFUN(TEA_CONFIG_CFLAGS, [ dnl Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0: Enable 64 bit support? AC_MSG_CHECKING([if 64bit support is enabled]) AC_ARG_ENABLE(64bit,[ --enable-64bit enable 64bit support (where applicable)], [do64bit=$enableval], [do64bit=no]) AC_MSG_RESULT([$do64bit]) # Step 0.b: Enable Solaris 64 bit VIS support? AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) AC_ARG_ENABLE(64bit-vis,[ --enable-64bit-vis enable 64bit Sparc VIS support], [do64bitVIS=$enableval], [do64bitVIS=no]) AC_MSG_RESULT([$do64bitVIS]) if test "$do64bitVIS" = "yes"; then # Force 64bit on with VIS do64bit=yes fi # Step 0.c: Cross-compiling options for Windows/CE builds? if test "${TEA_PLATFORM}" = "windows" ; then AC_MSG_CHECKING([if Windows/CE build is requested]) AC_ARG_ENABLE(wince,[ --enable-wince enable Win/CE support (where applicable)], [doWince=$enableval], [doWince=no]) AC_MSG_RESULT($doWince) fi # Step 1: set the variable "system" to hold the name and version number # for the system. This can usually be done via the "uname" command, but # there are a few systems, like Next, where this doesn't work. AC_MSG_CHECKING([system version (for dynamic loading)]) if test -f /usr/lib/NextStep/software_version; then system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` else system=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_RESULT([unknown (can't find uname command)]) system=unknown else # Special check for weird MP-RAS system (uname returns weird # results, and the version is kept in special file). if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then system=MP-RAS-`awk '{print $3}' /etc/.relid'` fi if test "`uname -s`" = "AIX" ; then system=AIX-`uname -v`.`uname -r` fi if test "${TEA_PLATFORM}" = "windows" ; then system=windows fi AC_MSG_RESULT([$system]) fi fi # Step 2: check for existence of -ldl library. This is needed because # Linux can use either -ldl or -ldld for dynamic loading. AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no) # Step 3: set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and CC_SEARCH_FLAGS becomes LD_SEARCH_FLAGS for us # (and we have no CC_SEARCH_FLAGS). do64bit_ok=no LDFLAGS_ORIG="$LDFLAGS" TCL_EXPORT_FILE_SUFFIX="" UNSHARED_LIB_SUFFIX="" TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g if test "$GCC" = "yes" ; then CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall -Wno-implicit-int" else CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" fi TCL_NEEDS_EXP_FILE=0 TCL_BUILD_EXP_FILE="" TCL_EXP_FILE="" dnl FIXME: Replace AC_CHECK_PROG with AC_CHECK_TOOL once cross compiling is fixed. dnl AC_CHECK_TOOL(AR, ar, :) AC_CHECK_PROG(AR, ar, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" case $system in windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. if test "$do64bit" = "yes" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft SDK" fi # Ensure that this path has no spaces to work in autoconf TEA_PATH_NOSPACE(MSSDK, ${MSSDK}) if test ! -d "${MSSDK}/bin/win64" ; then AC_MSG_WARN([could not find 64-bit SDK to enable 64bit mode]) do64bit="no" else do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" = "yes" ; then AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible]) fi if test "$GCC" = "yes" ; then AC_MSG_ERROR([Windows/CE and GCC builds incompatible]) fi TEA_PATH_CELIB # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \ if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \ if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \ if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi # Ensure that this path has no spaces to work in autoconf TEA_PATH_NOSPACE(WCEROOT, ${WCEROOT}) TEA_PATH_NOSPACE(SDKROOT, ${SDKROOT}) if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]]) doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" = "yes" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="${MSSDK}/Bin/Win64/cl.exe" CFLAGS="${CFLAGS} -I${MSSDK}/Include/prerelease \ -I${MSSDK}/Include/Win64/crt \ -I${MSSDK}/Include" RC="${MSSDK}/bin/rc.exe" lflags="-MACHINE:IA64 -LIBPATH:${MSSDK}/Lib/IA64 \ -LIBPATH:${MSSDK}/Lib/Prerelease/IA64 -nologo" LINKBIN="${MSSDK}/bin/win64/link.exe" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="${CEBINROOT}/cl.exe" else CC="${CEBINROOT}/cl${ARCH}.exe" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="${WCEROOT}/Common/EVC/bin/rc.exe" arch=`echo ${ARCH} | awk '{print tolower([$]0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do AC_DEFINE_UNQUOTED($i) done AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION) AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION) CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="${CEBINROOT}/link.exe" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode RC="windres" CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD="$CC -shared" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # This essentially turns it all on. LDFLAGS_DEBUG="-debug:full -debugtype:both -warn:2" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots # Bogus to avoid getting this turned off DL_OBJS="tclLoadNone.obj" ;; AIX-*) if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then # AIX requires the _r compiler when gcc isn't being used if test "${CC}" != "cc_r" ; then CC=${CC}_r fi AC_MSG_RESULT([Using $CC for compiling with threads]) fi LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadDl.o" LD_LIBRARY_PATH_VAR="LIBPATH" # AIX v<=4.1 has some different flags than 4.2+ if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then #LIBOBJS="$LIBOBJS tclLoadAix.o" AC_LIBOBJ([tclLoadAix]) DL_LIBS="-lld" fi # Check to enable 64-bit flags for compiler/linker on AIX 4+ if test "$do64bit" = "yes" -a "`uname -v`" -gt "3" ; then if test "$GCC" = "yes" ; then AC_MSG_WARN("64bit mode not supported with GCC on $system") else do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS="$LDFLAGS -q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" fi fi if test "`uname -m`" = "ia64" ; then # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" # AIX-5 has dl* in libc.so DL_LIBS="" if test "$GCC" = "yes" ; then LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi else if test "$GCC" = "yes" ; then SHLIB_LD="gcc -shared" else SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry" fi SHLIB_LD="${TCL_SRC_DIR}/unix/ldAix ${SHLIB_LD} ${SHLIB_LD_FLAGS}" DL_LIBS="-ldl" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' TCL_NEEDS_EXP_FILE=1 TCL_EXPORT_FILE_SUFFIX='${PACKAGE_VERSION}.exp' fi # On AIX <=v4 systems, libbsd.a has to be linked in to support # non-blocking file IO. This library has to be linked in after # the MATH_LIBS or it breaks the pow() function. The way to # insure proper sequencing, is to add it to the tail of MATH_LIBS. # This library also supplies gettimeofday. # # AIX does not have a timezone field in struct tm. When the AIX # bsd library is used, the timezone global and the gettimeofday # methods are to be avoided for timezone deduction instead, we # deduce the timezone by comparing the localtime result on a # known GMT value. AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes, libbsd=no) if test $libbsd = yes; then MATH_LIBS="$MATH_LIBS -lbsd" AC_DEFINE(USE_DELTA_FOR_TZ) fi ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -nostart" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" ;; BSD/OS-2.1*|BSD/OS-3*) SHLIB_CFLAGS="" SHLIB_LD="shlicc -r" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS="" ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD="cc -shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="$LDFLAGS -export-dynamic" LD_SEARCH_FLAGS="" ;; dgux*) SHLIB_CFLAGS="-K PIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS="" ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED) SHLIB_SUFFIX=".sl" AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = yes; then SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadShl.o" DL_LIBS="-ldld" LDFLAGS="$LDFLAGS -Wl,-E" LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" fi if test "$GCC" = "yes" ; then SHLIB_LD="gcc -shared" SHLIB_LD_LIBS='${LIBS}' LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' fi # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then hpux_arch=`${CC} -dumpmachine` case $hpux_arch in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD="${CC} -shared" SHLIB_LD_LIBS='${LIBS}' ;; *) AC_MSG_WARN("64bit mode not supported with GCC on $system") ;; esac else do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS="$LDFLAGS +DD64" fi fi ;; HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) SHLIB_SUFFIX=".sl" AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = yes; then SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" SHLIB_LD_LIBS="" DL_OBJS="tclLoadShl.o" DL_LIBS="-ldld" LDFLAGS="$LDFLAGS -Wl,-E" LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' fi LD_LIBRARY_PATH_VAR="SHLIB_PATH" ;; IRIX-4.*) SHLIB_CFLAGS="-G 0" SHLIB_SUFFIX=".a" SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadAout.o" DL_LIBS="" LDFLAGS="$LDFLAGS -Wl,-D,08000000" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' SHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' ;; IRIX-5.*) SHLIB_CFLAGS="" SHLIB_LD="ld -shared -rdata_shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' ;; IRIX-6.*|IRIX64-6.5*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' if test "$GCC" = "yes" ; then CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" else case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then AC_MSG_WARN([64bit mode not supported by gcc]) else do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS="$LDFLAGS -64" fi fi ;; Linux*) SHLIB_CFLAGS="-fPIC" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings # when you inline the string and math operations. Turn this off to # get rid of the warnings. #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES" if test "$have_dl" = yes; then SHLIB_LD="${CC} -shared" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="$LDFLAGS -Wl,--export-dynamic" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' else AC_CHECK_HEADER(dld.h, [ SHLIB_LD="ld -shared" DL_OBJS="tclLoadDld.o" DL_LIBS="-ldld" LD_SEARCH_FLAGS=""]) fi if test "`uname -m`" = "alpha" ; then CFLAGS="$CFLAGS -mieee" fi # The combo of gcc + glibc has a bug related # to inlining of functions like strtod(). The # -fno-builtin flag should address this problem # but it does not work. The -fno-inline flag # is kind of overkill but it works. # Disable inlining only when one of the # files in compat/*.c is being linked in. if test x"${USE_COMPAT}" != x ; then CFLAGS="$CFLAGS -fno-inline" fi ;; GNU*) SHLIB_CFLAGS="-fPIC" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" if test "$have_dl" = yes; then SHLIB_LD="${CC} -shared" DL_OBJS="" DL_LIBS="-ldl" LDFLAGS="$LDFLAGS -Wl,--export-dynamic" LD_SEARCH_FLAGS="" else AC_CHECK_HEADER(dld.h, [ SHLIB_LD="ld -shared" DL_OBJS="" DL_LIBS="-ldld" LD_SEARCH_FLAGS=""]) fi if test "`uname -m`" = "alpha" ; then CFLAGS="$CFLAGS -mieee" fi ;; MP-RAS-02*) SHLIB_CFLAGS="-K PIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS="" ;; MP-RAS-*) SHLIB_CFLAGS="-K PIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="$LDFLAGS -Wl,-Bexport" LD_SEARCH_FLAGS="" ;; NetBSD-*|FreeBSD-[[1-2]].*) # Not available on all versions: check for include file. AC_CHECK_HEADER(dlfcn.h, [ # NetBSD/SPARC needs -fPIC, -fpic will not do. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' AC_MSG_CHECKING([for ELF]) AC_EGREP_CPP(yes, [ #ifdef __ELF__ yes #endif ], AC_MSG_RESULT([yes]) SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so', AC_MSG_RESULT([no]) SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' ) ], [ SHLIB_CFLAGS="" SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".a" DL_OBJS="tclLoadAout.o" DL_LIBS="" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' ]) # FreeBSD doesn't handle version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; OpenBSD-*) SHLIB_LD="${CC} -shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS="" AC_MSG_CHECKING(for ELF) AC_EGREP_CPP(yes, [ #ifdef __ELF__ yes #endif ], [AC_MSG_RESULT(yes) SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0'], [AC_MSG_RESULT(no) SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0'] ) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; FreeBSD-*) # FreeBSD 3.* and greater have ELF. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="$LDFLAGS -export-dynamic" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' if test "${TCL_THREADS}" = "1" ; then # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi case $system in FreeBSD-3.*) # FreeBSD-3 doesn't handle version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Darwin-*) SHLIB_CFLAGS="-fno-common" SHLIB_LD="cc -dynamiclib \${LDFLAGS}" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".dylib" DL_OBJS="tclLoadDyld.o" DL_LIBS="" LDFLAGS="$LDFLAGS -prebind -Wl,-search_paths_first" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" CFLAGS_OPTIMIZE="-Os" ;; NEXTSTEP-*) SHLIB_CFLAGS="" SHLIB_LD="cc -nostdlib -r" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadNext.o" DL_LIBS="" LD_SEARCH_FLAGS="" ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS) # needed in sys/socket.h ;; OSF1-1.0|OSF1-1.1|OSF1-1.2) # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1 SHLIB_CFLAGS="" # Hack: make package name same as library name SHLIB_LD='ld -R -export $@:' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadOSF.o" DL_LIBS="" LD_SEARCH_FLAGS="" ;; OSF1-1.*) # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 SHLIB_CFLAGS="-fPIC" if test "$SHARED_BUILD" = "1" ; then SHLIB_LD="ld -shared" else SHLIB_LD="ld -non_shared" fi SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS="" ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" if test "$SHARED_BUILD" = "1" ; then SHLIB_LD='ld -shared -expect_unresolved "*"' else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' if test "$GCC" = "yes" ; then CFLAGS="$CFLAGS -mieee" else CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" fi # see pthread_intro(3) for pthread support on osf1, k.furukawa if test "${TCL_THREADS}" = "1" ; then CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` if test "$GCC" = "yes" ; then LIBS="$LIBS -lpthread -lmach -lexc" else CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi fi ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" # dlopen is in -lc on QNX DL_LIBS="" LD_SEARCH_FLAGS="" ;; RISCos-*) SHLIB_CFLAGS="-G 0" SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".a" DL_OBJS="tclLoadAout.o" DL_LIBS="" LDFLAGS="$LDFLAGS -Wl,-D,08000000" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' ;; SCO_SV-3.2*) # Note, dlopen is available only on SCO 3.2.5 and greater. However, # this test works, since "uname -s" was non-standard in 3.2.4 and # below. if test "$GCC" = "yes" ; then SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" else SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" fi SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS="" ;; SINIX*5.4*) SHLIB_CFLAGS="-K PIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS="" ;; SunOS-4*) SHLIB_CFLAGS="-PIC" SHLIB_LD="ld" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' # SunOS can't handle version numbers with dots in them in library # specs, like -ltcl7.5, so use -ltcl75 instead. Also, it # requires an extra version number at the end of .so file names. # So, the library has to have a name like libtcl75.so.1.0 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; SunOS-5.[[0-6]]*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) SHLIB_CFLAGS="-KPIC" # Note: need the LIBS below, otherwise Tk won't find Tcl's # symbols when dynamically loaded into tclsh. SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" if test "$GCC" = "yes" ; then SHLIB_LD="$CC -shared" LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else SHLIB_LD="/usr/ccs/bin/ld -G -z text" LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' fi ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then arch=`isainfo` if test "$arch" = "sparcv9 sparc" ; then if test "$GCC" = "yes" ; then if test "`gcc -dumpversion` | awk -F. '{print $1}'" -lt "3" ; then AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) else do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" fi else do64bit_ok=yes if test "$do64bitVIS" = "yes" ; then CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS="$LDFLAGS -xarch=v9a" else CFLAGS="$CFLAGS -xarch=v9" LDFLAGS="$LDFLAGS -xarch=v9" fi fi else AC_MSG_WARN("64bit mode only supported sparcv9 system") fi fi # Note: need the LIBS below, otherwise Tk won't find Tcl's # symbols when dynamically loaded into tclsh. SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" if test "$GCC" = "yes" ; then SHLIB_LD="$CC -shared" LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' if test "$do64bit" = "yes" ; then # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS},-R,$v9gcclibdir" fi else SHLIB_LD="/usr/ccs/bin/ld -G -z text" LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' fi ;; ULTRIX-4.*) SHLIB_CFLAGS="-G 0" SHLIB_SUFFIX=".a" SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadAout.o" DL_LIBS="" LDFLAGS="$LDFLAGS -Wl,-D,08000000" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' if test "$GCC" != "yes" ; then CFLAGS="$CFLAGS -DHAVE_TZSET -std1" fi ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. hold_ldflags=$LDFLAGS AC_MSG_CHECKING(for ld accepts -Bexport flag) LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], [found=yes], [LDFLAGS=$hold_ldflags found=no]) AC_MSG_RESULT([$found]) LD_SEARCH_FLAGS="" ;; esac if test "$do64bit" = "yes" -a "$do64bit_ok" = "no" ; then AC_MSG_WARN("64bit support being disabled -- don\'t know magic for this platform") fi # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic # Loading for Tcl -- What Became of It?". Proc. 2nd Tcl/Tk Workshop, # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need # to determine which of several header files defines the a.out file # format (a.out.h, sys/exec.h, or sys/exec_aout.h). At present, we # support only a file format that is more or less version-7-compatible. # In particular, # - a.out files must begin with `struct exec'. # - the N_TXTOFF on the `struct exec' must compute the seek address # of the text segment # - The `struct exec' must contain a_magic, a_text, a_data, a_bss # and a_entry fields. # The following compilation should succeed if and only if either sys/exec.h # or a.out.h is usable for the purpose. # # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the # `struct exec' includes a second header that contains information that # duplicates the v7 fields that are needed. if test "x$DL_OBJS" = "xtclLoadAout.o" ; then AC_MSG_CHECKING([sys/exec.h]) AC_TRY_COMPILE([#include ],[ struct exec foo; unsigned long seek; int flag; #if defined(__mips) || defined(mips) seek = N_TXTOFF (foo.ex_f, foo.ex_o); #else seek = N_TXTOFF (foo); #endif flag = (foo.a_magic == OMAGIC); return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; ], tcl_ok=usable, tcl_ok=unusable) AC_MSG_RESULT([$tcl_ok]) if test $tcl_ok = usable; then AC_DEFINE(USE_SYS_EXEC_H) else AC_MSG_CHECKING([a.out.h]) AC_TRY_COMPILE([#include ],[ struct exec foo; unsigned long seek; int flag; #if defined(__mips) || defined(mips) seek = N_TXTOFF (foo.ex_f, foo.ex_o); #else seek = N_TXTOFF (foo); #endif flag = (foo.a_magic == OMAGIC); return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; ], tcl_ok=usable, tcl_ok=unusable) AC_MSG_RESULT([$tcl_ok]) if test $tcl_ok = usable; then AC_DEFINE(USE_A_OUT_H) else AC_MSG_CHECKING([sys/exec_aout.h]) AC_TRY_COMPILE([#include ],[ struct exec foo; unsigned long seek; int flag; #if defined(__mips) || defined(mips) seek = N_TXTOFF (foo.ex_f, foo.ex_o); #else seek = N_TXTOFF (foo); #endif flag = (foo.a_midmag == OMAGIC); return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; ], tcl_ok=usable, tcl_ok=unusable) AC_MSG_RESULT([$tcl_ok]) if test $tcl_ok = usable; then AC_DEFINE(USE_SYS_EXEC_AOUT_H) else DL_OBJS="" fi fi fi fi # Step 5: disable dynamic loading if requested via a command-line switch. AC_ARG_ENABLE(load, [ --disable-load disallow dynamic loading and "load" command], [tcl_ok=$enableval], [tcl_ok=yes]) if test "$tcl_ok" = "no"; then DL_OBJS="" fi if test "x$DL_OBJS" != "x" ; then BUILD_DLTEST="\$(DLTEST_TARGETS)" else echo "Can't figure out how to do dynamic loading or shared libraries" echo "on this system." SHLIB_CFLAGS="" SHLIB_LD="" SHLIB_SUFFIX="" DL_OBJS="tclLoadNone.o" DL_LIBS="" LDFLAGS="$LDFLAGS_ORIG" LD_SEARCH_FLAGS="" BUILD_DLTEST="" fi # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. if test "$DL_OBJS" != "tclLoadNone.o" ; then if test "$GCC" = "yes" ; then case $system in AIX-*) ;; BSD/OS*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*) ;; Darwin-*) ;; RISCos-*) ;; SCO_SV-3.2*) ;; ULTRIX-4.*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac fi fi if test "$SHARED_LIB_SUFFIX" = "" ; then SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' fi if test "$UNSHARED_LIB_SUFFIX" = "" ; then UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' fi AC_SUBST(DL_LIBS) AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) AC_SUBST(SHLIB_CFLAGS) AC_SUBST(SHLIB_LD_LIBS) AC_SUBST(LDFLAGS_DEBUG) AC_SUBST(LDFLAGS_OPTIMIZE) AC_SUBST(LD_LIBRARY_PATH_VAR) # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary TEA_TCL_EARLY_FLAGS TEA_TCL_64BIT_FLAGS ]) #-------------------------------------------------------------------- # TEA_SERIAL_PORT # # Determine which interface to use to talk to the serial port. # Note that #include lines must begin in leftmost column for # some compilers to recognize them as preprocessor directives, # and some build environments have stdin not pointing at a # pseudo-terminal (usually /dev/null instead.) # # Arguments: # none # # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY # #-------------------------------------------------------------------- AC_DEFUN(TEA_SERIAL_PORT, [ AC_CHECK_HEADERS(sys/modem.h) AC_MSG_CHECKING([termios vs. termio vs. sgtty]) AC_CACHE_VAL(tcl_cv_api_serial, [ AC_TRY_RUN([ #include int main() { struct termios t; if (tcgetattr(0, &t) == 0) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include #include int main() { struct termios t; if (tcgetattr(0, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi]) case $tcl_cv_api_serial in termios) AC_DEFINE(USE_TERMIOS);; termio) AC_DEFINE(USE_TERMIO);; sgtty) AC_DEFINE(USE_SGTTY);; esac AC_MSG_RESULT([$tcl_cv_api_serial]) ]) #-------------------------------------------------------------------- # TEA_MISSING_POSIX_HEADERS # # Supply substitutes for missing POSIX header files. Special # notes: # - stdlib.h doesn't define strtol, strtoul, or # strtod insome versions of SunOS # - some versions of string.h don't declare procedures such # as strstr # # Arguments: # none # # Results: # # Defines some of the following vars: # NO_DIRENT_H # NO_ERRNO_H # NO_VALUES_H # HAVE_LIMITS_H or NO_LIMITS_H # NO_STDLIB_H # NO_STRING_H # NO_SYS_WAIT_H # NO_DLFCN_H # HAVE_SYS_PARAM_H # # HAVE_STRING_H ? # # tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and # CHECK on limits.h #-------------------------------------------------------------------- AC_DEFUN(TEA_MISSING_POSIX_HEADERS, [ AC_MSG_CHECKING([dirent.h]) AC_TRY_LINK([#include #include ], [ #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ], tcl_ok=yes, tcl_ok=no) if test $tcl_ok = no; then AC_DEFINE(NO_DIRENT_H) fi AC_MSG_RESULT([$tcl_ok]) AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H)]) AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H)]) AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H)]) AC_CHECK_HEADER(limits.h, [AC_DEFINE(HAVE_LIMITS_H)], [AC_DEFINE(NO_LIMITS_H)]) AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) if test $tcl_ok = 0; then AC_DEFINE(NO_STDLIB_H) fi AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0) AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0) # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then AC_DEFINE(NO_STRING_H) fi AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H)]) AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H)]) # OS/390 lacks sys/param.h (and doesn't need it, by chance). AC_HAVE_HEADERS(sys/param.h) ]) #-------------------------------------------------------------------- # TEA_PATH_X # # Locate the X11 header files and the X11 library archive. Try # the ac_path_x macro first, but if it doesn't find the X stuff # (e.g. because there's no xmkmf program) then check through # a list of possible directories. Under some conditions the # autoconf macro will return an include directory that contains # no include files, so double-check its result just to be safe. # # This should be called after TEA_CONFIG_CFLAGS as setting the # LIBS line can confuse some configure macro magic. # # Arguments: # none # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # LIBS (appends to) # TEA_WINDOWINGSYSTEM # #-------------------------------------------------------------------- AC_DEFUN(TEA_PATH_X, [ if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) AC_DEFINE(MAC_OSX_TK) TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_PATH_UNIX_X TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="windows" fi ]) AC_DEFUN(TEA_PATH_UNIX_X, [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include ], , not_really_there="yes") else if test ! -r $x_includes/X11/Intrinsic.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) XINCLUDES="# no special path needed" AC_TRY_CPP([#include ], , XINCLUDES="nope") if test "$XINCLUDES" = nope; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Intrinsic.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" break fi done fi else if test "$x_includes" != ""; then XINCLUDES=-I$x_includes else XINCLUDES="# no special path needed" fi fi if test "$XINCLUDES" = nope; then AC_MSG_RESULT([could not find any!]) XINCLUDES="# no include files found" fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then AC_MSG_RESULT([$i]) XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) fi if test "$XLIBSW" = nope ; then AC_MSG_RESULT([could not find any! Using -lX11.]) XLIBSW=-lX11 fi if test x"${XLIBSW}" != x ; then PKG_LIBS="${PKG_LIBS} ${XLIBSW}" fi ]) #-------------------------------------------------------------------- # TEA_BLOCKING_STYLE # # The statements below check for systems where POSIX-style # non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. # On these systems (mostly older ones), use the old BSD-style # FIONBIO approach instead. # # Arguments: # none # # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK # #-------------------------------------------------------------------- AC_DEFUN(TEA_BLOCKING_STYLE, [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) if test -f /usr/lib/NextStep/software_version; then system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` else system=`uname -s`-`uname -r` if test "$?" -ne 0 ; then system=unknown else # Special check for weird MP-RAS system (uname returns weird # results, and the version is kept in special file). if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then system=MP-RAS-`awk '{print $3}' /etc/.relid'` fi if test "`uname -s`" = "AIX" ; then system=AIX-`uname -v`.`uname -r` fi fi fi case $system in # There used to be code here to use FIONBIO under AIX. However, it # was reported that FIONBIO doesn't work under AIX 3.2.5. Since # using O_NONBLOCK seems fine under AIX 4.*, I removed the FIONBIO # code (JO, 5/31/97). OSF*) AC_DEFINE(USE_FIONBIO) AC_MSG_RESULT([FIONBIO]) ;; SunOS-4*) AC_DEFINE(USE_FIONBIO) AC_MSG_RESULT([FIONBIO]) ;; ULTRIX-4.*) AC_DEFINE(USE_FIONBIO) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac ]) #-------------------------------------------------------------------- # TEA_TIME_HANLDER # # Checks how the system deals with time.h, what time structures # are used on the system, and what fields the structures have. # # Arguments: # none # # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR # #-------------------------------------------------------------------- AC_DEFUN(TEA_TIME_HANDLER, [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE AC_CHECK_FUNCS(gmtime_r localtime_r) AC_MSG_CHECKING([tm_tzadj in struct tm]) AC_CACHE_VAL(tcl_cv_member_tm_tzadj, AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;], tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)) AC_MSG_RESULT([$tcl_cv_member_tm_tzadj]) if test $tcl_cv_member_tm_tzadj = yes ; then AC_DEFINE(HAVE_TM_TZADJ) fi AC_MSG_CHECKING([tm_gmtoff in struct tm]) AC_CACHE_VAL(tcl_cv_member_tm_gmtoff, AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;], tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)) AC_MSG_RESULT([$tcl_cv_member_tm_gmtoff]) if test $tcl_cv_member_tm_gmtoff = yes ; then AC_DEFINE(HAVE_TM_GMTOFF) fi # # Its important to include time.h in this check, as some systems # (like convex) have timezone functions, etc. # AC_MSG_CHECKING([long timezone variable]) AC_CACHE_VAL(tcl_cv_var_timezone, AC_TRY_COMPILE([#include ], [extern long timezone; timezone += 1; exit (0);], tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)) AC_MSG_RESULT([$tcl_cv_timezone_long]) if test $tcl_cv_timezone_long = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR) else # # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. # AC_MSG_CHECKING([time_t timezone variable]) AC_CACHE_VAL(tcl_cv_timezone_time, AC_TRY_COMPILE([#include ], [extern time_t timezone; timezone += 1; exit (0);], tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)) AC_MSG_RESULT([$tcl_cv_timezone_time]) if test $tcl_cv_timezone_time = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR) fi fi ]) #-------------------------------------------------------------------- # TEA_BUGGY_STRTOD # # Under Solaris 2.4, strtod returns the wrong value for the # terminating character under some conditions. Check for this # and if the problem exists use a substitute procedure # "fixstrtod" (provided by Tcl) that corrects the error. # Also, on Compaq's Tru64 Unix 5.0, # strtod(" ") returns 0.0 instead of a failure to convert. # # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) # #-------------------------------------------------------------------- AC_DEFUN(TEA_BUGGY_STRTOD, [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_MSG_CHECKING([for Solaris2.4/Tru64 strtod bugs]) AC_TRY_RUN([ extern double strtod(); int main() { char *string = "NaN", *spaceString = " "; char *term; double value; value = strtod(string, &term); if ((term != string) && (term[-1] == 0)) { exit(1); } value = strtod(spaceString, &term); if (term == (spaceString+1)) { exit(1); } exit(0); }], tcl_ok=1, tcl_ok=0, tcl_ok=0) if test "$tcl_ok" = 1; then AC_MSG_RESULT([ok]) else AC_MSG_RESULT([buggy]) #LIBOBJS="$LIBOBJS fixstrtod.o" AC_LIBOBJ([fixstrtod]) USE_COMPAT=1 AC_DEFINE(strtod, fixstrtod) fi fi ]) #-------------------------------------------------------------------- # TEA_TCL_LINK_LIBS # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS # LIBS # MATH_LIBS # # Results: # # Subst's the following var: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H # #-------------------------------------------------------------------- AC_DEFUN(TEA_TCL_LINK_LIBS, [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) AC_CHECK_HEADER(net/errno.h, AC_DEFINE(HAVE_NET_ERRNO_H)) #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) if test "$tcl_checkSocket" = 1; then AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) fi AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, [LIBS="$LIBS -lnsl"])]) # Don't perform the eval of the libraries here because DL_LIBS # won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) #-------------------------------------------------------------------- # TEA_TCL_EARLY_FLAGS # # Check for what flags are needed to be passed so the correct OS # features are available. # # Arguments: # None # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # #-------------------------------------------------------------------- AC_DEFUN(TEA_TCL_EARLY_FLAG,[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then AC_DEFINE($1) tcl_flags="$tcl_flags $1" fi ]) AC_DEFUN(TEA_TCL_EARLY_FLAGS,[ AC_MSG_CHECKING([for required early compiler flags]) tcl_flags="" TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ], [char *p = (char *)strtoll; char *q = (char *)strtoull;]) TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ], [struct stat64 buf; int i = stat64("/", &buf);]) if test "x${tcl_flags}" = "x" ; then AC_MSG_RESULT([none]) else AC_MSG_RESULT([${tcl_flags}]) fi ]) #-------------------------------------------------------------------- # TEA_TCL_64BIT_FLAGS # # Check for what is defined in the way of 64-bit features. # # Arguments: # None # # Results: # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T # #-------------------------------------------------------------------- AC_DEFUN(TEA_TCL_64BIT_FLAGS, [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # We actually want to use the default tcl.h checks in this # case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_MSG_CHECKING([for struct dirent64]) AC_CACHE_VAL(tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include #include ],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64) fi AC_MSG_RESULT([${tcl_cv_struct_dirent64}]) AC_MSG_CHECKING([for struct stat64]) AC_CACHE_VAL(tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include ],[struct stat64 p; ], tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) if test "x${tcl_cv_struct_stat64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_STAT64) fi AC_MSG_RESULT([${tcl_cv_struct_stat64}]) AC_MSG_CHECKING([for off64_t]) AC_CACHE_VAL(tcl_cv_type_off64_t,[ AC_TRY_COMPILE([#include ],[off64_t offset; ], tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) if test "x${tcl_cv_type_off64_t}" = "xyes" ; then AC_DEFINE(HAVE_TYPE_OFF64_T) fi AC_MSG_RESULT([${tcl_cv_type_off64_t}]) fi ]) ## ## Here ends the standard Tcl configuration bits and starts the ## TEA specific functions ## #------------------------------------------------------------------------ # TEA_INIT -- # # Init various Tcl Extension Architecture (TEA) variables. # This should be the first called TEA_* macro. # # Arguments: # none # # Results: # # Defines and substs the following vars: # CYGPATH # EXEEXT # Defines only: # TEA_INITED # TEA_PLATFORM (windows or unix) # # "cygpath" is used on windows to generate native path names for include # files. These variables should only be used with the compiler and linker # since they generate native path names. # # EXEEXT # Select the executable extension based on the host type. This # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN(TEA_INIT, [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.2" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi case "`uname -s`" in *win32*|*WIN32*|*CYGWIN_NT*|*CYGWIN_9*|*CYGWIN_ME*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) CYGPATH=echo EXEEXT="" TEA_PLATFORM="unix" ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. AC_SUBST(PKG_STUB_LIB_FILE) # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) AC_SUBST(PKG_TCL_SOURCES) AC_SUBST(PKG_HEADERS) AC_SUBST(PKG_INCLUDES) AC_SUBST(PKG_LIBS) AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_SOURCES # PKG_OBJECTS #------------------------------------------------------------------------ AC_DEFUN(TEA_ADD_SOURCES, [ vars="$@" for i in $vars; do case $i in [\$]*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done AC_SUBST(PKG_SOURCES) AC_SUBST(PKG_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_STUB_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_STUB_SOURCES # PKG_STUB_OBJECTS #------------------------------------------------------------------------ AC_DEFUN(TEA_ADD_STUB_SOURCES, [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_TCL_SOURCES -- # # Specify one or more Tcl source files. These should be platform # independent runtime files. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_TCL_SOURCES #------------------------------------------------------------------------ AC_DEFUN(TEA_ADD_TCL_SOURCES, [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i']) fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done AC_SUBST(PKG_TCL_SOURCES) ]) #------------------------------------------------------------------------ # TEA_ADD_HEADERS -- # # Specify one or more source headers. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_HEADERS #------------------------------------------------------------------------ AC_DEFUN(TEA_ADD_HEADERS, [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find header file '${srcdir}/$i']) fi PKG_HEADERS="$PKG_HEADERS $i" done AC_SUBST(PKG_HEADERS) ]) #------------------------------------------------------------------------ # TEA_ADD_INCLUDES -- # # Specify one or more include dirs. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_INCLUDES #------------------------------------------------------------------------ AC_DEFUN(TEA_ADD_INCLUDES, [ vars="$@" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done AC_SUBST(PKG_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_ADD_LIBS -- # # Specify one or more libraries. Users should check for # the right platform before adding to their list. For Windows, # libraries provided in "foo.lib" format will be converted to # "-lfoo" when using GCC (mingw). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_LIBS #------------------------------------------------------------------------ AC_DEFUN(TEA_ADD_LIBS, [ vars="$@" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done AC_SUBST(PKG_LIBS) ]) #------------------------------------------------------------------------ # TEA_ADD_CFLAGS -- # # Specify one or more CFLAGS. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN(TEA_ADD_CFLAGS, [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: # none # # Results: # # If --prefix or --exec-prefix was not specified, $prefix and # $exec_prefix will be set to the values given to Tcl when it was # configured. #------------------------------------------------------------------------ AC_DEFUN(TEA_PREFIX, [ if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}]) prefix=${TCL_PREFIX} else AC_MSG_NOTICE([--prefix defaulting to /usr/local]) prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}]) exec_prefix=${TCL_EXEC_PREFIX} else AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}]) exec_prefix=$prefix fi fi ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER_CC -- # # Do compiler checks the way we want. This is just a replacement # for AC_PROG_CC in TEA configure.in files to make them cleaner. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN(TEA_SETUP_COMPILER_CC, [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. # If the user did not set CFLAGS, set it now to keep # the AC_PROG_CC macro from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_PROG_RANLIB #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER -- # # Do compiler checks that use the compiler. This must go after # TEA_SETUP_COMPILER_CC, which does the actual compiler check. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN(TEA_SETUP_COMPILER, [ # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. AC_REQUIRE([TEA_SETUP_COMPILER_CC]) #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then AC_MSG_CHECKING([if the compiler understands -pipe]) OLDCC="$CC" CC="$CC -pipe" AC_TRY_COMPILE(,, AC_MSG_RESULT([yes]), CC="$OLDCC" AC_MSG_RESULT([no])) fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- AC_C_BIGENDIAN if test "${TEA_PLATFORM}" = "unix" ; then TEA_TCL_LINK_LIBS TEA_MISSING_POSIX_HEADERS # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi ]) #------------------------------------------------------------------------ # TEA_MAKE_LIB -- # # Generate a line that can be used to build a shared/unshared library # in a platform independent manner. # # Arguments: # none # # Requires: # # Results: # # Defines the following vars: # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library #------------------------------------------------------------------------ AC_DEFUN(TEA_MAKE_LIB, [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_STUB_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build there own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build there own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. # # Arguments: # basename The base name of the library without version # numbers, extensions, or "lib" prefixes. # extra_dir Extra directory in which to search for the # library. This location is used first, then # $prefix/$exec-prefix, then some defaults. # # Requires: # TEA_INIT and TEA_PREFIX must be called first. # # Results: # # Defines the following vars: # ${basename}_LIB_NAME The computed library name. # ${basename}_LIB_SPEC The computed linker flags. #------------------------------------------------------------------------ AC_DEFUN(TEA_LIB_SPEC, [ AC_MSG_CHECKING([for $1 library]) # Look in exec-prefix for the library (defined by TEA_PREFIX). tea_lib_name_dir="${exec_prefix}/lib" # Or in a user-specified location. if test x"$2" != x ; then tea_extra_lib_dir=$2 else tea_extra_lib_dir=NONE fi for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break fi done if test "${TEA_PLATFORM}" = "windows"; then $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\" else # Strip off the leading "lib" and trailing ".a" or ".so" tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'` $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}" fi if test "x${$1_LIB_NAME}" = x ; then AC_MSG_ERROR([not found]) else AC_MSG_RESULT([${$1_LIB_SPEC}]) fi ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TCL_HEADERS -- # # Locate the private Tcl include files # # Arguments: # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substs the following vars: # TCL_TOP_DIR_NATIVE # TCL_GENERIC_DIR_NATIVE # TCL_UNIX_DIR_NATIVE # TCL_WIN_DIR_NATIVE # TCL_BMAP_DIR_NATIVE # TCL_TOOL_DIR_NATIVE # TCL_PLATFORM_DIR_NATIVE # TCL_BIN_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN(TEA_PRIVATE_TCL_HEADERS, [ AC_MSG_CHECKING([for Tcl private include files]) if test "${TEA_PLATFORM}" = "windows"; then TCL_TOP_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}`\" TCL_GENERIC_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/generic`\" TCL_UNIX_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/unix`\" TCL_WIN_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/win`\" TCL_BMAP_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/bitmaps`\" TCL_TOOL_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/tools`\" TCL_COMPAT_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/compat`\" TCL_PLATFORM_DIR_NATIVE=${TCL_WIN_DIR_NATIVE} TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}" else TCL_TOP_DIR_NATIVE='$(TCL_SRC_DIR)' TCL_GENERIC_DIR_NATIVE='${TCL_TOP_DIR_NATIVE}/generic' TCL_UNIX_DIR_NATIVE='${TCL_TOP_DIR_NATIVE}/unix' TCL_WIN_DIR_NATIVE='${TCL_TOP_DIR_NATIVE}/win' TCL_BMAP_DIR_NATIVE='${TCL_TOP_DIR_NATIVE}/bitmaps' TCL_TOOL_DIR_NATIVE='${TCL_TOP_DIR_NATIVE}/tools' TCL_COMPAT_DIR_NATIVE='${TCL_TOP_DIR_NATIVE}/compat' TCL_PLATFORM_DIR_NATIVE=${TCL_UNIX_DIR_NATIVE} # substitute these in "relaxed" so that TCL_INCLUDES still works # without requiring the other vars to be defined in the Makefile eval "TCL_INCLUDES=\"-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}\"" fi AC_SUBST(TCL_TOP_DIR_NATIVE) AC_SUBST(TCL_GENERIC_DIR_NATIVE) AC_SUBST(TCL_UNIX_DIR_NATIVE) AC_SUBST(TCL_WIN_DIR_NATIVE) AC_SUBST(TCL_BMAP_DIR_NATIVE) AC_SUBST(TCL_TOOL_DIR_NATIVE) AC_SUBST(TCL_PLATFORM_DIR_NATIVE) AC_SUBST(TCL_INCLUDES) AC_MSG_RESULT([Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TCL_HEADERS -- # # Locate the installed public Tcl header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substs the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN(TEA_PUBLIC_TCL_HEADERS, [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tclh, [ # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h]) fi else # Check order: pkg --prefix location, Tcl's --prefix location, # directory of tclConfig.sh, and Tcl source directory. # Looking in the source dir is not ideal, but OK. eval "temp_includedir=${includedir}" list="`ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude]) else AC_MSG_RESULT([${ac_cv_c_tclh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TCL_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TK_HEADERS -- # # Locate the private Tk include files # # Arguments: # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substs the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN(TEA_PRIVATE_TK_HEADERS, [ AC_MSG_CHECKING([for Tk private include files]) if test "${TEA_PLATFORM}" = "windows"; then TK_TOP_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}`\" TK_UNIX_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}/unix`\" TK_WIN_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}/win`\" TK_GENERIC_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}/generic`\" TK_XLIB_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}/xlib`\" TK_PLATFORM_DIR_NATIVE=${TK_WIN_DIR_NATIVE} TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE} -I${TK_XLIB_DIR_NATIVE}" else TK_TOP_DIR_NATIVE='${TK_SRC_DIR}' TK_GENERIC_DIR_NATIVE='${TK_TOP_DIR_NATIVE}/generic' TK_UNIX_DIR_NATIVE='${TK_TOP_DIR_NATIVE}/unix' TK_WIN_DIR_NATIVE='${TK_TOP_DIR_NATIVE}/win' TK_PLATFORM_DIR_NATIVE=${TK_UNIX_DIR_NATIVE} # substitute these in "relaxed" so that TK_INCLUDES still works # without requiring the other vars to be defined in the Makefile eval "TK_INCLUDES=\"-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}\"" fi AC_SUBST(TK_TOP_DIR_NATIVE) AC_SUBST(TK_UNIX_DIR_NATIVE) AC_SUBST(TK_WIN_DIR_NATIVE) AC_SUBST(TK_GENERIC_DIR_NATIVE) AC_SUBST(TK_XLIB_DIR_NATIVE) AC_SUBST(TK_PLATFORM_DIR_NATIVE) AC_SUBST(TK_INCLUDES) AC_MSG_RESULT([Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TK_HEADERS -- # # Locate the installed public Tk header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substs the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN(TEA_PUBLIC_TK_HEADERS, [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files.], with_tkinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tkh, [ # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h]) fi else # Check order: pkg --prefix location, Tcl's --prefix location, # directory of tclConfig.sh, and Tcl source directory. # Looking in the source dir is not ideal, but OK. eval "temp_includedir=${includedir}" list="`ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude]) else AC_MSG_RESULT([${ac_cv_c_tkh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_INCLUDES) if test "${TEA_PLATFORM}" = "windows" ; then # On Windows, we need the X compat headers AC_MSG_CHECKING([for X11 header files]) if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_XINCLUDES) fi AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}]) fi ]) #------------------------------------------------------------------------ # TEA_PROG_TCLSH # Locate a tclsh shell in the following directories: # ${TCL_BIN_DIR} ${TCL_BIN_DIR}/../bin # ${exec_prefix}/bin ${prefix}/bin # ${PATH} # # Arguments # none # # Results # Subst's the following values: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN(TEA_PROG_TCLSH, [ # Allow the user to provide this setting in the env if test "x${TCLSH_PROG}" = "x" ; then AC_MSG_CHECKING([for tclsh]) AC_CACHE_VAL(ac_cv_path_tclsh, [ search_path=`echo ${PATH} | sed -e 's/:/ /g'` if test "${TEA_PLATFORM}" != "windows" -o \ \( "$do64bit_ok" = "no" -a "$doWince" = "no" \) ; then # Do not allow target tclsh in known cross-compile builds, # as we need one we can run on this system search_path="${TCL_BIN_DIR} ${TCL_BIN_DIR}/../bin ${exec_prefix}/bin ${prefix}/bin ${search_path}" fi for dir in $search_path ; do for j in `ls -r $dir/tclsh[[8-9]]*${EXEEXT} 2> /dev/null` \ `ls -r $dir/tclsh*${EXEEXT} 2> /dev/null` ; do if test x"$ac_cv_path_tclsh" = x ; then if test -f "$j" ; then ac_cv_path_tclsh=$j break fi fi done done ]) if test -f "$ac_cv_path_tclsh" ; then TCLSH_PROG=$ac_cv_path_tclsh AC_MSG_RESULT([$TCLSH_PROG]) else AC_MSG_ERROR([No tclsh found in PATH: $search_path]) fi fi AC_SUBST(TCLSH_PROG) ]) #------------------------------------------------------------------------ # TEA_PROG_WISH # Locate a wish shell in the following directories: # ${TK_BIN_DIR} ${TK_BIN_DIR}/../bin # ${TCL_BIN_DIR} ${TCL_BIN_DIR}/../bin # ${exec_prefix}/bin ${prefix}/bin # ${PATH} # # Arguments # none # # Results # Subst's the following values: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN(TEA_PROG_WISH, [ # Allow the user to provide this setting in the env if test "x${WISH_PROG}" = "x" ; then AC_MSG_CHECKING([for wish]) AC_CACHE_VAL(ac_cv_path_wish, [ search_path=`echo ${PATH} | sed -e 's/:/ /g'` if test "${TEA_PLATFORM}" != "windows" -o \ \( "$do64bit_ok" = "no" -a "$doWince" = "no" \) ; then # Do not allow target wish in known cross-compile builds, # as we need one we can run on this system search_path="${TK_BIN_DIR} ${TK_BIN_DIR}/../bin ${TCL_BIN_DIR} ${TCL_BIN_DIR}/../bin ${exec_prefix}/bin ${prefix}/bin ${search_path}" fi for dir in $search_path ; do for j in `ls -r $dir/wish[[8-9]]*${EXEEXT} 2> /dev/null` \ `ls -r $dir/wish*${EXEEXT} 2> /dev/null` ; do if test x"$ac_cv_path_wish" = x ; then if test -f "$j" ; then ac_cv_path_wish=$j break fi fi done done ]) if test -f "$ac_cv_path_wish" ; then WISH_PROG=$ac_cv_path_wish AC_MSG_RESULT([$WISH_PROG]) else AC_MSG_ERROR([No wish found in PATH: $search_path]) fi fi AC_SUBST(WISH_PROG) ]) #------------------------------------------------------------------------ # TEA_PATH_CONFIG -- # # Locate the ${1}Config.sh file and perform a sanity check on # the ${1} compile flags. These are used by packages like # [incr Tk] that load *Config.sh files from more than Tcl and Tk. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-$1=... # # Defines the following vars: # $1_BIN_DIR Full path to the directory containing # the $1Config.sh file #------------------------------------------------------------------------ AC_DEFUN(TEA_PATH_CONFIG, [ # # Ok, lets find the $1 configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-$1 # if test x"${no_$1}" = x ; then # we reset no_$1 in case something fails here no_$1=true AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval}) AC_MSG_CHECKING([for $1 configuration]) AC_CACHE_VAL(ac_cv_c_$1config,[ # First check to see if --with-$1 was specified. if test x"${with_$1config}" != x ; then case ${with_$1config} in */$1Config.sh ) if test -f ${with_$1config}; then AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself]) with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'` fi;; esac if test -f "${with_$1config}/$1Config.sh" ; then ac_cv_c_$1config=`(cd ${with_$1config}; pwd)` else AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh]) fi fi # then check for a private $1 installation if test x"${ac_cv_c_$1config}" = x ; then for i in \ ../$1 \ `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../$1 \ `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../../$1 \ `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ${srcdir}/../$1 \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi if test -f "$i/unix/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_$1config}" = x ; then $1_BIN_DIR="# no $1 configs found" AC_MSG_WARN("Cannot find $1 configuration definitions") exit 0 else no_$1= $1_BIN_DIR=${ac_cv_c_$1config} AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG -- # # Load the $1Config.sh file # # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Subst the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC # #------------------------------------------------------------------------ AC_DEFUN(TEA_LOAD_CONFIG, [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) . ${$1_BIN_DIR}/$1Config.sh else AC_MSG_RESULT([file not found]) fi # # If the $1_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable $1_LIB_SPEC will be set to the value # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC # instead of $1_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f ${$1_BIN_DIR}/Makefile ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-celib=... # # Defines the following vars: # CELIB_DIR Full path to the directory containing # the include and platform lib files #------------------------------------------------------------------------ AC_DEFUN(TEA_PATH_CELIB, [ # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval}) AC_MSG_CHECKING([for Windows/CE celib directory]) AC_CACHE_VAL(ac_cv_c_celibconfig,[ # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory]) fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_celibconfig}" = x ; then AC_MSG_ERROR([Cannot find celib support library directory]) else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} AC_MSG_RESULT([found $CELIB_DIR]) TEA_PATH_NOSPACE(CELIB_DIR, ${ac_cv_c_celibconfig}) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_NOSPACE # Ensure that the given path has no spaces. This is necessary for # CC (and consitutuent vars that build it up) to work in the # tortured autoconf environment. Currently only for Windows use. # # Arguments # VAR - name of the variable to set # PATH - path to ensure no spaces in # # Results # Sets $VAR to short path of $PATH if it can be found. #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_NOSPACE], [ if test "${TEA_PLATFORM}" = "windows" ; then # we need TCLSH_PROG defined to get Windows short pathnames AC_REQUIRE([TEA_PROG_TCLSH]) AC_MSG_CHECKING([short pathname for $1 ($2)]) shortpath= case "$2" in *\ *) # Only do this if we need to. shortpath=`echo "puts [[file attributes {$2} -shortname]] ; exit" | ${TCLSH_PROG} 2>/dev/null` ;; esac if test "x${shortpath}" = "x" ; then AC_MSG_RESULT([not changed]) else $1=$shortpath AC_MSG_RESULT([${$1}]) fi fi ]) iwidgets-4.1.1/tclconfig/CVS/0000755003604700454610000000000013153527552014342 5ustar dgp771diviwidgets-4.1.1/tclconfig/CVS/Repository0000644003604700454610000000002313136711011016421 0ustar dgp771diviwidgets/tclconfig iwidgets-4.1.1/tclconfig/CVS/Entries0000644003604700454610000000012413153527552015673 0ustar dgp771div/install-sh/1.1/Tue Jan 25 00:47:59 2005// /tcl.m4/1.3/Tue Sep 5 14:00:39 2017// D iwidgets-4.1.1/tclconfig/CVS/Root0000644003604700454610000000006613136711011015174 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/.cvsignore0000644003604700454610000000007107302606220013722 0ustar dgp771divMakefile config.log confdefs.h iwidgets.tcl pkgIndex.tcl iwidgets-4.1.1/configure0000754003604700454610000066056213254753765013675 0ustar dgp771div#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for iwidgets 4.1.1. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='iwidgets' PACKAGE_TARNAME='iwidgets' PACKAGE_VERSION='4.1.1' PACKAGE_STRING='iwidgets 4.1.1' PACKAGE_BUGREPORT='' ac_unique_file="generic/buttonbox.itk" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CYGPATH EXEEXT PKG_LIB_FILE PKG_STUB_LIB_FILE PKG_STUB_SOURCES PKG_STUB_OBJECTS PKG_TCL_SOURCES PKG_HEADERS PKG_INCLUDES PKG_LIBS PKG_CFLAGS TCL_VERSION TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCL_LIBS TCL_DEFS TCL_EXTRA_CFLAGS TCL_LD_FLAGS TCL_SHLIB_LD_LIBS TK_VERSION TK_BIN_DIR TK_SRC_DIR TK_LIB_FILE TK_LIB_FLAG TK_LIB_SPEC TK_STUB_LIB_FILE TK_STUB_LIB_FLAG TK_STUB_LIB_SPEC TK_LIBS TK_XINCLUDES itcl_VERSION itcl_BIN_DIR itcl_SRC_DIR itcl_LIB_FILE itcl_LIB_SPEC itcl_STUB_LIB_FILE itcl_STUB_LIB_SPEC itcl_STUB_LIB_PATH INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT AR TCLSH_PROG CELIB_DIR LIBOBJS CPP EGREP DL_LIBS CFLAGS_DEBUG CFLAGS_OPTIMIZE CFLAGS_WARNING STLIB_LD SHLIB_LD SHLIB_CFLAGS SHLIB_LD_LIBS LDFLAGS_DEBUG LDFLAGS_OPTIMIZE LD_LIBRARY_PATH_VAR WISH_PROG ITCL_LIB_DIR ITK_LIB_DIR ITK_SRC_DIR IWIDGETS_SRC_DIR LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures iwidgets 4.1.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of iwidgets 4.1.1:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-64bit enable 64bit support (where applicable) --enable-64bit-vis enable 64bit Sparc VIS support --enable-wince enable Win/CE support (where applicable) --disable-load disallow dynamic loading and "load" command Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-tcl directory containing tcl configuration (tclConfig.sh) --with-tk directory containing tk configuration (tkConfig.sh) --with-itcl directory containing itcl configuration (itclConfig.sh) --with-itk=DIR use Itk 3.0 binaries from DIR --with-celib=DIR use Windows/CE support library from DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF iwidgets configure 4.1.1 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by iwidgets $as_me 4.1.1, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.2" echo "$as_me:$LINENO: checking for correct TEA configuration" >&5 echo $ECHO_N "checking for correct TEA configuration... $ECHO_C" >&6 if test x"${PACKAGE_NAME}" = x ; then { { echo "$as_me:$LINENO: error: The PACKAGE_NAME variable must be defined by your TEA configure.in" >&5 echo "$as_me: error: The PACKAGE_NAME variable must be defined by your TEA configure.in" >&2;} { (exit 1); exit 1; }; } fi if test x"3.2" = x ; then { { echo "$as_me:$LINENO: error: TEA version not specified." >&5 echo "$as_me: error: TEA version not specified." >&2;} { (exit 1); exit 1; }; } elif test "3.2" != "${TEA_VERSION}" ; then echo "$as_me:$LINENO: result: warning: requested TEA version \"3.2\", have \"${TEA_VERSION}\"" >&5 echo "${ECHO_T}warning: requested TEA version \"3.2\", have \"${TEA_VERSION}\"" >&6 else echo "$as_me:$LINENO: result: ok (TEA ${TEA_VERSION})" >&5 echo "${ECHO_T}ok (TEA ${TEA_VERSION})" >&6 fi case "`uname -s`" in *win32*|*WIN32*|*CYGWIN_NT*|*CYGWIN_9*|*CYGWIN_ME*|*MINGW32_*) # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CYGPATH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CYGPATH="cygpath -w" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" fi fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then echo "$as_me:$LINENO: result: $CYGPATH" >&5 echo "${ECHO_T}$CYGPATH" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) CYGPATH=echo EXEEXT="" TEA_PLATFORM="unix" ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi # This package name must be replaced statically for AC_SUBST to work # Substitute STUB_LIB_FILE in case package creates a stub library too. # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... ac_aux_dir= for ac_dir in tclconfig $srcdir/tclconfig; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in tclconfig $srcdir/tclconfig" >&5 echo "$as_me: error: cannot find install-sh or install.sh in tclconfig $srcdir/tclconfig" >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. #-------------------------------------------------------------------- # See if there was a command-line option for where Tcl or Tk is; if # not, search for Tcl and/or Tk. #-------------------------------------------------------------------- # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true # Check whether --with-tcl or --without-tcl was given. if test "${with_tcl+set}" = set; then withval="$with_tcl" with_tclconfig=${withval} fi; echo "$as_me:$LINENO: checking for Tcl configuration" >&5 echo $ECHO_N "checking for Tcl configuration... $ECHO_C" >&6 if test "${ac_cv_c_tclconfig+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case ${with_tclconfig} in */tclConfig.sh ) if test -f ${with_tclconfig}; then { echo "$as_me:$LINENO: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} with_tclconfig=`echo ${with_tclconfig} | sed 's!/tclConfig\.sh$!!'` fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)` else { { echo "$as_me:$LINENO: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&5 echo "$as_me: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&2;} { (exit 1); exit 1; }; } fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig=`(cd $i; pwd)` break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig=`(cd $i/unix; pwd)` break fi done fi fi if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" { echo "$as_me:$LINENO: WARNING: \"Cannot find Tcl configuration definitions\"" >&5 echo "$as_me: WARNING: \"Cannot find Tcl configuration definitions\"" >&2;} exit 0 else no_tcl= TCL_BIN_DIR=${ac_cv_c_tclconfig} echo "$as_me:$LINENO: result: found $TCL_BIN_DIR/tclConfig.sh" >&5 echo "${ECHO_T}found $TCL_BIN_DIR/tclConfig.sh" >&6 fi fi echo "$as_me:$LINENO: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5 echo $ECHO_N "checking for existence of $TCL_BIN_DIR/tclConfig.sh... $ECHO_C" >&6 if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then echo "$as_me:$LINENO: result: loading" >&5 echo "${ECHO_T}loading" >&6 . $TCL_BIN_DIR/tclConfig.sh else echo "$as_me:$LINENO: result: file not found" >&5 echo "${ECHO_T}file not found" >&6 fi # # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f $TCL_BIN_DIR/Makefile ; then TCL_LIB_SPEC=${TCL_BUILD_LIB_SPEC} TCL_STUB_LIB_SPEC=${TCL_BUILD_STUB_LIB_SPEC} TCL_STUB_LIB_PATH=${TCL_BUILD_STUB_LIB_PATH} fi # # eval is required to do the TCL_DBGX substitution # eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" #AC_SUBST(TCL_BUILD_LIB_SPEC) #AC_SUBST(TCL_BUILD_STUB_LIB_SPEC) # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true # Check whether --with-tk or --without-tk was given. if test "${with_tk+set}" = set; then withval="$with_tk" with_tkconfig=${withval} fi; echo "$as_me:$LINENO: checking for Tk configuration" >&5 echo $ECHO_N "checking for Tk configuration... $ECHO_C" >&6 if test "${ac_cv_c_tkconfig+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case ${with_tkconfig} in */tkConfig.sh ) if test -f ${with_tkconfig}; then { echo "$as_me:$LINENO: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&5 echo "$as_me: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&2;} with_tkconfig=`echo ${with_tkconfig} | sed 's!/tkConfig\.sh$!!'` fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)` else { { echo "$as_me:$LINENO: error: ${with_tkconfig} directory doesn't contain tkConfig.sh" >&5 echo "$as_me: error: ${with_tkconfig} directory doesn't contain tkConfig.sh" >&2;} { (exit 1); exit 1; }; } fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tk[8-9].[0-9]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tk[8-9].[0-9]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tk[8-9].[0-9]* 2>/dev/null` ; do if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig=`(cd $i; pwd)` break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[8-9].[0-9]* 2>/dev/null` ; do if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig=`(cd $i/unix; pwd)` break fi done fi fi if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" { echo "$as_me:$LINENO: WARNING: \"Cannot find Tk configuration definitions\"" >&5 echo "$as_me: WARNING: \"Cannot find Tk configuration definitions\"" >&2;} exit 0 else no_tk= TK_BIN_DIR=${ac_cv_c_tkconfig} echo "$as_me:$LINENO: result: found $TK_BIN_DIR/tkConfig.sh" >&5 echo "${ECHO_T}found $TK_BIN_DIR/tkConfig.sh" >&6 fi fi echo "$as_me:$LINENO: checking for existence of ${TK_BIN_DIR}/tkConfig.sh" >&5 echo $ECHO_N "checking for existence of ${TK_BIN_DIR}/tkConfig.sh... $ECHO_C" >&6 if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then echo "$as_me:$LINENO: result: loading" >&5 echo "${ECHO_T}loading" >&6 . $TK_BIN_DIR/tkConfig.sh else echo "$as_me:$LINENO: result: could not find ${TK_BIN_DIR}/tkConfig.sh" >&5 echo "${ECHO_T}could not find ${TK_BIN_DIR}/tkConfig.sh" >&6 fi # # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f $TK_BIN_DIR/Makefile ; then TK_LIB_SPEC=${TK_BUILD_LIB_SPEC} TK_STUB_LIB_SPEC=${TK_BUILD_STUB_LIB_SPEC} TK_STUB_LIB_PATH=${TK_BUILD_STUB_LIB_PATH} fi # # eval is required to do the TK_DBGX substitution # eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # # Ok, lets find the itcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-itcl # if test x"${no_itcl}" = x ; then # we reset no_itcl in case something fails here no_itcl=true # Check whether --with-itcl or --without-itcl was given. if test "${with_itcl+set}" = set; then withval="$with_itcl" with_itclconfig=${withval} fi; echo "$as_me:$LINENO: checking for itcl configuration" >&5 echo $ECHO_N "checking for itcl configuration... $ECHO_C" >&6 if test "${ac_cv_c_itclconfig+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # First check to see if --with-itcl was specified. if test x"${with_itclconfig}" != x ; then case ${with_itclconfig} in */itclConfig.sh ) if test -f ${with_itclconfig}; then { echo "$as_me:$LINENO: WARNING: --with-itcl argument should refer to directory containing itclConfig.sh, not to itclConfig.sh itself" >&5 echo "$as_me: WARNING: --with-itcl argument should refer to directory containing itclConfig.sh, not to itclConfig.sh itself" >&2;} with_itclconfig=`echo ${with_itclconfig} | sed 's!/itclConfig\.sh$!!'` fi;; esac if test -f "${with_itclconfig}/itclConfig.sh" ; then ac_cv_c_itclconfig=`(cd ${with_itclconfig}; pwd)` else { { echo "$as_me:$LINENO: error: ${with_itclconfig} directory doesn't contain itclConfig.sh" >&5 echo "$as_me: error: ${with_itclconfig} directory doesn't contain itclConfig.sh" >&2;} { (exit 1); exit 1; }; } fi fi # then check for a private itcl installation if test x"${ac_cv_c_itclconfig}" = x ; then for i in \ ../itcl \ `ls -dr ../itcl*[0-9].[0-9]*.[0-9]* 2>/dev/null` \ `ls -dr ../itcl*[0-9].[0-9][0-9] 2>/dev/null` \ `ls -dr ../itcl*[0-9].[0-9] 2>/dev/null` \ `ls -dr ../itcl*[0-9].[0-9]* 2>/dev/null` \ ../../itcl \ `ls -dr ../../itcl*[0-9].[0-9]*.[0-9]* 2>/dev/null` \ `ls -dr ../../itcl*[0-9].[0-9][0-9] 2>/dev/null` \ `ls -dr ../../itcl*[0-9].[0-9] 2>/dev/null` \ `ls -dr ../../itcl*[0-9].[0-9]* 2>/dev/null` \ ../../../itcl \ `ls -dr ../../../itcl*[0-9].[0-9]*.[0-9]* 2>/dev/null` \ `ls -dr ../../../itcl*[0-9].[0-9][0-9] 2>/dev/null` \ `ls -dr ../../../itcl*[0-9].[0-9] 2>/dev/null` \ `ls -dr ../../../itcl*[0-9].[0-9]* 2>/dev/null` \ ${srcdir}/../itcl \ `ls -dr ${srcdir}/../itcl*[0-9].[0-9]*.[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../itcl*[0-9].[0-9][0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../itcl*[0-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../itcl*[0-9].[0-9]* 2>/dev/null` \ ; do if test -f "$i/itclConfig.sh" ; then ac_cv_c_itclconfig=`(cd $i; pwd)` break fi if test -f "$i/unix/itclConfig.sh" ; then ac_cv_c_itclconfig=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_itclconfig}" = x ; then for i in `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/itclConfig.sh" ; then ac_cv_c_itclconfig=`(cd $i; pwd)` break fi done fi fi if test x"${ac_cv_c_itclconfig}" = x ; then itcl_BIN_DIR="# no itcl configs found" { echo "$as_me:$LINENO: WARNING: \"Cannot find itcl configuration definitions\"" >&5 echo "$as_me: WARNING: \"Cannot find itcl configuration definitions\"" >&2;} exit 0 else no_itcl= itcl_BIN_DIR=${ac_cv_c_itclconfig} echo "$as_me:$LINENO: result: found $itcl_BIN_DIR/itclConfig.sh" >&5 echo "${ECHO_T}found $itcl_BIN_DIR/itclConfig.sh" >&6 fi fi echo "$as_me:$LINENO: checking for existence of ${itcl_BIN_DIR}/itclConfig.sh" >&5 echo $ECHO_N "checking for existence of ${itcl_BIN_DIR}/itclConfig.sh... $ECHO_C" >&6 if test -f "${itcl_BIN_DIR}/itclConfig.sh" ; then echo "$as_me:$LINENO: result: loading" >&5 echo "${ECHO_T}loading" >&6 . ${itcl_BIN_DIR}/itclConfig.sh else echo "$as_me:$LINENO: result: file not found" >&5 echo "${ECHO_T}file not found" >&6 fi # # If the itcl_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable itcl_LIB_SPEC will be set to the value # of itcl_BUILD_LIB_SPEC. An extension should make use of itcl_LIB_SPEC # instead of itcl_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f ${itcl_BIN_DIR}/Makefile ; then { echo "$as_me:$LINENO: WARNING: Found Makefile - using build library specs for itcl" >&5 echo "$as_me: WARNING: Found Makefile - using build library specs for itcl" >&2;} itcl_LIB_SPEC=${itcl_BUILD_LIB_SPEC} itcl_STUB_LIB_SPEC=${itcl_BUILD_STUB_LIB_SPEC} itcl_STUB_LIB_PATH=${itcl_BUILD_STUB_LIB_PATH} fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' #-------------------------------------------------------------------- # See if --with-itcl was specified to give the [incr Tcl] and [incr Tk] # source code location. If not, then we'll assume that the Iwidgets # package is being installed directly beneath the toplevel Itcl directory. #-------------------------------------------------------------------- #AC_ARG_WITH(itcl, [ --with-itcl=DIR use Itcl 3.0 binaries from DIR], # itcl_search=$withval, itcl_search=`cd ${srcdir}/..; pwd`) ITCL_LIB_DIR="" if test -r $itcl_SRC_DIR/library/itcl.tcl; then ITCL_LIB_DIR=$itcl_SRC_DIR/library fi if test -z "$ITCL_LIB_DIR"; then { { echo "$as_me:$LINENO: error: Can't find Itcl source. Use --with-itcl to specify the the toplevel incr Tcl directory on your system. This directory should contain library/itcl.tcl." >&5 echo "$as_me: error: Can't find Itcl source. Use --with-itcl to specify the the toplevel incr Tcl directory on your system. This directory should contain library/itcl.tcl." >&2;} { (exit 1); exit 1; }; } fi # Check whether --with-itk or --without-itk was given. if test "${with_itk+set}" = set; then withval="$with_itk" itk_search=$withval else itk_search=`cd ${srcdir}/..; pwd` fi; ITK_LIB_DIR="" if test -r $itk_search/library/itk.tcl; then ITK_LIB_DIR=$itk_search/library ITK_SRC_DIR=$itk_search fi if test -z "$ITK_LIB_DIR"; then { { echo "$as_me:$LINENO: error: Can't find Itk source. Use --with-itk to specify the the toplevel incr Tk directory on your system. This directory should contain library/itk.tcl." >&5 echo "$as_me: error: Can't find Itk source. Use --with-itk to specify the the toplevel incr Tk directory on your system. This directory should contain library/itk.tcl." >&2;} { (exit 1); exit 1; }; } fi #-------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before $prefix is used. #-------------------------------------------------------------------- if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then { echo "$as_me:$LINENO: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5 echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;} prefix=${TCL_PREFIX} else { echo "$as_me:$LINENO: --prefix defaulting to /usr/local" >&5 echo "$as_me: --prefix defaulting to /usr/local" >&6;} prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then { echo "$as_me:$LINENO: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5 echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;} exec_prefix=${TCL_EXEC_PREFIX} else { echo "$as_me:$LINENO: --exec-prefix defaulting to ${prefix}" >&5 echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;} exec_prefix=$prefix fi fi #-------------------------------------------------------------------- # Needed for running the test suite #-------------------------------------------------------------------- ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Allow the user to provide this setting in the env if test "x${TCLSH_PROG}" = "x" ; then echo "$as_me:$LINENO: checking for tclsh" >&5 echo $ECHO_N "checking for tclsh... $ECHO_C" >&6 if test "${ac_cv_path_tclsh+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else search_path=`echo ${PATH} | sed -e 's/:/ /g'` if test "${TEA_PLATFORM}" != "windows" -o \ \( "$do64bit_ok" = "no" -a "$doWince" = "no" \) ; then # Do not allow target tclsh in known cross-compile builds, # as we need one we can run on this system search_path="${TCL_BIN_DIR} ${TCL_BIN_DIR}/../bin ${exec_prefix}/bin ${prefix}/bin ${search_path}" fi for dir in $search_path ; do for j in `ls -r $dir/tclsh[8-9]*${EXEEXT} 2> /dev/null` \ `ls -r $dir/tclsh*${EXEEXT} 2> /dev/null` ; do if test x"$ac_cv_path_tclsh" = x ; then if test -f "$j" ; then ac_cv_path_tclsh=$j break fi fi done done fi if test -f "$ac_cv_path_tclsh" ; then TCLSH_PROG=$ac_cv_path_tclsh echo "$as_me:$LINENO: result: $TCLSH_PROG" >&5 echo "${ECHO_T}$TCLSH_PROG" >&6 else { { echo "$as_me:$LINENO: error: No tclsh found in PATH: $search_path" >&5 echo "$as_me: error: No tclsh found in PATH: $search_path" >&2;} { (exit 1); exit 1; }; } fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Step 0: Enable 64 bit support? echo "$as_me:$LINENO: checking if 64bit support is enabled" >&5 echo $ECHO_N "checking if 64bit support is enabled... $ECHO_C" >&6 # Check whether --enable-64bit or --disable-64bit was given. if test "${enable_64bit+set}" = set; then enableval="$enable_64bit" do64bit=$enableval else do64bit=no fi; echo "$as_me:$LINENO: result: $do64bit" >&5 echo "${ECHO_T}$do64bit" >&6 # Step 0.b: Enable Solaris 64 bit VIS support? echo "$as_me:$LINENO: checking if 64bit Sparc VIS support is requested" >&5 echo $ECHO_N "checking if 64bit Sparc VIS support is requested... $ECHO_C" >&6 # Check whether --enable-64bit-vis or --disable-64bit-vis was given. if test "${enable_64bit_vis+set}" = set; then enableval="$enable_64bit_vis" do64bitVIS=$enableval else do64bitVIS=no fi; echo "$as_me:$LINENO: result: $do64bitVIS" >&5 echo "${ECHO_T}$do64bitVIS" >&6 if test "$do64bitVIS" = "yes"; then # Force 64bit on with VIS do64bit=yes fi # Step 0.c: Cross-compiling options for Windows/CE builds? if test "${TEA_PLATFORM}" = "windows" ; then echo "$as_me:$LINENO: checking if Windows/CE build is requested" >&5 echo $ECHO_N "checking if Windows/CE build is requested... $ECHO_C" >&6 # Check whether --enable-wince or --disable-wince was given. if test "${enable_wince+set}" = set; then enableval="$enable_wince" doWince=$enableval else doWince=no fi; echo "$as_me:$LINENO: result: $doWince" >&5 echo "${ECHO_T}$doWince" >&6 fi # Step 1: set the variable "system" to hold the name and version number # for the system. This can usually be done via the "uname" command, but # there are a few systems, like Next, where this doesn't work. echo "$as_me:$LINENO: checking system version (for dynamic loading)" >&5 echo $ECHO_N "checking system version (for dynamic loading)... $ECHO_C" >&6 if test -f /usr/lib/NextStep/software_version; then system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` else system=`uname -s`-`uname -r` if test "$?" -ne 0 ; then echo "$as_me:$LINENO: result: unknown (can't find uname command)" >&5 echo "${ECHO_T}unknown (can't find uname command)" >&6 system=unknown else # Special check for weird MP-RAS system (uname returns weird # results, and the version is kept in special file). if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then system=MP-RAS-`awk '{print }' /etc/.relid'` fi if test "`uname -s`" = "AIX" ; then system=AIX-`uname -v`.`uname -r` fi if test "${TEA_PLATFORM}" = "windows" ; then system=windows fi echo "$as_me:$LINENO: result: $system" >&5 echo "${ECHO_T}$system" >&6 fi fi # Step 2: check for existence of -ldl library. This is needed because # Linux can use either -ldl or -ldld for dynamic loading. echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then have_dl=yes else have_dl=no fi # Step 3: set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and CC_SEARCH_FLAGS becomes LD_SEARCH_FLAGS for us # (and we have no CC_SEARCH_FLAGS). do64bit_ok=no LDFLAGS_ORIG="$LDFLAGS" TCL_EXPORT_FILE_SUFFIX="" UNSHARED_LIB_SUFFIX="" TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g if test "$GCC" = "yes" ; then CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall -Wno-implicit-int" else CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" fi TCL_NEEDS_EXP_FILE=0 TCL_BUILD_EXP_FILE="" TCL_EXP_FILE="" # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" case $system in windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. if test "$do64bit" = "yes" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft SDK" fi # Ensure that this path has no spaces to work in autoconf if test "${TEA_PLATFORM}" = "windows" ; then # we need TCLSH_PROG defined to get Windows short pathnames echo "$as_me:$LINENO: checking short pathname for MSSDK (${MSSDK})" >&5 echo $ECHO_N "checking short pathname for MSSDK (${MSSDK})... $ECHO_C" >&6 shortpath= case "${MSSDK}" in *\ *) # Only do this if we need to. shortpath=`echo "puts [file attributes {${MSSDK}} -shortname] ; exit" | ${TCLSH_PROG} 2>/dev/null` ;; esac if test "x${shortpath}" = "x" ; then echo "$as_me:$LINENO: result: not changed" >&5 echo "${ECHO_T}not changed" >&6 else MSSDK=$shortpath echo "$as_me:$LINENO: result: ${MSSDK}" >&5 echo "${ECHO_T}${MSSDK}" >&6 fi fi if test ! -d "${MSSDK}/bin/win64" ; then { echo "$as_me:$LINENO: WARNING: could not find 64-bit SDK to enable 64bit mode" >&5 echo "$as_me: WARNING: could not find 64-bit SDK to enable 64bit mode" >&2;} do64bit="no" else do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" = "yes" ; then { { echo "$as_me:$LINENO: error: Windows/CE and 64-bit builds incompatible" >&5 echo "$as_me: error: Windows/CE and 64-bit builds incompatible" >&2;} { (exit 1); exit 1; }; } fi if test "$GCC" = "yes" ; then { { echo "$as_me:$LINENO: error: Windows/CE and GCC builds incompatible" >&5 echo "$as_me: error: Windows/CE and GCC builds incompatible" >&2;} { (exit 1); exit 1; }; } fi # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true # Check whether --with-celib or --without-celib was given. if test "${with_celib+set}" = set; then withval="$with_celib" with_celibconfig=${withval} fi; echo "$as_me:$LINENO: checking for Windows/CE celib directory" >&5 echo $ECHO_N "checking for Windows/CE celib directory... $ECHO_C" >&6 if test "${ac_cv_c_celibconfig+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else { { echo "$as_me:$LINENO: error: ${with_celibconfig} directory doesn't contain inc directory" >&5 echo "$as_me: error: ${with_celibconfig} directory doesn't contain inc directory" >&2;} { (exit 1); exit 1; }; } fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[0-9]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[0-9]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi fi if test x"${ac_cv_c_celibconfig}" = x ; then { { echo "$as_me:$LINENO: error: Cannot find celib support library directory" >&5 echo "$as_me: error: Cannot find celib support library directory" >&2;} { (exit 1); exit 1; }; } else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} echo "$as_me:$LINENO: result: found $CELIB_DIR" >&5 echo "${ECHO_T}found $CELIB_DIR" >&6 if test "${TEA_PLATFORM}" = "windows" ; then # we need TCLSH_PROG defined to get Windows short pathnames echo "$as_me:$LINENO: checking short pathname for CELIB_DIR (${ac_cv_c_celibconfig})" >&5 echo $ECHO_N "checking short pathname for CELIB_DIR (${ac_cv_c_celibconfig})... $ECHO_C" >&6 shortpath= case "${ac_cv_c_celibconfig}" in *\ *) # Only do this if we need to. shortpath=`echo "puts [file attributes {${ac_cv_c_celibconfig}} -shortname] ; exit" | ${TCLSH_PROG} 2>/dev/null` ;; esac if test "x${shortpath}" = "x" ; then echo "$as_me:$LINENO: result: not changed" >&5 echo "${ECHO_T}not changed" >&6 else CELIB_DIR=$shortpath echo "$as_me:$LINENO: result: ${CELIB_DIR}" >&5 echo "${ECHO_T}${CELIB_DIR}" >&6 fi fi fi fi # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length($1)) { printf "CEVERSION=\"%s\"\n", $1; \ if ($1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length($2)) { printf "TARGETCPU=\"%s\"\n", toupper($2) }; \ if (length($3)) { printf "ARCH=\"%s\"\n", toupper($3) }; \ if (length($4)) { printf "PLATFORM=\"%s\"\n", $4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi # Ensure that this path has no spaces to work in autoconf if test "${TEA_PLATFORM}" = "windows" ; then # we need TCLSH_PROG defined to get Windows short pathnames echo "$as_me:$LINENO: checking short pathname for WCEROOT (${WCEROOT})" >&5 echo $ECHO_N "checking short pathname for WCEROOT (${WCEROOT})... $ECHO_C" >&6 shortpath= case "${WCEROOT}" in *\ *) # Only do this if we need to. shortpath=`echo "puts [file attributes {${WCEROOT}} -shortname] ; exit" | ${TCLSH_PROG} 2>/dev/null` ;; esac if test "x${shortpath}" = "x" ; then echo "$as_me:$LINENO: result: not changed" >&5 echo "${ECHO_T}not changed" >&6 else WCEROOT=$shortpath echo "$as_me:$LINENO: result: ${WCEROOT}" >&5 echo "${ECHO_T}${WCEROOT}" >&6 fi fi if test "${TEA_PLATFORM}" = "windows" ; then # we need TCLSH_PROG defined to get Windows short pathnames echo "$as_me:$LINENO: checking short pathname for SDKROOT (${SDKROOT})" >&5 echo $ECHO_N "checking short pathname for SDKROOT (${SDKROOT})... $ECHO_C" >&6 shortpath= case "${SDKROOT}" in *\ *) # Only do this if we need to. shortpath=`echo "puts [file attributes {${SDKROOT}} -shortname] ; exit" | ${TCLSH_PROG} 2>/dev/null` ;; esac if test "x${shortpath}" = "x" ; then echo "$as_me:$LINENO: result: not changed" >&5 echo "${ECHO_T}not changed" >&6 else SDKROOT=$shortpath echo "$as_me:$LINENO: result: ${SDKROOT}" >&5 echo "${ECHO_T}${SDKROOT}" >&6 fi fi if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then { { echo "$as_me:$LINENO: error: could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" >&5 echo "$as_me: error: could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" >&2;} { (exit 1); exit 1; }; } doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" = "yes" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="${MSSDK}/Bin/Win64/cl.exe" CFLAGS="${CFLAGS} -I${MSSDK}/Include/prerelease \ -I${MSSDK}/Include/Win64/crt \ -I${MSSDK}/Include" RC="${MSSDK}/bin/rc.exe" lflags="-MACHINE:IA64 -LIBPATH:${MSSDK}/Lib/IA64 \ -LIBPATH:${MSSDK}/Lib/Prerelease/IA64 -nologo" LINKBIN="${MSSDK}/bin/win64/link.exe" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="${CEBINROOT}/cl.exe" else CC="${CEBINROOT}/cl${ARCH}.exe" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="${WCEROOT}/Common/EVC/bin/rc.exe" arch=`echo ${ARCH} | awk '{print tolower($0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do cat >>confdefs.h <<_ACEOF #define $i 1 _ACEOF done cat >>confdefs.h <<_ACEOF #define _WIN32_WCE $CEVERSION _ACEOF cat >>confdefs.h <<_ACEOF #define UNDER_CE $CEVERSION _ACEOF CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="${CEBINROOT}/link.exe" else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode RC="windres" CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD="$CC -shared" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # This essentially turns it all on. LDFLAGS_DEBUG="-debug:full -debugtype:both -warn:2" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots # Bogus to avoid getting this turned off DL_OBJS="tclLoadNone.obj" ;; AIX-*) if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then # AIX requires the _r compiler when gcc isn't being used if test "${CC}" != "cc_r" ; then CC=${CC}_r fi echo "$as_me:$LINENO: result: Using $CC for compiling with threads" >&5 echo "${ECHO_T}Using $CC for compiling with threads" >&6 fi LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadDl.o" LD_LIBRARY_PATH_VAR="LIBPATH" # AIX v<=4.1 has some different flags than 4.2+ if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then #LIBOBJS="$LIBOBJS tclLoadAix.o" case $LIBOBJS in "tclLoadAix.$ac_objext" | \ *" tclLoadAix.$ac_objext" | \ "tclLoadAix.$ac_objext "* | \ *" tclLoadAix.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS tclLoadAix.$ac_objext" ;; esac DL_LIBS="-lld" fi # Check to enable 64-bit flags for compiler/linker on AIX 4+ if test "$do64bit" = "yes" -a "`uname -v`" -gt "3" ; then if test "$GCC" = "yes" ; then { echo "$as_me:$LINENO: WARNING: \"64bit mode not supported with GCC on $system\"" >&5 echo "$as_me: WARNING: \"64bit mode not supported with GCC on $system\"" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS="$LDFLAGS -q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" fi fi if test "`uname -m`" = "ia64" ; then # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" # AIX-5 has dl* in libc.so DL_LIBS="" if test "$GCC" = "yes" ; then LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi else if test "$GCC" = "yes" ; then SHLIB_LD="gcc -shared" else SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry" fi SHLIB_LD="${TCL_SRC_DIR}/unix/ldAix ${SHLIB_LD} ${SHLIB_LD_FLAGS}" DL_LIBS="-ldl" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' TCL_NEEDS_EXP_FILE=1 TCL_EXPORT_FILE_SUFFIX='${PACKAGE_VERSION}.exp' fi # On AIX <=v4 systems, libbsd.a has to be linked in to support # non-blocking file IO. This library has to be linked in after # the MATH_LIBS or it breaks the pow() function. The way to # insure proper sequencing, is to add it to the tail of MATH_LIBS. # This library also supplies gettimeofday. # # AIX does not have a timezone field in struct tm. When the AIX # bsd library is used, the timezone global and the gettimeofday # methods are to be avoided for timezone deduction instead, we # deduce the timezone by comparing the localtime result on a # known GMT value. echo "$as_me:$LINENO: checking for gettimeofday in -lbsd" >&5 echo $ECHO_N "checking for gettimeofday in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gettimeofday+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gettimeofday (); int main () { gettimeofday (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gettimeofday=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_bsd_gettimeofday=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gettimeofday" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gettimeofday" >&6 if test $ac_cv_lib_bsd_gettimeofday = yes; then libbsd=yes else libbsd=no fi if test $libbsd = yes; then MATH_LIBS="$MATH_LIBS -lbsd" cat >>confdefs.h <<\_ACEOF #define USE_DELTA_FOR_TZ 1 _ACEOF fi ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -nostart" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" ;; BSD/OS-2.1*|BSD/OS-3*) SHLIB_CFLAGS="" SHLIB_LD="shlicc -r" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS="" ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD="cc -shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="$LDFLAGS -export-dynamic" LD_SEARCH_FLAGS="" ;; dgux*) SHLIB_CFLAGS="-K PIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS="" ;; HP-UX-*.11.*) # Use updated header definitions where possible cat >>confdefs.h <<\_ACEOF #define _XOPEN_SOURCE_EXTENDED 1 _ACEOF SHLIB_SUFFIX=".sl" echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = yes; then SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadShl.o" DL_LIBS="-ldld" LDFLAGS="$LDFLAGS -Wl,-E" LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" fi if test "$GCC" = "yes" ; then SHLIB_LD="gcc -shared" SHLIB_LD_LIBS='${LIBS}' LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' fi # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then hpux_arch=`${CC} -dumpmachine` case $hpux_arch in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD="${CC} -shared" SHLIB_LD_LIBS='${LIBS}' ;; *) { echo "$as_me:$LINENO: WARNING: \"64bit mode not supported with GCC on $system\"" >&5 echo "$as_me: WARNING: \"64bit mode not supported with GCC on $system\"" >&2;} ;; esac else do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS="$LDFLAGS +DD64" fi fi ;; HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) SHLIB_SUFFIX=".sl" echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = yes; then SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" SHLIB_LD_LIBS="" DL_OBJS="tclLoadShl.o" DL_LIBS="-ldld" LDFLAGS="$LDFLAGS -Wl,-E" LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' fi LD_LIBRARY_PATH_VAR="SHLIB_PATH" ;; IRIX-4.*) SHLIB_CFLAGS="-G 0" SHLIB_SUFFIX=".a" SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadAout.o" DL_LIBS="" LDFLAGS="$LDFLAGS -Wl,-D,08000000" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' SHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' ;; IRIX-5.*) SHLIB_CFLAGS="" SHLIB_LD="ld -shared -rdata_shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' ;; IRIX-6.*|IRIX64-6.5*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' if test "$GCC" = "yes" ; then CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" else case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then if test "$GCC" = "yes" ; then { echo "$as_me:$LINENO: WARNING: 64bit mode not supported by gcc" >&5 echo "$as_me: WARNING: 64bit mode not supported by gcc" >&2;} else do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS="$LDFLAGS -64" fi fi ;; Linux*) SHLIB_CFLAGS="-fPIC" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings # when you inline the string and math operations. Turn this off to # get rid of the warnings. #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES" if test "$have_dl" = yes; then SHLIB_LD="${CC} -shared" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="$LDFLAGS -Wl,--export-dynamic" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' else if test "${ac_cv_header_dld_h+set}" = set; then echo "$as_me:$LINENO: checking for dld.h" >&5 echo $ECHO_N "checking for dld.h... $ECHO_C" >&6 if test "${ac_cv_header_dld_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_dld_h" >&5 echo "${ECHO_T}$ac_cv_header_dld_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking dld.h usability" >&5 echo $ECHO_N "checking dld.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking dld.h presence" >&5 echo $ECHO_N "checking dld.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: dld.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: dld.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: dld.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: dld.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: dld.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: dld.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: dld.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: dld.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: dld.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: dld.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to the iwidgets lists. ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for dld.h" >&5 echo $ECHO_N "checking for dld.h... $ECHO_C" >&6 if test "${ac_cv_header_dld_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_dld_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_dld_h" >&5 echo "${ECHO_T}$ac_cv_header_dld_h" >&6 fi if test $ac_cv_header_dld_h = yes; then SHLIB_LD="ld -shared" DL_OBJS="tclLoadDld.o" DL_LIBS="-ldld" LD_SEARCH_FLAGS="" fi fi if test "`uname -m`" = "alpha" ; then CFLAGS="$CFLAGS -mieee" fi # The combo of gcc + glibc has a bug related # to inlining of functions like strtod(). The # -fno-builtin flag should address this problem # but it does not work. The -fno-inline flag # is kind of overkill but it works. # Disable inlining only when one of the # files in compat/*.c is being linked in. if test x"${USE_COMPAT}" != x ; then CFLAGS="$CFLAGS -fno-inline" fi ;; GNU*) SHLIB_CFLAGS="-fPIC" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" if test "$have_dl" = yes; then SHLIB_LD="${CC} -shared" DL_OBJS="" DL_LIBS="-ldl" LDFLAGS="$LDFLAGS -Wl,--export-dynamic" LD_SEARCH_FLAGS="" else if test "${ac_cv_header_dld_h+set}" = set; then echo "$as_me:$LINENO: checking for dld.h" >&5 echo $ECHO_N "checking for dld.h... $ECHO_C" >&6 if test "${ac_cv_header_dld_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_dld_h" >&5 echo "${ECHO_T}$ac_cv_header_dld_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking dld.h usability" >&5 echo $ECHO_N "checking dld.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking dld.h presence" >&5 echo $ECHO_N "checking dld.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: dld.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: dld.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: dld.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: dld.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: dld.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: dld.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: dld.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: dld.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: dld.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: dld.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: dld.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to the iwidgets lists. ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for dld.h" >&5 echo $ECHO_N "checking for dld.h... $ECHO_C" >&6 if test "${ac_cv_header_dld_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_dld_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_dld_h" >&5 echo "${ECHO_T}$ac_cv_header_dld_h" >&6 fi if test $ac_cv_header_dld_h = yes; then SHLIB_LD="ld -shared" DL_OBJS="" DL_LIBS="-ldld" LD_SEARCH_FLAGS="" fi fi if test "`uname -m`" = "alpha" ; then CFLAGS="$CFLAGS -mieee" fi ;; MP-RAS-02*) SHLIB_CFLAGS="-K PIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS="" ;; MP-RAS-*) SHLIB_CFLAGS="-K PIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LDFLAGS="$LDFLAGS -Wl,-Bexport" LD_SEARCH_FLAGS="" ;; NetBSD-*|FreeBSD-[1-2].*) # Not available on all versions: check for include file. if test "${ac_cv_header_dlfcn_h+set}" = set; then echo "$as_me:$LINENO: checking for dlfcn.h" >&5 echo $ECHO_N "checking for dlfcn.h... $ECHO_C" >&6 if test "${ac_cv_header_dlfcn_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_dlfcn_h" >&5 echo "${ECHO_T}$ac_cv_header_dlfcn_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking dlfcn.h usability" >&5 echo $ECHO_N "checking dlfcn.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking dlfcn.h presence" >&5 echo $ECHO_N "checking dlfcn.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: dlfcn.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: dlfcn.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: dlfcn.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: dlfcn.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: dlfcn.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: dlfcn.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: dlfcn.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: dlfcn.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: dlfcn.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: dlfcn.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: dlfcn.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to the iwidgets lists. ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for dlfcn.h" >&5 echo $ECHO_N "checking for dlfcn.h... $ECHO_C" >&6 if test "${ac_cv_header_dlfcn_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_dlfcn_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_dlfcn_h" >&5 echo "${ECHO_T}$ac_cv_header_dlfcn_h" >&6 fi if test $ac_cv_header_dlfcn_h = yes; then # NetBSD/SPARC needs -fPIC, -fpic will not do. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' echo "$as_me:$LINENO: checking for ELF" >&5 echo $ECHO_N "checking for ELF... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __ELF__ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' fi rm -f conftest* else SHLIB_CFLAGS="" SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".a" DL_OBJS="tclLoadAout.o" DL_LIBS="" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' fi # FreeBSD doesn't handle version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; OpenBSD-*) SHLIB_LD="${CC} -shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS="" echo "$as_me:$LINENO: checking for ELF" >&5 echo $ECHO_N "checking for ELF... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __ELF__ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' fi rm -f conftest* # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; FreeBSD-*) # FreeBSD 3.* and greater have ELF. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="$LDFLAGS -export-dynamic" LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' if test "${TCL_THREADS}" = "1" ; then # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi case $system in FreeBSD-3.*) # FreeBSD-3 doesn't handle version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Darwin-*) SHLIB_CFLAGS="-fno-common" SHLIB_LD="cc -dynamiclib \${LDFLAGS}" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".dylib" DL_OBJS="tclLoadDyld.o" DL_LIBS="" LDFLAGS="$LDFLAGS -prebind -Wl,-search_paths_first" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" CFLAGS_OPTIMIZE="-Os" ;; NEXTSTEP-*) SHLIB_CFLAGS="" SHLIB_LD="cc -nostdlib -r" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadNext.o" DL_LIBS="" LD_SEARCH_FLAGS="" ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy cat >>confdefs.h <<\_ACEOF #define _OE_SOCKETS 1 _ACEOF # needed in sys/socket.h ;; OSF1-1.0|OSF1-1.1|OSF1-1.2) # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1 SHLIB_CFLAGS="" # Hack: make package name same as library name SHLIB_LD='ld -R -export :' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadOSF.o" DL_LIBS="" LD_SEARCH_FLAGS="" ;; OSF1-1.*) # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 SHLIB_CFLAGS="-fPIC" if test "$SHARED_BUILD" = "1" ; then SHLIB_LD="ld -shared" else SHLIB_LD="ld -non_shared" fi SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS="" ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" if test "$SHARED_BUILD" = "1" ; then SHLIB_LD='ld -shared -expect_unresolved "*"' else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' if test "$GCC" = "yes" ; then CFLAGS="$CFLAGS -mieee" else CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" fi # see pthread_intro(3) for pthread support on osf1, k.furukawa if test "${TCL_THREADS}" = "1" ; then CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` if test "$GCC" = "yes" ; then LIBS="$LIBS -lpthread -lmach -lexc" else CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi fi ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" # dlopen is in -lc on QNX DL_LIBS="" LD_SEARCH_FLAGS="" ;; RISCos-*) SHLIB_CFLAGS="-G 0" SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".a" DL_OBJS="tclLoadAout.o" DL_LIBS="" LDFLAGS="$LDFLAGS -Wl,-D,08000000" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' ;; SCO_SV-3.2*) # Note, dlopen is available only on SCO 3.2.5 and greater. However, # this test works, since "uname -s" was non-standard in 3.2.4 and # below. if test "$GCC" = "yes" ; then SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" else SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" fi SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="" LD_SEARCH_FLAGS="" ;; SINIX*5.4*) SHLIB_CFLAGS="-K PIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS="" ;; SunOS-4*) SHLIB_CFLAGS="-PIC" SHLIB_LD="ld" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' # SunOS can't handle version numbers with dots in them in library # specs, like -ltcl7.5, so use -ltcl75 instead. Also, it # requires an extra version number at the end of .so file names. # So, the library has to have a name like libtcl75.so.1.0 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.1.0' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; SunOS-5.[0-6]*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. cat >>confdefs.h <<\_ACEOF #define _REENTRANT 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define _POSIX_PTHREAD_SEMANTICS 1 _ACEOF SHLIB_CFLAGS="-KPIC" # Note: need the LIBS below, otherwise Tk won't find Tcl's # symbols when dynamically loaded into tclsh. SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" if test "$GCC" = "yes" ; then SHLIB_LD="$CC -shared" LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else SHLIB_LD="/usr/ccs/bin/ld -G -z text" LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' fi ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. cat >>confdefs.h <<\_ACEOF #define _REENTRANT 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define _POSIX_PTHREAD_SEMANTICS 1 _ACEOF SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes" ; then arch=`isainfo` if test "$arch" = "sparcv9 sparc" ; then if test "$GCC" = "yes" ; then if test "`gcc -dumpversion` | awk -F. '{print }'" -lt "3" ; then { echo "$as_me:$LINENO: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5 echo "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" fi else do64bit_ok=yes if test "$do64bitVIS" = "yes" ; then CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS="$LDFLAGS -xarch=v9a" else CFLAGS="$CFLAGS -xarch=v9" LDFLAGS="$LDFLAGS -xarch=v9" fi fi else { echo "$as_me:$LINENO: WARNING: \"64bit mode only supported sparcv9 system\"" >&5 echo "$as_me: WARNING: \"64bit mode only supported sparcv9 system\"" >&2;} fi fi # Note: need the LIBS below, otherwise Tk won't find Tcl's # symbols when dynamically loaded into tclsh. SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" if test "$GCC" = "yes" ; then SHLIB_LD="$CC -shared" LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' if test "$do64bit" = "yes" ; then # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS},-R,$v9gcclibdir" fi else SHLIB_LD="/usr/ccs/bin/ld -G -z text" LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' fi ;; ULTRIX-4.*) SHLIB_CFLAGS="-G 0" SHLIB_SUFFIX=".a" SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" SHLIB_LD_LIBS='${LIBS}' DL_OBJS="tclLoadAout.o" DL_LIBS="" LDFLAGS="$LDFLAGS -Wl,-D,08000000" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' if test "$GCC" != "yes" ; then CFLAGS="$CFLAGS -DHAVE_TZSET -std1" fi ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD="cc -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" DL_LIBS="-ldl" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. hold_ldflags=$LDFLAGS echo "$as_me:$LINENO: checking for ld accepts -Bexport flag" >&5 echo $ECHO_N "checking for ld accepts -Bexport flag... $ECHO_C" >&6 LDFLAGS="$LDFLAGS -Wl,-Bexport" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then found=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LDFLAGS=$hold_ldflags found=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext echo "$as_me:$LINENO: result: $found" >&5 echo "${ECHO_T}$found" >&6 LD_SEARCH_FLAGS="" ;; esac if test "$do64bit" = "yes" -a "$do64bit_ok" = "no" ; then { echo "$as_me:$LINENO: WARNING: \"64bit support being disabled -- don\'t know magic for this platform\"" >&5 echo "$as_me: WARNING: \"64bit support being disabled -- don\'t know magic for this platform\"" >&2;} fi # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic # Loading for Tcl -- What Became of It?". Proc. 2nd Tcl/Tk Workshop, # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need # to determine which of several header files defines the a.out file # format (a.out.h, sys/exec.h, or sys/exec_aout.h). At present, we # support only a file format that is more or less version-7-compatible. # In particular, # - a.out files must begin with `struct exec'. # - the N_TXTOFF on the `struct exec' must compute the seek address # of the text segment # - The `struct exec' must contain a_magic, a_text, a_data, a_bss # and a_entry fields. # The following compilation should succeed if and only if either sys/exec.h # or a.out.h is usable for the purpose. # # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the # `struct exec' includes a second header that contains information that # duplicates the v7 fields that are needed. if test "x$DL_OBJS" = "xtclLoadAout.o" ; then echo "$as_me:$LINENO: checking sys/exec.h" >&5 echo $ECHO_N "checking sys/exec.h... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { struct exec foo; unsigned long seek; int flag; #if defined(__mips) || defined(mips) seek = N_TXTOFF (foo.ex_f, foo.ex_o); #else seek = N_TXTOFF (foo); #endif flag = (foo.a_magic == OMAGIC); return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_ok=usable else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_ok=unusable fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $tcl_ok" >&5 echo "${ECHO_T}$tcl_ok" >&6 if test $tcl_ok = usable; then cat >>confdefs.h <<\_ACEOF #define USE_SYS_EXEC_H 1 _ACEOF else echo "$as_me:$LINENO: checking a.out.h" >&5 echo $ECHO_N "checking a.out.h... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { struct exec foo; unsigned long seek; int flag; #if defined(__mips) || defined(mips) seek = N_TXTOFF (foo.ex_f, foo.ex_o); #else seek = N_TXTOFF (foo); #endif flag = (foo.a_magic == OMAGIC); return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_ok=usable else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_ok=unusable fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $tcl_ok" >&5 echo "${ECHO_T}$tcl_ok" >&6 if test $tcl_ok = usable; then cat >>confdefs.h <<\_ACEOF #define USE_A_OUT_H 1 _ACEOF else echo "$as_me:$LINENO: checking sys/exec_aout.h" >&5 echo $ECHO_N "checking sys/exec_aout.h... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { struct exec foo; unsigned long seek; int flag; #if defined(__mips) || defined(mips) seek = N_TXTOFF (foo.ex_f, foo.ex_o); #else seek = N_TXTOFF (foo); #endif flag = (foo.a_midmag == OMAGIC); return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_ok=usable else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_ok=unusable fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $tcl_ok" >&5 echo "${ECHO_T}$tcl_ok" >&6 if test $tcl_ok = usable; then cat >>confdefs.h <<\_ACEOF #define USE_SYS_EXEC_AOUT_H 1 _ACEOF else DL_OBJS="" fi fi fi fi # Step 5: disable dynamic loading if requested via a command-line switch. # Check whether --enable-load or --disable-load was given. if test "${enable_load+set}" = set; then enableval="$enable_load" tcl_ok=$enableval else tcl_ok=yes fi; if test "$tcl_ok" = "no"; then DL_OBJS="" fi if test "x$DL_OBJS" != "x" ; then BUILD_DLTEST="\$(DLTEST_TARGETS)" else echo "Can't figure out how to do dynamic loading or shared libraries" echo "on this system." SHLIB_CFLAGS="" SHLIB_LD="" SHLIB_SUFFIX="" DL_OBJS="tclLoadNone.o" DL_LIBS="" LDFLAGS="$LDFLAGS_ORIG" LD_SEARCH_FLAGS="" BUILD_DLTEST="" fi # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. if test "$DL_OBJS" != "tclLoadNone.o" ; then if test "$GCC" = "yes" ; then case $system in AIX-*) ;; BSD/OS*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*) ;; Darwin-*) ;; RISCos-*) ;; SCO_SV-3.2*) ;; ULTRIX-4.*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac fi fi if test "$SHARED_LIB_SUFFIX" = "" ; then SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' fi if test "$UNSHARED_LIB_SUFFIX" = "" ; then UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' fi # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary echo "$as_me:$LINENO: checking for required early compiler flags" >&5 echo $ECHO_N "checking for required early compiler flags... $ECHO_C" >&6 tcl_flags="" if test "${tcl_cv_flag__isoc99_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_cv_flag__isoc99_source=no else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _ISOC99_SOURCE 1 #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_cv_flag__isoc99_source=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_cv_flag__isoc99_source=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define _ISOC99_SOURCE 1 _ACEOF tcl_flags="$tcl_flags _ISOC99_SOURCE" fi if test "${tcl_cv_flag__largefile64_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_cv_flag__largefile64_source=no else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGEFILE64_SOURCE 1 #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_cv_flag__largefile64_source=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_cv_flag__largefile64_source=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define _LARGEFILE64_SOURCE 1 _ACEOF tcl_flags="$tcl_flags _LARGEFILE64_SOURCE" fi if test "x${tcl_flags}" = "x" ; then echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 else echo "$as_me:$LINENO: result: ${tcl_flags}" >&5 echo "${ECHO_T}${tcl_flags}" >&6 fi echo "$as_me:$LINENO: checking for 64-bit integer type" >&5 echo $ECHO_N "checking for 64-bit integer type... $ECHO_C" >&6 if test "${tcl_cv_type_64bit+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { __int64 value = (__int64) 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_type_64bit=__int64 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_type_64bit="long long" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { switch (0) { case 1: case (sizeof(${tcl_type_64bit})==sizeof(long)): ; } ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_cv_type_64bit=${tcl_type_64bit} else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "${tcl_cv_type_64bit}" = none ; then cat >>confdefs.h <<\_ACEOF #define TCL_WIDE_INT_IS_LONG 1 _ACEOF echo "$as_me:$LINENO: result: using long" >&5 echo "${ECHO_T}using long" >&6 elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # We actually want to use the default tcl.h checks in this # case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* echo "$as_me:$LINENO: result: using Tcl header defaults" >&5 echo "${ECHO_T}using Tcl header defaults" >&6 else cat >>confdefs.h <<_ACEOF #define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit} _ACEOF echo "$as_me:$LINENO: result: ${tcl_cv_type_64bit}" >&5 echo "${ECHO_T}${tcl_cv_type_64bit}" >&6 # Now check for auxiliary declarations echo "$as_me:$LINENO: checking for struct dirent64" >&5 echo $ECHO_N "checking for struct dirent64... $ECHO_C" >&6 if test "${tcl_cv_struct_dirent64+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { struct dirent64 p; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_cv_struct_dirent64=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_cv_struct_dirent64=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define HAVE_STRUCT_DIRENT64 1 _ACEOF fi echo "$as_me:$LINENO: result: ${tcl_cv_struct_dirent64}" >&5 echo "${ECHO_T}${tcl_cv_struct_dirent64}" >&6 echo "$as_me:$LINENO: checking for struct stat64" >&5 echo $ECHO_N "checking for struct stat64... $ECHO_C" >&6 if test "${tcl_cv_struct_stat64+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { struct stat64 p; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_cv_struct_stat64=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_cv_struct_stat64=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_struct_stat64}" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define HAVE_STRUCT_STAT64 1 _ACEOF fi echo "$as_me:$LINENO: result: ${tcl_cv_struct_stat64}" >&5 echo "${ECHO_T}${tcl_cv_struct_stat64}" >&6 echo "$as_me:$LINENO: checking for off64_t" >&5 echo $ECHO_N "checking for off64_t... $ECHO_C" >&6 if test "${tcl_cv_type_off64_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { off64_t offset; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_cv_type_off64_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_cv_type_off64_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_type_off64_t}" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define HAVE_TYPE_OFF64_T 1 _ACEOF fi echo "$as_me:$LINENO: result: ${tcl_cv_type_off64_t}" >&5 echo "${ECHO_T}${tcl_cv_type_off64_t}" >&6 fi # Allow the user to provide this setting in the env if test "x${TCLSH_PROG}" = "x" ; then echo "$as_me:$LINENO: checking for tclsh" >&5 echo $ECHO_N "checking for tclsh... $ECHO_C" >&6 if test "${ac_cv_path_tclsh+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else search_path=`echo ${PATH} | sed -e 's/:/ /g'` if test "${TEA_PLATFORM}" != "windows" -o \ \( "$do64bit_ok" = "no" -a "$doWince" = "no" \) ; then # Do not allow target tclsh in known cross-compile builds, # as we need one we can run on this system search_path="${TCL_BIN_DIR} ${TCL_BIN_DIR}/../bin ${exec_prefix}/bin ${prefix}/bin ${search_path}" fi for dir in $search_path ; do for j in `ls -r $dir/tclsh[8-9]*${EXEEXT} 2> /dev/null` \ `ls -r $dir/tclsh*${EXEEXT} 2> /dev/null` ; do if test x"$ac_cv_path_tclsh" = x ; then if test -f "$j" ; then ac_cv_path_tclsh=$j break fi fi done done fi if test -f "$ac_cv_path_tclsh" ; then TCLSH_PROG=$ac_cv_path_tclsh echo "$as_me:$LINENO: result: $TCLSH_PROG" >&5 echo "${ECHO_T}$TCLSH_PROG" >&6 else { { echo "$as_me:$LINENO: error: No tclsh found in PATH: $search_path" >&5 echo "$as_me: error: No tclsh found in PATH: $search_path" >&2;} { (exit 1); exit 1; }; } fi fi # Allow the user to provide this setting in the env if test "x${WISH_PROG}" = "x" ; then echo "$as_me:$LINENO: checking for wish" >&5 echo $ECHO_N "checking for wish... $ECHO_C" >&6 if test "${ac_cv_path_wish+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else search_path=`echo ${PATH} | sed -e 's/:/ /g'` if test "${TEA_PLATFORM}" != "windows" -o \ \( "$do64bit_ok" = "no" -a "$doWince" = "no" \) ; then # Do not allow target wish in known cross-compile builds, # as we need one we can run on this system search_path="${TK_BIN_DIR} ${TK_BIN_DIR}/../bin ${TCL_BIN_DIR} ${TCL_BIN_DIR}/../bin ${exec_prefix}/bin ${prefix}/bin ${search_path}" fi for dir in $search_path ; do for j in `ls -r $dir/wish[8-9]*${EXEEXT} 2> /dev/null` \ `ls -r $dir/wish*${EXEEXT} 2> /dev/null` ; do if test x"$ac_cv_path_wish" = x ; then if test -f "$j" ; then ac_cv_path_wish=$j break fi fi done done fi if test -f "$ac_cv_path_wish" ; then WISH_PROG=$ac_cv_path_wish echo "$as_me:$LINENO: result: $WISH_PROG" >&5 echo "${ECHO_T}$WISH_PROG" >&6 else { { echo "$as_me:$LINENO: error: No wish found in PATH: $search_path" >&5 echo "$as_me: error: No wish found in PATH: $search_path" >&2;} { (exit 1); exit 1; }; } fi fi #-------------------------------------------------------------------- # Fill in template files with the proper info. #-------------------------------------------------------------------- ac_config_files="$ac_config_files Makefile iwidgets.tcl pkgIndex.tcl" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by iwidgets $as_me 4.1.1, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ iwidgets config.status 4.1.1 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "iwidgets.tcl" ) CONFIG_FILES="$CONFIG_FILES iwidgets.tcl" ;; "pkgIndex.tcl" ) CONFIG_FILES="$CONFIG_FILES pkgIndex.tcl" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@CYGPATH@,$CYGPATH,;t t s,@EXEEXT@,$EXEEXT,;t t s,@PKG_LIB_FILE@,$PKG_LIB_FILE,;t t s,@PKG_STUB_LIB_FILE@,$PKG_STUB_LIB_FILE,;t t s,@PKG_STUB_SOURCES@,$PKG_STUB_SOURCES,;t t s,@PKG_STUB_OBJECTS@,$PKG_STUB_OBJECTS,;t t s,@PKG_TCL_SOURCES@,$PKG_TCL_SOURCES,;t t s,@PKG_HEADERS@,$PKG_HEADERS,;t t s,@PKG_INCLUDES@,$PKG_INCLUDES,;t t s,@PKG_LIBS@,$PKG_LIBS,;t t s,@PKG_CFLAGS@,$PKG_CFLAGS,;t t s,@TCL_VERSION@,$TCL_VERSION,;t t s,@TCL_BIN_DIR@,$TCL_BIN_DIR,;t t s,@TCL_SRC_DIR@,$TCL_SRC_DIR,;t t s,@TCL_LIB_FILE@,$TCL_LIB_FILE,;t t s,@TCL_LIB_FLAG@,$TCL_LIB_FLAG,;t t s,@TCL_LIB_SPEC@,$TCL_LIB_SPEC,;t t s,@TCL_STUB_LIB_FILE@,$TCL_STUB_LIB_FILE,;t t s,@TCL_STUB_LIB_FLAG@,$TCL_STUB_LIB_FLAG,;t t s,@TCL_STUB_LIB_SPEC@,$TCL_STUB_LIB_SPEC,;t t s,@TCL_LIBS@,$TCL_LIBS,;t t s,@TCL_DEFS@,$TCL_DEFS,;t t s,@TCL_EXTRA_CFLAGS@,$TCL_EXTRA_CFLAGS,;t t s,@TCL_LD_FLAGS@,$TCL_LD_FLAGS,;t t s,@TCL_SHLIB_LD_LIBS@,$TCL_SHLIB_LD_LIBS,;t t s,@TK_VERSION@,$TK_VERSION,;t t s,@TK_BIN_DIR@,$TK_BIN_DIR,;t t s,@TK_SRC_DIR@,$TK_SRC_DIR,;t t s,@TK_LIB_FILE@,$TK_LIB_FILE,;t t s,@TK_LIB_FLAG@,$TK_LIB_FLAG,;t t s,@TK_LIB_SPEC@,$TK_LIB_SPEC,;t t s,@TK_STUB_LIB_FILE@,$TK_STUB_LIB_FILE,;t t s,@TK_STUB_LIB_FLAG@,$TK_STUB_LIB_FLAG,;t t s,@TK_STUB_LIB_SPEC@,$TK_STUB_LIB_SPEC,;t t s,@TK_LIBS@,$TK_LIBS,;t t s,@TK_XINCLUDES@,$TK_XINCLUDES,;t t s,@itcl_VERSION@,$itcl_VERSION,;t t s,@itcl_BIN_DIR@,$itcl_BIN_DIR,;t t s,@itcl_SRC_DIR@,$itcl_SRC_DIR,;t t s,@itcl_LIB_FILE@,$itcl_LIB_FILE,;t t s,@itcl_LIB_SPEC@,$itcl_LIB_SPEC,;t t s,@itcl_STUB_LIB_FILE@,$itcl_STUB_LIB_FILE,;t t s,@itcl_STUB_LIB_SPEC@,$itcl_STUB_LIB_SPEC,;t t s,@itcl_STUB_LIB_PATH@,$itcl_STUB_LIB_PATH,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@OBJEXT@,$OBJEXT,;t t s,@AR@,$AR,;t t s,@TCLSH_PROG@,$TCLSH_PROG,;t t s,@CELIB_DIR@,$CELIB_DIR,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@DL_LIBS@,$DL_LIBS,;t t s,@CFLAGS_DEBUG@,$CFLAGS_DEBUG,;t t s,@CFLAGS_OPTIMIZE@,$CFLAGS_OPTIMIZE,;t t s,@CFLAGS_WARNING@,$CFLAGS_WARNING,;t t s,@STLIB_LD@,$STLIB_LD,;t t s,@SHLIB_LD@,$SHLIB_LD,;t t s,@SHLIB_CFLAGS@,$SHLIB_CFLAGS,;t t s,@SHLIB_LD_LIBS@,$SHLIB_LD_LIBS,;t t s,@LDFLAGS_DEBUG@,$LDFLAGS_DEBUG,;t t s,@LDFLAGS_OPTIMIZE@,$LDFLAGS_OPTIMIZE,;t t s,@LD_LIBRARY_PATH_VAR@,$LD_LIBRARY_PATH_VAR,;t t s,@WISH_PROG@,$WISH_PROG,;t t s,@ITCL_LIB_DIR@,$ITCL_LIB_DIR,;t t s,@ITK_LIB_DIR@,$ITK_LIB_DIR,;t t s,@ITK_SRC_DIR@,$ITK_SRC_DIR,;t t s,@IWIDGETS_SRC_DIR@,$IWIDGETS_SRC_DIR,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi iwidgets-4.1.1/mac/0000755003604700454610000000000013153516405012472 5ustar dgp771diviwidgets-4.1.1/mac/CVS/0000755003604700454610000000000013153526747013137 5ustar dgp771diviwidgets-4.1.1/mac/CVS/Repository0000644003604700454610000000001513153516405015223 0ustar dgp771diviwidgets/mac iwidgets-4.1.1/mac/CVS/Entries0000644003604700454610000000000213153516405014451 0ustar dgp771divD iwidgets-4.1.1/mac/CVS/Root0000644003604700454610000000006613153516405013775 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/unix/0000755003604700454610000000000013153516405012715 5ustar dgp771diviwidgets-4.1.1/unix/CVS/0000755003604700454610000000000013153526747013362 5ustar dgp771diviwidgets-4.1.1/unix/CVS/Repository0000644003604700454610000000001613153516405015447 0ustar dgp771diviwidgets/unix iwidgets-4.1.1/unix/CVS/Entries0000644003604700454610000000000213153516405014674 0ustar dgp771divD iwidgets-4.1.1/unix/CVS/Root0000644003604700454610000000006613153516405014220 0ustar dgp771div:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl iwidgets-4.1.1/pkgIndex.tcl.in0000644003604700454610000000017710175313474014623 0ustar dgp771div# Tcl package index file, version 1.0 package ifneeded Iwidgets @PACKAGE_VERSION@ [list source [file join $dir iwidgets.tcl]] iwidgets-4.1.1/doc/0000755003604700454610000000000013136711010012465 5ustar dgp771diviwidgets-4.1.1/doc/timeentry.n0000644003604700454610000001304007476742024014705 0ustar dgp771div'\" '\" Copyright (c) 1997 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) timeentry.n 1.0 97/04/30 16:04:44 '\" .so man.macros .HS iwidgets::timeentry iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::timeentry \- Create and manipulate a timeentry widget .SH SYNOPSIS \fBiwidgets::timeentry\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::LabeledWidget <- iwidgets::Timefield <- iwidgets::Timeentry .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground justify relief\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on these inherited options. .LP .nf .ta 4c 8c 12c \fBcommand\fR \fBformat\fR \fBseconds\fR \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "timefield" class manual entry for details on these inherited options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBhourRadius\fR \fBhourColor\fR \fBminuteRadius\fR \fBminuteColor\fR \fBpivotRadius\fR \fBpivotColor\fR \fBsecondRadius\fR \fBsecondColor\fR \fBclockColor\fR \fBclockStipple\fR \fBtickColor\fR \fBwatchHeight\fR \fBwatchWidth\fR .fi .LP See the "watch" manual entry for details on the associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBcloseText\fR Class: \fBText\fR Command-Line Switch: \fB-closetext\fR .fi .IP Specifies the text to be displayed on the close button of the watch popup. The default is Close. .LP .nf Name: \fBgrab\fR Class: \fBGrab\fR Command-Line Switch: \fB-grab\fR .fi .IP Specifies the grab level, \fBlocal\fR or \fBglobal\fR, to be obtained before bringing up the popup watch. The default is global. For more information concerning grab levels, consult the documentation for Tk's \fBgrab\fR command. .LP .nf Name: \fBicon\fR Class: \fBIcon\fR Command-Line Switch: \fB-icon\fR .fi .IP Specifies the watch icon image to be used in the timeentry. This image must have been created previously with the \fBimage create\fR command. Should one not be provided, then one will be generated, pixmap if possible, bitmap otherwise. .LP .nf Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Specifies the state of the widget which may be \fBdisabled\fR or \fBnormal\fR. A disabled state prevents selection of the timefield or time icon button. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::timeentry\fR command creates a time entry field with a popup watch by combining the timefield and watch widgets together. This allows a user to enter the time via the keyboard or by using the mouse and selecting the watch icon which brings up a popup watch. .DE .SH "METHODS" .PP The \fBiwidgets::timeentry\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for timeentry widgets: .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBget\fR \fBisvalid\fR \fBshow\fR .fi .LP See the "timefield" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::timeentry\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::timeentry\fR command. .SH "COMPONENTS" .LP .nf Name: \fBlabel\fR Class: \fBLabel\fR .fi .IP The label component provides a label component to used to identify the time. See the "label" widget manual entry for details on the label component item. .LP .nf Name: \fBiconbutton\fR Class: \fBLabel\fR .fi .IP The iconbutton component provides a labelbutton component to act as a lightweight button displaying the watch icon. Upon pressing the labelbutton, the watch appears. See the "label" widget manual entry for details on the labelbutton component item. .LP .nf Name: \fBtime\fR Class: \fBEntry\fR .fi .IP The time component provides the entry field for time input and display. See the "entry" widget manual entry for details on the time component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::timeentry .te pack .te .DE .SH AUTHOR Mark L. Ulferts .LP .SH KEYWORDS timeentry, widget iwidgets-4.1.1/doc/tabset.n0000644003604700454610000004526207476742024014162 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) tabset.n '\" .so man.macros .HS iwidgets::tabset iwid .BS '\" Note: do not modify the .SH NAME line immediately below! '\" '\" .SH NAME iwidgets::tabset \- create and manipulate tabs as as set .SH SYNOPSIS \fBiwidgets::tabset\fR \fIpathName\fR ?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Tabset .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background font selectBackground cursor foreground selectForeground disabledForeground height width\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBangle\fR Class: \fBAngle\fR Command-Line Switch: \fB-angle\fR .fi .IP Specifes the angle of slope from the inner edge to the outer edge of the tab. An angle of 0 specifies square tabs. Valid ranges are 0 to 45 degrees inclusive. Default is 15 degrees. If tabPos is e or w, this option is ignored. .LP .nf Name: \fBbackdrop\fR Class: \fBBackdrop\fR Command-Line Switch: \fB-backdrop\fR .fi .IP Specifies a background color to use when filling in the area behind the tabs. .LP .nf Name: \fBbevelAmount\fR Class: \fBBevelAmount\fR Command-Line Switch: \fB-bevelamount\fR .fi .IP Specifes the size of tab corners. A value of 0 with angle set to 0 results in square tabs. A \fBbevelAmount\fR of 4, means that the tab will be drawn with angled corners that cut in 4 pixels from the edge of the tab. The default is 0. .LP .nf Name: \fBcommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-command\fR Specifes the prefix of a Tcl command to invoke to change the view in the widget associated with the tabset. When a user selects a tab, a Tcl command is invoked. The actual command consists of this option followed by a space and a number. The number is the numerical index of the tab that has been selected. .LP .nf Name: \fBequalTabs\fR Class: \fBEqualTabs\fR Command-Line Switch: \fB-equaltabs\fR .fi .IP Specifies whether to force tabs to be equal sized or not. A value of \fBtrue\fR means constrain tabs to be equal sized. A value of \fBfalse\fR allows each tab to size based on the text label size. The value may have any of the forms accepted by the \fBTcl_GetBoolean\fR, such as \fBtrue\fR, \fBfalse\fR, \fB0\fR, \fB1\fR, \fByes\fR, or \fBno\fR. .IP For horizontally positioned tabs (\fBtabPos\fR is either \fBs\fR or \fBn\fR), \fBtrue\fR forces all tabs to be equal width (the width being equal to the longest label plus any padX specified). Horizontal tabs are always equal in height. .IP For vertically positioned tabs (\fBtabPos\fR is either \fBw\fR or \fBe\fR), \fBtrue\fR forces all tabs to be equal height (the height being equal to the height of the label with the largest font). Vertically oriented tabs are always equal in width. .LP .nf Name: \fBgap\fR Class: \fBGap\fR Command-Line Switch: \fB-gap\fR .fi .IP Specifies the amount of pixel space to place between each tab. Value may be any pixel offset value. In addition, a special keyword \fBoverlap\fR can be used as the value to achieve a standard overlap of tabs. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBmargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-margin\fR .fi .IP Specifies the amount of space to place between the outside edge of the tabset and the outside edge of its tabs. If \fBtabPos\fR is \fBs\fR, this is the amount of space between the bottom edge of the tabset and the bottom edge of the set of tabs. If \fBtabPos\fR is \fBn\fR, this is the amount of space between the top edge of the tabset and the top edge of the set of tabs. If \fBtabPos\fR is \fBe\fR, this is the amount of space between the right edge of the tabset and the right edge of the set of tabs. If \fBtabPos\fR is \fBw\fR, this is the amount of space between the left edge of the tabset and the left edge of the set of tabs. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBpadX\fR Class: \fBPadX\fR Command-Line Switch: \fB-padx\fR .fi .IP Specifies a non-negative value indicating how much extra space to request for a tab around its label in the X-direction. When computing how large a window it needs, the tab will add this amount to the width it would normally need The tab will end up with extra internal space to the left and right of its text label. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBpadY\fR Class: \fBPadY\fR Command-Line Switch: \fB-pady\fR .fi .IP Specifies a non-negative value indicating how much extra space to request for a tab around its label in the Y-direction. When computing how large a window it needs, the tab will add this amount to the height it would normally need The tab will end up with extra internal space to the top and bottom of its text label. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBraiseSelect\fR Class: \fBRaiseSelect\fR Command-Line Switch: \fB-raiseselect\fR .fi .IP Specifes whether to slightly raise the selected tab from the rest of the tabs. The selected tab is drawn 2 pixels closer to the outside edge of the tabset than the unselected tabs. A value of true says to raise selected tabs, a value of false turns this off. The default is false. The value may have any of the forms accepted by the \fBTcl_GetBoolean\fR, such as \fBtrue\fR, \fBfalse\fR, \fB0\fR, \fB1\fR, \fByes\fR, or \fBno\fR. .LP .nf Name: \fBstart\fR Class: \fBStart\fR Command-Line Switch: \fB-start\fR .fi .IP Specifies the amount of space to place between the left or top edge of the tabset and the starting edge of its tabs. For horizontally positioned tabs, this is the amount of space between the left edge of the tabset and the left edge of the first tab. For vertically positioned tabs, this is the amount of space between the top of the tabset and the top of the first tab. This value may change if the user performs a MButton-2 scroll on the tabs. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Sets the active state of the tabset. Specifying \fBnormal\fR allows all tabs to be selectable. Specifying \fBdisabled\fR disables the tabset causing all tabs to be drawn in the disabledForeground color. .LP .nf Name: \fBtabBorders\fR Class: \fBTabBorders\fR Command-Line Switch: \fB-tabborders\fR .fi .IP Specifies whether to draw the borders of tabs that are not selected. Specifying true (the default) draws these borders, specifying false draws only the border around the selected tab. The value may have any of the forms accepted by the \fBTcl_GetBoolean\fR, such as \fBtrue\fR, \fBfalse,\fR \fB0\fR, \fB1\fR, \fByes\fR, or \fBno\fR. .LP .nf Name: \fBtabPos\fR Class: \fBTabPos\fR Command-Line Switch: \fB-tabpos\fR .fi .IP Specifies the location of the set of tabs in relation to another widget. Must be \fBn\fR, \fBs\fR, \fBe\fR, or \fBw\fR. Defaults to \fBs\fR. North tabs open downward, South tabs open upward. West tabs open to the right, east tabs open to the left. .BE .SH DESCRIPTION .PP The \fBiwidgets::tabset\fR command creates a new window (given by the pathName argument) and makes it into a \fBtabset\fR widget. Additional \fIoptions\fR, described above may be specified on the command line or in the option database to configure aspects of the tabset such as its colors, font, and text. The \fBiwidgets::tabset\fR command returns its \fIpathName\fR argument. At the time this command is invoked, there must not exist a window named \fIpathName\fR, but pathName's parent must exist. .PP A \fBtabset\fR is a widget that contains a set of Tab buttons. It displays these tabs in a row or column depending on it tabpos. When a tab is clicked on, it becomes the only tab in the tab set that is selected. All other tabs are deselected. The Tcl command prefix associated with this tab (through the command tab configure option) is invoked with the tab index number appended to its argument list. This allows the tabset to control another widget such as a Notebook. .SH TABS Tabs are drawn to appear attached to another widget. The tabset draws an edge boundary along one of its edges. This edge is known as the attachment edge. This edge location is dependent on the value of \fBtabPos\fR. For example, if \fBtabPos\fR is \fBs\fR, the attachment edge wil be on the top side of the tabset (in order to attach to the bottom or south side of its attached widget). The selected tab is draw with a 3d relief to appear above the other tabs. This selected tab "opens" toward attachment edge. .PP Tabs can be controlled in their location along the edges, the angle that tab sides are drawn with, gap between tabs, starting margin of tabs, internal padding around labels in a tab, the font, and its text or bitmap. .SH "WIDGET-SPECIFIC METHODS" .PP The \fBiwidgets::tabset\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIoption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP Many of the widget commands for a tabset take as one argument an indicator of which tab of the tabset to operate on. These indicators are called indexes and may be specified in any of the following forms: .TP \fInumber\fR Specifies the tab numerically, where 0 corresponds to the first tab in the tab set, 1 to the second, and so on. .TP \fBselect\fR Specifies the currently selected tab's index. If no tab is currently selected, the value -1 is returned. .TP \fBend\fR Specifes the last tab in the tabset's index. If the tabset is empty this will return -1. .TP \fIpattern\fR If the index doesn't satisfy any of the above forms, then this form is used. Pattern is pattern-matched against the label of each tab in the tabset, in order from the first to the last tab, until a matching entry is found. The rules of Tcl_StringMatch are used. .PP '............................................................................. The following commands are possible for tabset widgets: .RS .TP \fIpathName\fR \fBadd\fR ?\fIoption\fR \fIvalue\fR \fIoption\fR \fIvalue\fR ...? Add a new tab at the end of the tabset. Returns the child site \fIpathName\fR. If additional arguments are present, they specify any of the following options: .RS .TP \fB-angle\fR \fIvalue\fR Specifes the angle of slope from the inner edge to the outer edge of the tab. An angle of 0 specifies square tabs. Valid ranges are 0 to 45 degrees inclusive. Default is 15 degrees. If this option is specified as an empty string (the default), then the angle option for the overall tabset is used. .TP \fB-background\fR \fIvalue\fR Specifies a background color to use for displaying tabs when they are in their normal state (unselected). If this option is specified as an empty string (the default), then the background option for the overall tabset is used. .TP \fB-bevelamount\fR \fIvalue\fR Specifes the size of tab corners. A value of 0 with angle set to 0 results in square tabs. A bevelAmount of 4, means that the tab will be drawn with angled corners that cut in 4 pixels from the edge of the tab. The default is 0. This is generally only set at the tabset configuration level. Tabs normally will want to share the same bevelAmount. .TP \fB-bitmap\fR \fIvalue\fR If label is a non-empty string, specifies a bitmap to display in the tab. Bitmap may be of any of the forms accepted by Tk_GetBitmap. .TP \fB-disabledforeground\fR \fIvalue\fR Specifies a foreground color to use for displaying tab labels when tabs are in their disable state. If this option is specified as an empty string (the default), then the disabledforeground option for the overall tabset is used. .TP \fB-font\fR \fIvalue\fR Specifies the font to use when drawing the label on a tab. If this option is specified as an empty string then the font option for the overall tabset is used. .TP \fB-foreground\fR \fIvalue\fR Specifies a foreground color to use for displaying tab labels when tabs are in their normal unselected state. If this option is specified as an empty string (the default), then the foreground option for the overall tabset is used. .TP \fB-image\fR \fIvalue\fR If label is a non-empty string, specifies an image to display in the tab. Image must have been created with the image create command. Typically, if the image option is specified then it overrides other options that specify a bitmap or textual value to display in the widget; the image option may be reset to an empty string to re-enable a bitmap or text display. .TP \fB-label\fR \fIvalue\fR Specifies a text string to be placed in the tabs label. If this value is set, the bitmap option is overridden and this option is used instead. This label serves as an additional identifier used to reference the tab. This label may be used for the index value in widget commands. .TP \fB-selectbackground\fR \fIvalue\fR Specifies a background color to use for displaying the selected tab. If this option is specified as an empty string (the default), then the selectBackground option for the overall tabset is used. .TP \fB-selectforeground\fR \fIvalue\fR Specifies a foreground color to use for displaying the selected tab. If this option is specified as an empty string (the default), then the selectForeground option for the overall tabset is used. .TP \fB-padx\fR \fIvalue\fR Specifies a non-negative value indicating how much extra space to request for a tab around its label in the X-direction. When computing how large a window it needs, the tab will add this amount to the width it would normally need The tab will end up with extra internal space to the left and right of its text label. This value may have any of the forms acceptable to Tk_GetPixels. If this option is specified as an empty string (the default), then the padX option for the overall tabset is used .TP \fB-pady\fR \fIvalue\fR Specifies a non-negative value indicating how much extra space to request for a tab around its label in the Y-direction. When computing how large a window it needs, the tab will add this amount to the height it would normally need The tab will end up with extra internal space to the top and bottom of its text label. This value may have any of the forms acceptable to Tk_GetPixels. If this option is specified as an empty string (the default), then the padY option for the overall tabset is used .TP \fB-state\fR \fIvalue\fR Sets the state of the tab. Specifying normal allows this tab to be selectable. Specifying disabled disables the this tab causing its tab label to be drawn in the disabledForeground color. The tab will not respond to events until the state is set back to normal. .RE .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue\fR \fIoption\fR \fIvalue\fR ...? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the iwidgets::tabset command. .TP \fIpathName\fR \fBdelete\fR \fIindex1\fR ?\fIindex2\fR? Delete all of the tabs between \fIindex1\fR and \fIindex2\fR inclusive. If \fIindex2\fR is omitted then it defaults to \fIindex1\fR. Returns an empty string. .TP \fIpathName\fR \fBindex\fR \fIindex\fR Returns the numerical index corresponding to \fIindex\fR. .TP \fIpathName\fR \fBinsert\fR \fIindex\fR ?\fIoption\fR \fIvalue\fR \fIoption\fR \fIvalue\fR ...? Insert a new tab in the tabset before the tab specified by \fIindex\fR. The additional arguments are the same as for the \fBadd\fR command. Returns the tab's \fIpathName\fR. .TP \fIpathName\fR \fBnext\fR Advances the selected tab to the next tab (order is determined by insertion order). If the currently selected tab is the last tab in the tabset, the selection wraps around to the first tab. It behaves as if the user selected the next tab. .TP \fIpathName\fR \fBtabconfigure\fR \fIindex\fR ?\fIoption\fR? ?\fIvalue\fR? This command is similar to the \fBconfigure\fR command, except that it applies to the options for an individual tab, whereas configure applies to the options for the tabset as a whole. Options may have any of the values accepted by the \fBadd\fR widget command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for tab index (see \fBTk_ConfigureInfo\fR for information on the format of this list). .TP \fIpathName\fR \fBprev\fR Moves the selected tab to the previous tab (order is determined by insertion order). If the currently selected tab is the first tab in the tabset, the selection wraps around to the last tab in the tabset. It behaves as if the user selected the previous tab. .TP \fIpathName\fR \fBselect\fR \fIindex\fR Selects the tab specified by \fIindex\fR as the currently selected tab. It behaves as if the user selected the new tab. .SH EXAMPLE .PP Following is an example that creates a tabset with two tabs and a list box that the tabset controls. In addition selecting an item from the list also selects the corresponding tab. .PP .nf .IP .ta 2c 8c 12c package require Iwidgets 4.0 # Define a proc that knows how to select an item # from a list given an index from the tabset -command callback. proc selectItem { item } { .l selection clear [.l curselection] .l selection set $item .l see $item } .IP # Define a proc that knows how to select a tab # given a y pixel coordinate from the list.. proc selectTab { y } { set whichItem [.l nearest $y] .ts select $whichItem } .IP # Create a listbox with two items (one and two) # and bind button 1 press to the selectTab procedure. listbox .l -selectmode single -exportselection false .l insert end one .l insert end two .l selection set 0 pack .l bind .l { selectTab %y } .IP # Create a tabset, set its -command to call selectItem # Add two labels to the tabset (one and two). iwidgets::tabset .ts -command selectItem .ts add -label 1 .ts add -label 2 .ts select 0 pack .ts -fill x -expand no .fi .SH AUTHOR Bill W. Scott .SH KEYWORDS tab tabset notebook tabnotebook iwidgets-4.1.1/doc/fileselectionbox.n0000644003604700454610000002441307476742024016231 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) fileselectionbox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::fileselectionbox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::fileselectionbox \- Create and manipulate a file selection box widget .SH SYNOPSIS \fBiwidgets::fileselectionbox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Fileselectionbox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "entryfield" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget class manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "scrolledlistbox" widget manual entry for details on the above associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBautomount\fR Class: \fBAutomount\fR Command-Line Switch: \fB-automount\fR .fi .IP Specifies a list of directory prefixes to ignore. Typically, this option would be used as follows: -automount {export tmp_mnt} .LP .nf Name: \fBchildSitePos\fR Class: \fBPosition\fR Command-Line Switch: \fB-childsitepos\fR .fi .IP Specifies the position of the child site in the selection box: \fBn\fR, \fBs\fR, \fBe\fR, \fBw\fR, \fBtop\fR, \fBbottom\fR, or \fBcenter\fR. The default is s. .fi .IP Specifies a Tcl command procedure which is called when an file list item is double clicked. Typically this occurs when mouse button 1 is double clicked over a file name. .LP .nf Name: \fBdirectory\fR Class: \fBDirectory\fR Command-Line Switch: \fB-directory\fR .fi .IP Specifies the initial default directory. The default is the present working directory. .LP .nf Name: \fBdirSearchCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-dirsearchcommand\fR .fi .IP Specifies a Tcl command to be executed to perform a directory search. The command will receive the current working directory and filter mask as arguments. The command should return a list of files which will be placed into the directory list. .LP .nf Name: \fBdirsLabel\fR Class: \fBText\fR Command-Line Switch: \fB-dirslabel\fR .fi .IP Specifies the text of the label for the directory list. The default is "Directories". .LP .nf Name: \fBdirsOn\fR Class: \fBDirsOn\fR Command-Line Switch: \fB-dirson\fR .fi .IP Specifies whether or not to display the directory list. The value may be given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBfileSearchCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-filesearchcommand\fR .fi .IP Specifies a Tcl command to be executed to perform a file search. The command will receive the current working directory and filter mask as arguments. The command should return a list of files which will be placed into the file list. .LP .nf Name: \fBfilesLabel\fR Class: \fBText\fR Command-Line Switch: \fB-fileslabel\fR .fi .IP Specifies the text of the label for the files list. The default is "Files". .LP .nf Name: \fBfilesOn\fR Class: \fBFilesOn\fR Command-Line Switch: \fB-fileson\fR .fi .IP Specifies whether or not to display the files list. The value may be given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBfileType\fR Class: \fBFileType\fR Command-Line Switch: \fB-filetype\fR .fi .IP Specify the type of files which may appear in the file list: \fBregular\fR, \fBdirectory\fR, or \fBany\fR. The default is regular. .LP .nf Name: \fBfilterCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-filtercommand\fR .fi .IP Specifies a Tcl command to be executed upon hitting the Return key in the filter entry widget. .LP .nf Name: \fBfilterLabel\fR Class: \fBText\fR Command-Line Switch: \fB-filterlabel\fR .fi .IP Specifies the text of the label for the filter entry field. The default is "Filter". .LP .nf Name: \fBfilterOn\fR Class: \fBFilterOn\fR Command-Line Switch: \fB-filteron\fR .fi .IP Specifies whether or not to display the filter entry. The value may be given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 360 pixels. .LP .nf Name: \fBinvalid\fR Class: \fBCommand\fR Command-Line Switch: \fB-invalid\fR .fi .IP Command to be executed should the filter contents be proven invalid. The default is {bell}. .LP .nf Name: \fBmask\fR Class: \fBMask\fR Command-Line Switch: \fB-mask\fR .fi .IP Specifies the initial file mask string. The default is "*". .LP .nf Name: \fBnoMatchString\fR Class: \fBNoMatchString\fR Command-Line Switch: \fB-nomatchstring\fR .fi .IP Specifies the string to be displayed in the files list should no files match the mask. The default is "". .LP .nf Name: \fBselectDirCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-selectdirommand\fR .fi .IP Specifies a Tcl command to be executed following selection of a directory in the directory list. .LP .nf Name: \fBselectFileCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-selectfileommand\fR .fi .IP Specifies a Tcl command to be executed following selection of a file in the files list. .LP .nf Name: \fBselectionCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-selectioncommand\fR .fi .IP Specifies a Tcl command to be executed upon hitting the Return key in the selection entry widget. .LP .nf Name: \fBselectionLabel\fR Class: \fBText\fR Command-Line Switch: \fB-selectionlabel\fR .fi .IP Specifies the text of the label for the selection entry field. The default is "Selection". .LP .nf Name: \fBselectionOn\fR Class: \fBSelectionOn\fR Command-Line Switch: \fB-selectionon\fR .fi .IP Specifies whether or not to display the selection entry. The value may be given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 470 pixels. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::fileselectionbox\fR command creates a file selection box similar to the OSF/Motif standard Xmfileselectionbox composite widget. The fileselectionbox is composed of directory and file scrolled lists as well as filter and selection entry fields. Bindings are in place such that selection of a directory list item loads the filter entry field and selection of a file list item loads the selection entry field. Options exist to control the appearance and actions of the widget. .SH "METHODS" .PP The \fBiwidgets::fileselectionbox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for fileselectionbox widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::fileselectionbox\fR command. .TP \fIpathName \fBchildsite\fR Returns the child site widget path name. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::fileselectionbox\fR command. .TP \fIpathName \fBfilter\fR Update the current contents of the file selection box based on the current filter entry field value. .TP \fIpathName \fBget\fR Returns the current value of the selection entry widget. .SH "COMPONENTS" .LP .nf Name: \fBdirs\fR Class: \fBScrolledlistbox\fR .fi .IP The dirs component is the directory list box for the file selection box. See the "scrolledlistbox" widget manual entry for details on the dirs component item. .LP .nf Name: \fBfiles\fR Class: \fBScrolledlistbox\fR .fi .IP The files component is the file list box for the file selection box. See the "scrolledlistbox" widget manual entry for details on the files component item. .LP .nf Name: \fBfilter\fR Class: \fBEntryfield\fR .fi .IP The filter component is the entry field for user input of the filter value. See the "entryfield" widget manual entry for details on the filter component item. .LP .nf Name: \fBselection\fR Class: \fBEntryfield\fR .fi .IP The selection component is the entry field for user input of the currently selected file value. See the "entryfield" widget manual entry for details on the selection component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::fileselectionbox .fsb pack .fsb -padx 10 -pady 10 -fill both -expand yes .DE .SH AUTHOR(S) Mark L. Ulferts .SH KEYWORDS fileselectionbox, widget iwidgets-4.1.1/doc/mainwindow.n0000644003604700454610000002163507476742024015052 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) mainwindow.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::mainwindow iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::mainwindow \- Create and manipulate a mainwindow widget .SH SYNOPSIS \fBiwidgets::mainwindow\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell <- iwidgets::Mainwindow .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background cursor disabledForeground font foreground highlightBackground highlightColor highlightThickness\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBballoonBackground\fR \fBballoonDelay1\fR \fBballoonDelay2\fR \fBballonFont\fR \fBballoonForeground\fR .fi .LP See the "toolbar" manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBheight\fR \fBmaster\fR \fBmodality\fR \fBpadX\fR \fBpadY\fR \fBwidth\fR .fi .LP See the "shell" manual entry for details on the above inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBhelpLine\fR Class: \fBHelpLine\fR Command-Line Switch: \fB-helpline\fR .fi .IP Specifies whether or not to display the help line. The value may be given in any of the forms acceptable to Tk_GetBoolean. The default is yes. .LP .nf Name: \fBmenuBarBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-menubarbackground\fR .fi .IP Specifies the normal background color for the menubar. .LP .nf Name: \fBmenuBarFont\fR Class: \fBFont\fR Command-Line Switch: \fB-menubarfont\fR .fi .IP Specifies the font to use when drawing text inside the menubar. .LP .nf Name: \fBmenuBarForeround\fR Class: \fBForeground\fR Command-Line Switch: \fB-menubarforeground\fR .fi .IP Specifies the normal foreground color for the menubar. .LP .nf Name: \fBstatusLine\fR Class: \fBStatusLine\fR Command-Line Switch: \fB-statusline\fR .fi .IP Specifies whether or not to display the status line. The value may be given in any of the forms acceptable to Tk_GetBoolean. The default is yes. .LP .nf Name: \fBtoolBarBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-toolbarbackground\fR .fi .IP Specifies the normal background color for the toolbar. .LP .nf Name: \fBtoolBarFont\fR Class: \fBFont\fR Command-Line Switch: \fB-toolbarfont\fR .fi .IP Specifies the font to use when drawing text inside the toolbar. .LP .nf Name: \fBtoolBarForeround\fR Class: \fBForeground\fR Command-Line Switch: \fB-toolbarforeground\fR .fi .IP Specifies the normal foreground color for the toolbar. .BE .SH DESCRIPTION .PP The \fBiwidgets::mainwindow\fR command creates a mainwindow shell which contains a menubar, toolbar, mousebar, childsite, status line, and help line. Each item may be filled and configured to suit individual needs. .SH "METHODS" .PP The \fBiwidgets::mainwindow\fR command create a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for mainwindow widgets: .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBdeactivate\fR .fi .LP See the "shell" manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::mainwindow\fR command. .TP \fIpathName \fBchildsite\fR Returns the pathname of the child site widget. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::mainwindow\fR command. .TP \fIpathName \fBmenubar\fR ?\fIargs\fR? The \fBmenubar\fR method provides access to the menubar. Invoked with no arguments it returns the pathname of the menubar. With arguments, they are evaluated against the menubar which in effect provides access to the entire API of the menubar. See the "menubar" manual entry for details on the commands available in the menubar. .TP \fIpathName \fBmousebar\fR ?\fIargs\fR? The \fBmousebar\fR method provides access to the mousebar which is a vertical toolbar. Invoked with no arguments it returns the pathname of the mousebar. With arguments, they are evaluated against the mousebar which in effect provides access to the entire API of the underlying toolbar. See the "toolbar" manual entry for details on the commands available in the mousebar. .TP \fIpathName \fBmsgd\fR ?\fIargs\fR? The \fBmsgd\fR method provides access to the messagedialog contained in the mainwindow. Invoked with no arguments it returns the pathname of the messagedialog. With arguments, they are evaluated against the messagedialog which in effect provides access to the entire API of the messagedialog. See the "messagedialog" manual entry for details on the commands available in the messagedialog. .TP \fIpathName \fBtoolbar\fR ?\fIargs\fR? The \fBtoolbar\fR method provides access to the toolbar. Invoked with no arguments it returns the pathname of the toolbar. With arguments, they are evaluated against the toolbar which in effect provides access to the entire API of the toolbar. See the "toolbar" manual entry for details on the commands available in the toolbar. .SH "COMPONENTS" .LP .nf Name: \fBhelp\fR Class: \fBLabel\fR .fi .IP The help component provides a location for displaying any help strings provided in the menubar, toolbar, or mousebar. See the "label" widget manual entry for details on the help component item. .LP .nf Name: \fBmenubar\fR Class: \fBMenubar\fR .fi .IP The menubar component is the menubar located at the top of the window. See the "menubar" widget manual entry for details on the menubar component item. .LP .nf Name: \fBmousebar\fR Class: \fBToolbar\fR .fi .IP The mousebar component is the vertical toolbar located on the right side of the window. See the "toolbar" widget manual entry for details on the mousebar component item. .LP .nf Name: \fBmsgd\fR Class: \fBMessagedialog\fR .fi .IP The msgd component is a messagedialog which may be reconfigured as needed and used repeatedly throughout the application. See the "messagedialog" widget manual entry for details on the messagedialog component item. .LP .nf Name: \fBstatus\fR Class: \fBLabel\fR .fi .IP The status component provides a location for displaying application status information. See the "label" widget manual entry for details on the status component item. .LP .nf Name: \fBtoolbar\fR Class: \fBToolbar\fR .fi .IP The toolbar component is the horizontal toolbar located on the top of the window. See the "toolbar" widget manual entry for details on the toolbar component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::mainwindow .mw # # Add a File menubutton # .mw menubar add menubutton file -text "File" -underline 0 -padx 8 -pady 2 \\ -menu {options -tearoff no command new -label "New" -underline 0 \\ -helpstr "Create a new file" command open -label "Open ..." -underline 0 \\ -helpstr "Open an existing file" command save -label "Save" -underline 0 \\ -helpstr "Save the current file" command saveas -label "Save As ..." -underline 5 \\ -helpstr "Save the file as a differnet name" command print -label "Print" -underline 0 \\ -helpstr "Print the file" separator sep1 command close -label "Close" -underline 0 \\ -helpstr "Close the file" separator sep2 command exit -label "Exit" -underline 1 \\ -helpstr "Exit this application" } # # Install a scrolledtext widget in the childsite. # iwidgets::scrolledtext [.mw childsite].st pack [.mw childsite].st -fill both -expand yes # # Activate the main window. # .mw activate .DE .SH AUTHOR Mark L. Ulferts .DE John A. Tucker .LP .SH KEYWORDS mainwindow, shell, widget iwidgets-4.1.1/doc/dialog.n0000644003604700454610000001004107476742024014122 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) dialog.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::dialog iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::dialog \- Create and manipulate a dialog widget .SH SYNOPSIS \fBiwidgets::dialog\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell <- iwidgets::Dialogshell <- iwidgets::Dialog .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBbuttonBoxPadX\fR \fBbuttonBoxPadY\fR \fBbuttonBoxPos\fR \fBpadX\fR \fBpadY\fR \fBseparator\fR \fBthickness\fR .fi .LP See the "dialogshell" manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBheight\fR \fBmaster\fR \fBmodality\fR \fBwidth\fR .fi .LP See the "shell" manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" manual entry for details on the above inherited options. .BE .SH DESCRIPTION .PP The \fBiwidgets::dialog\fR command creates a dialog box providing standard buttons and a child site for use in derived classes. The buttons include ok, apply, cancel, and help. Methods and Options exist to configure the buttons and their containing box. .SH "METHODS" .PP The \fBiwidgets::dialog\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for dialog widgets: .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBadd\fR \fBbuttonconfigure\fR \fBdefault\fR \fBhide\fR \fBindex\fR \fBinsert\fR \fBinvoke\fR \fBshow\fR .fi .LP See the "buttonbox" manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBchildsite\fR .fi .LP See the "dialogshell" manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBdeactivate\fR .fi .LP See the "shell" manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::dialog\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::dialog\fR command. .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::dialog .d -modality global .d buttonconfigure OK -command {puts OK; .d deactivate 1} .d buttonconfigure Apply -command {puts Apply} .d buttonconfigure Cancel -command {puts Cancel; .d deactivate 0} .d buttonconfigure Help -command {puts Help} listbox [.d childsite].lb -relief sunken pack [.d childsite].lb -expand yes -fill both if {[.d activate]} { puts "Exit via OK button" } else { puts "Exit via Cancel button" } .DE .SH AUTHOR Mark L. Ulferts .DE Bret A. Schuhmacher .SH KEYWORDS dialog, dialogshell, shell, widget iwidgets-4.1.1/doc/extfileselectiondialog.n0000644003604700454610000001437407340742600017414 0ustar dgp771div'\" '\" Copyright (c) 1997 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) extfileselectiondialog.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::extfileselectiondialog iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::extfileselectiondialog \- Create and manipulate a file selection dialog widget .SH SYNOPSIS \fBiwidgets::extfileselectiondialog\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell <- iwidgets::Dialogshell <- iwidgets::Dialog <- iwidgets::Extfileselectiondialog .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBpopupCursor\fR \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "combobox" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBchildSitePos\fR \fBdirectory\fR \fBdirsLabel\fR \fBdirSearchCommand\fR \fBdirsOn\fR \fBfilesLabel\fR \fBfilesLabelOn\fR \fBfileSearchCommand\fR \fBfilesOn\fR \fBfileType\fR \fBfilterLabel\fR \fBfilterOn\fR \fBinvalid\fR \fBmask\fR \fBnoMatchString\fR \fBselectionLabel\fR \fBselectionOn\fR .fi .LP See the "extfileselectionbox" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBsashCursor\fR .fi .LP See the "panedwindow" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget class manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "scrolledlistbox" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBbuttonBoxPadX\fR \fBbuttonBoxPadY\fR \fBbuttonBoxPos\fR \fBpadX\fR \fBpadY\fR \fBseparator\fR \fBthickness\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBheight\fR \fBmaster\fR \fBmodality\fR \fBwidth\fR .fi .LP See the "shell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" widget manual entry for details on the above inherited options. .BE .SH DESCRIPTION .PP The \fBiwidgets::extfileselectiondialog\fR command creates an extended file selection dialog which is slightly different than the fileselectiondialog widget. The differences are mostly cosmetic in that the listboxes are within a panedwindow and the entryfields for the filter and selection have been replaced by comboboxes. Other than that the interface is practically the same. .SH "METHODS" .PP The \fBiwidgets::extfileselectiondialog\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for extfileselectiondialog widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBget\fR \fBchildsite\fR \fBfilter\fR .fi .LP See the "fileselectionbox" class manual entry for details on the associated methods. .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBadd\fR \fBbuttonconfigure\fR \fBdefault\fR \fBhide\fR \fBinsert\fR \fBinvoke\fR \fBshow\fR .fi .LP See the "buttonbox" widget manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBdeactivate\fR .fi .LP See the "shell" widget manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::extfileselectiondialog\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::extfileselectiondialog\fR command. .SH "COMPONENTS" .LP .nf Name: \fBfsb\fR Class: \fBFileselectionbox\fR .fi .IP The fsb component is the extfileselectionbox for the extfileselectiondialog. See the "extfileselectionbox" widget manual entry for details on the fsb component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 # # Non-modal example # proc okCallback {} { puts "You selected [.nmfsd get]" .nmfsd deactivate } iwidgets::extfileselectiondialog .nmfsd -title Non-Modal .nmfsd buttonconfigure OK -command okCallback .nmfsd activate # # Modal example # iwidgets::extfileselectiondialog .mfsd -modality application .mfsd center if {[.mfsd activate]} { puts "You selected [.mfsd get]" } else { puts "You cancelled the dialog" } .DE .SH AUTHOR Mark L. Ulferts .DE Anthony L. Parent .SH KEYWORDS extfileselectiondialog, extfileselectionbox, dialog, dialogshell, shell, widget iwidgets-4.1.1/doc/scrolledhtml.n0000644003604700454610000002302207537260565015365 0ustar dgp771div'\" '\" Copyright (c) 1996 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) scrolledhtml.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::scrolledhtml iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::scrolledhtml \- Create and manipulate a scrolled text widget with the capability of displaying HTML formatted documents. .SH SYNOPSIS \fBiwidgets::scrolledhtml\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Scrolledtext <- iwidgets::Scrolledhtml .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth padX padY relief repeatDelay repeatInterval selectBackground selectBorderWidth selectForeground setGrid\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBspacing1\fR \fBspacing2\fR \fBspacing3\fR \fBstate\fR \fBtabs\fR \fBwrap\fR .fi .LP See the "text" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBheight\fR \fBhscrollMode\fR \fBsbWidth\fR \fBscrollMargin\fR \fBvisibleitems\fR \fBvscrollMode\fR \fBwidth\fR .fi .LP See the "scrolledtext" class manual entry for details on the inherited options. .LP .nf .ta 4c 8c 12c \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBfeedback\fR Class: \fBFeedBack\fR Command-Line Switch: \fB-feedback\fR .fi .IP Specifies the callback command to use to give feedback on current status. The command is executed in the form \fIcommand\fR \fI\fR .LP .nf Name: \fBfixedfont\fR Class: \fBFixedFont\fR Command-Line Switch: \fB-fixedfont\fR .fi .IP Specifies the name of the font to be used for fixed-width character text (such as
    ...
    or ....) The size, style, and other font attributes are determined by the format tags in the document. The default is courier. .LP .nf Name: \fBfontname\fR Class: \fBFontName\fR Command-Line Switch: \fB-fontname\fR .fi .IP Specifies the name of the font to be used for normal-width character spaced text. The size, style, and other font attributes are determined by the format tags in the document. The default is times. .LP .nf Name: \fBfontsize\fR Class: \fBFontSize\fR Command-Line Switch: \fB-fontsize\fR .fi .IP Specifies the general size of the fonts used. One of small, medium, large, or huge. The default is medium. .LP .nf Name: \fBforeground\fR Class: \fBForeground\fR Command-Line Switch: \fB-foreground\fR .fi .IP Specifies the color of text other than hypertext links, in any of the forms acceptable to \fBTk_GetColor\fR. This value may be overridden in a particular document by the \fItext\fR attribute of the \fBBody\fR HTML tag. .LP .nf Name: \fBlink\fR Class: \fBLink\fR Command-Line Switch: \fB-link\fR .fi .IP Specifies the default color of hypertext links in any of the forms acceptable to \fBTk_GetColor\fR. This value may be overridden in a particular document by the \fIlink\fR attribute of the \fBBody\fR HTML tag. The default is blue. .LP .nf Name: \fBlinkcommand\fR Class: \fBLinkCommand\fR Command-Line Switch: \fB-linkcommand\fR .fi .IP Specifies the command to execute when the user clicks on a hypertext link. Execution is of the form \fBlinkcommand href\fR, where \fBhref\fR is the value given in the \fIhref\fR attribute of the \fBA\fR HTML tag. .LP .nf Name: \fBalink\fR Class: \fBalink\fR Command-Line Switch: \fB-alink\fR .fi .IP Specifies the color of hypertext links when the cursor is over the link in any of the forms acceptable to \fBTk_GetColor\fR. The default is red. .LP .nf Name: \fBtextBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-textbackground\fR .fi .IP Specifies the background color for the text area in any of the forms acceptable to \fBTk_GetColor\fR. This value may be overridden in a particular document by the \fIbgcolor\fR attribute of the \fBBody\fR HTML tag. .LP .nf Name: \fBunknownimage\fR Class: \fBUnknownImage\fR Command-Line Switch: \fB-unknownimage\fR .fi .IP Specifies the name of the image file to display when an \fBimg\fR specified in the html document cannot be loaded. .LP .nf Name: \fBupdate\fR Class: \fBUpdate\fR Command-Line Switch: \fB-alink\fR .fi .IP A boolean value indicating whether to call update during html rendering. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::scrolledhtml\fR command creates a scrolled text widget with the additional capability to display html formatted documents. An import method is provided to read an html document file, and a render method is provided to display a html formatted text string. .SH "METHODS" .PP The \fBiwidgets::scrolledhtml\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for scrolledhtml widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBbbox\fR \fBcompare\fR \fBdebug\fR \fBdelete\fR \fBdlineinfo\fR \fBget\fR \fBindex\fR \fBinsert\fR \fBmark\fR \fBscan\fR \fBsearch\fR \fBsee\fR \fBtag\fR \fBwindow\fR \fBxview\fR \fByview\fR .fi .LP See the "text" manual entry for details on the standard methods. .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBexport\fR \fBclear\fR .fi .LP See the "scrolledhtml" manual entry for details on the inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledhtml\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledhtml\fR command. .TP \fIpathName\fR \fBimport\fR ?\fIoption\fR? \fIhref\fR Load html formatted text from a file. \fIHref\fR must exist. If \fIoption\fR is -link, \fIhref\fR is assumed to be relative to the application's current working directory. Otherwise, \fIhref\fR is assumed to be relative to the path of the last page loaded. \fIHref\fR is either a filename, or a reference of the form \fIfilename\fR#\fIanchorname\fR. In the latter form, fIFilename\fR and/or \fIanchorname\fR may be empty. If \fIfilename\fR is empty, the current document is assumed. If \fIanchorname\fR is empty, the top of the document is assumed. .TP \fIpathName\fR \fBpwd\fR Print the current working directory of the widget, i.e. the directory of the last page loaded. .TP \fIpathName\fR \fBrender\fR \fIhtmltext\fR ?\fIwd\fR? Display HTML formatted text \fIhtmltext\fR. \fIWd\fR gives the base path to use for all links and images in the document. \fIWd\fR defaults to the application's current working directory. .TP \fIpathName\fR \fBtitle\fR Return the title of the current page, as given in the ... field in the document. .SH "HTML COMPLIANCE" .LP This widget is compliant with HTML 3.2 with the following exceptions: .LP No features requiring a connection to an http server are supported. .LP Some image alignments aren't supported, because they are not supported by the text widget. .LP The
    attributes dealing with image alignments aren't supported. .LP Automatic table sizing is not supported very well, due to limitations of the text widget .RE .SH EXAMPLE .DS package require Iwidgets 4.0 option add *textBackground white iwidgets::scrolledhtml .sh -fontname helvetica -linkcommand "this import -link" pack .sh -padx 10 -pady 10 -fill both -expand yes .sh import ~/public_html/index.html .DE .SH BUGS .IP Cells in a table can be caused to overlap. ex:
    cell1cell2
    cell3 w/ overlap
    It hasn't been fixed because 1) it's a pain to fix, 2) it will slow tables down by a significant amount, and 3) netscape has the same bug, as of V3.01. .SH ACKNOWLEDGEMENTS Sam Shen .IP This code is based largely on his tkhtml.tcl code from tk inspect. Tkhtml is copyright 1995 Lawrence Berkeley Laboratory. .LP .SH AUTHOR Kris Raney .SH KEYWORDS scrolledhtml, html, text, widget iwidgets-4.1.1/doc/entryfield.n0000644003604700454610000002027407476742024015041 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) entryfield.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::entryfield iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::entryfield \- Create and manipulate a entry field widget .SH SYNOPSIS \fBiwidgets::entryfield\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::LabeledWidget <- iwidgets::Entryfield .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth justify relief selectBackground selectBorderWidth selectForeground textVariable width\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBshow\fR \fBstate\fR .fi .LP See the "entry" manual entry for details on the associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBchildSitePos\fR Class: \fBPosition\fR Command-Line Switch: \fB-childsitepos\fR .fi .IP Specifies the position of the child site in the entry field: \fBn\fR, \fBs\fR, \fBe\fR, or \fBw\fR. The default is e. .LP .nf Name: \fBcommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-command\fR .fi .IP Specifies a Tcl command to be executed upon detection of a Return key press event. .LP .nf Name: \fBfixed\fR Class: \fBFixed\fR Command-Line Switch: \fB-fixed\fR .fi .IP Restrict entry to the specified number of chars. A value of 0, which is the default, denotes no limit. The value is the maximum number of chars the user may type into the field, regardles of field width. For example, if the field width is set to 20 and the fixed value is 10, the user will only be able to type 10 characters into the field which is 20 characters long. .LP .nf Name: \fBfocusCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-focuscommand\fR .fi .IP Specifies a Tcl command to be executed upon reception of focus. .LP .nf Name: \fBinvalid\fR Class: \fBCommand\fR Command-Line Switch: \fB-invalid\fR .fi .IP Specifies a Tcl command to be executed upon determination of invalid input. The default is bell. .LP .nf Name: \fBtextBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-textbackground\fR .fi .IP Background color for inside textual portion of the entry field. The value may be given in any of the forms acceptable to \fBTk_GetColor\fR. .LP .nf Name: \fBtextFont\fR Class: \fBFont\fR Command-Line Switch: \fB-textfont\fR .fi .IP Name of font to use for display of text in entryfield. The value may be given in any of the forms acceptable to \fBTk_GetFont\fR. .LP .nf Name: \fBpasting\fR Class: \fBBehavior\fR Command-Line Switch: \fB-pasting\fR .fi .IP Option to enable/disable pasting into the entry component of the entryfield. Valid values are 0 (disabled) or 1 (enabled). Defaults to 1. .LP .nf Name: \fBvalidate\fR Class: \fBCommand\fR Command-Line Switch: \fB-validate\fR .fi .IP The validate option allows specification of a validation mechanism. Standard character validation such as \fBnumeric\fR, \fBalphabetic\fR, \fBinteger\fR, \fBhexidecimal\fR, \fBreal\fR, and \fBalphanumeric\fR can be handled through the use of keywords. Should more extensive validation be necessary, the value may contain the name of a command script. The script should return a boolean value. True for valid, false for invalid. If false is returned, then the procedure associated with the invalid option will be invoked. If the validation script contains any \fB%\fR characters, then the script will not be executed directly. Instead, a new script will be generated by replacing each \fB%\fR, and the character following it, with information from the entryfield. The replacement depends on the character following the \fB%\fR, as defined in the list below. .TP \fB%c\fR Replaced with the current input character. .TP \fB%P\fR Replaced with the contents of the entryfield modified to include the latest keystoke. This is equivalent to peeking at the future contents, enabling rejection prior to the update. .TP \fB%S\fR Replaced with the current contents of the entryfield prior to the latest keystroke being added. .TP \fB%W\fR Replaced with the entryfield widget pathname. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::entryfield\fR command creates an enhanced text entry widget with an optional associated label. Addtional options support validation and establishing a upper limit on the number of characters which may be entered in the field. .DE .SH "METHODS" .PP The \fBiwidgets::entryfield\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for entryfield widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBdelete\fR \fBget\fR \fBicursor\fR \fBindex\fR \fBinsert\fR \fBscan\fR \fBselection\fR \fBxview\fR .fi .LP See the "entry" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::entryfield\fR command. .TP \fIpathName \fBchildsite\fR Returns the path name of the child site. .TP \fIpathName \fBclear\fR Clear entry widget .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::entryfield\fR command. .SH "COMPONENTS" .LP .nf Name: \fBefchildsite\fR Class: \fBframe\fR .fi .IP The efchildsite component is the user child site for the entry field. See the "frame" widget manual entry for details on the efchildsite component item. .LP .nf Name: \fBentry\fR Class: \fBentry\fR .fi .IP The entry component provides the entry field for user text input and display. See the "entry" widget manual entry for details on the entry component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 option add *textBackground white proc returnCmd {} { puts stdout "Return Pressed" } proc invalidCmd {} { puts stdout "Alphabetic contents invalid" } iwidgets::entryfield .ef -command returnCmd iwidgets::entryfield .fef -labeltext "Fixed:" -fixed 10 -width 12 iwidgets::entryfield .nef -labeltext "Numeric:" -validate numeric -width 12 iwidgets::entryfield .aef -labeltext "Alphabetic:" \\ -validate alphabetic -width 12 -invalid invalidCmd iwidgets::entryfield .pef -labeltext "Password:" \\ -show \267 -width 12 -command returnCmd iwidgets::Labeledwidget::alignlabels .ef .fef .nef .aef .pef pack .ef -fill x -expand yes -padx 10 -pady 5 pack .fef -fill x -expand yes -padx 10 -pady 5 pack .nef -fill x -expand yes -padx 10 -pady 5 pack .aef -fill x -expand yes -padx 10 -pady 5 pack .pef -fill x -expand yes -padx 10 -pady 5 .DE .SH AUTHOR Sue Yockey .DE Mark L. Ulferts .LP .SH KEYWORDS entryfield, widget iwidgets-4.1.1/doc/timefield.n0000644003604700454610000001253207476742024014634 0ustar dgp771div'\" '\" Copyright (c) 1997 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) timefield.n 1.0 97/04/30 16:04:44 '\" .so man.macros .HS iwidgets::timefield iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::timefield \- Create and manipulate a time field widget .SH SYNOPSIS \fBiwidgets::timefield\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::LabeledWidget <- iwidgets::Timefield .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground justify relief\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBchildSitePos\fR Class: \fBPosition\fR Command-Line Switch: \fB-childsitepos\fR .fi .IP Specifies the position of the child site in the time field: \fBn\fR, \fBs\fR, \fBe\fR, or \fBw\fR. The default is e. .LP .nf Name: \fBcommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-command\fR .fi .IP Specifies a Tcl command to be executed upon detection of a Return key press event. .LP .nf Name: \fBgmt\fR Class: \fBGmt\fR Command-Line Switch: \fB-gmt\fR .fi .IP Determines whether the time is calculated relative to Greenwich Mean Time. Accepts a boolean value. The default is no. .fi .IP Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Specifies one of two states for the timefield: \fBnormal\fR or \fBdisabled\fR. If the timefield is disabled then input is not accepted. The default is normal. .LP .nf Name: \fBtextBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-textbackground\fR .fi .IP Background color for inside textual portion of the entry field. The value may be given in any of the forms acceptable to \fBTk_GetColor\fR. .LP .nf Name: \fBtextFont\fR Class: \fBFont\fR Command-Line Switch: \fB-textfont\fR .fi .IP Name of font to use for display of text in timefield. The value may be given in any of the forms acceptable to \fBTk_GetFont\fR. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::timefield\fR command creates an enhanced text entry widget for the purpose of time entry with various degrees of built-in intelligence. .DE .SH "METHODS" .PP The \fBiwidgets::timefield\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for timefield widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::timefield\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::timefield\fR command. .TP \fIpathName \fBget\fR ?\fBformat\fR? Returns the current contents of the timefield in a format of string or as an integer clock value using the \fB-string\fR and \fB-clicks\fR format options respectively. The default is by string. Reference the clock command for more information on obtaining times and their formats. .TP \fIpathName \fBisvalid\fR Returns a boolean indication of the validity of the currently displayed time value. For example, 12:59:59 is valid whereas 25:59:59 is invalid. .TP \fIpathName \fBshow\fR \fItime\fR Changes the currently displayed time to be that of the time argument. The time may be specified either as a string, an integer clock value or the keyword "now" (the default). Reference the clock command for more information on obtaining times and their formats. .SH "COMPONENTS" .LP .nf Name: \fBtime\fR Class: \fBEntry\fR .fi .IP The time component provides the entry field for time input and display. See the "entry" widget manual entry for details on the time component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 proc returnCmd {} { puts [.tf get] } iwidgets::timefield .tf -command returnCmd pack .tf -fill x -expand yes -padx 10 -pady 10 .DE .SH AUTHOR John A. Tucker .DE Mark L. Ulferts .LP .SH KEYWORDS timefield, widget iwidgets-4.1.1/doc/notebook.n0000644003604700454610000003277507476742024014525 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) notebook.n '\" .so man.macros .HS iwidgets::notebook iwid .BS '\" Note: do not modify the .SH NAME line immediately below! '\" '\" .SH NAME iwidgets::notebook \- create and manipulate notebook widgets .SH SYNOPSIS \fBiwidgets::notebook\fR \fIpathName\fR ?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Notebook .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBforeground\fR \fBscrollCommand\fR \fBwidth\fR \fBcursor\fR \fBheight\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBauto\fR Class: \fBAuto\fR Command-Line Switch: \fB-auto\fR .fi .IP Specifies whether to use the automatic packing/unpacking algorithm of the notebook. A value of \fBtrue\fR indicates that page frames will be unpacked and packed acoording to the algorithm described in the \fBselect\fR command. A value of \fBfalse\fR leaves the current page packed and subsequent selects, next, or previous commands do not switch pages automatically. In either case the page's associated command (see the \fBadd\fR command's description of the \fBcommand\fR option) is invoked. The value may have any of the forms accepted by the \fBTcl_GetBoolean\fR, such as true, false, 0, 1, yes, or no. .IP For example, if a series of pages in a notebook simply change certain display configurations of a graphical display, the \fB-auto\fR flag could be used. By setting it, the \fB-command\fR procs could do the appropriate reconfiguring of the page when the page is switched. .BE .SH DESCRIPTION .PP The \fBiwidgets::notebook\fR command creates a new window (given by the pathName argument) and makes it into a notebook widget. Additional options, described above may be specified on the command line or in the option database to configure aspects of the notebook such as its colors, font, and text. The \fBiwidgets::notebook\fR command returns its \fIpathName\fR argument. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist. A notebook is a widget that contains a set of pages. It displays one page from the set as the selected page. When a page is selected, the page's contents are displayed in the page area. When first created a notebook has no pages. Pages may be added or deleted using widget commands described below. .SH "NOTEBOOK PAGES" .PP A notebook's pages area contains a single child site \fBframe\fR. When a new page is created it is a child of this frame. The page's child site frame serves as a geometry container for applications to pack widgets into. It is this frame that is automatically unpacked or packed when the \fBauto\fR option is \fBtrue\fR. This creates the effect of one page being visible at a time. When a new page is selected, the previously selected page's child site frame is automatically unpacked from the notebook's child site frame and the newly selected page's child site is packed into the notebook's child site frame. However, sometimes it is desirable to handle page changes in a different manner. By specifying the \fBauto\fR option as \fBfalse\fR, child site packing can be disabled and done differently. For example, all widgets might be packed into the first page's child site frame. Then when a new page is selected, the application can reconfigure the widgets and give the appearance that the page was flipped. In both cases the \fBcommand\fR option for a page specifies a Tcl Command to execute when the page is selected. In the case of \fBauto\fR being \fBtrue\fR, it is called between the unpacking of the previously selected page and the packing of the newly selected page. .SH "WIDGET-SPECIFIC METHODS" .PP The \fBiwidgets::notebookfR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIoption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP Many of the widget commands for a notebook take as one argument an indicator of which page of the notebook to operate on. These indicators are called indexes and may be specified in any of the following forms: .TP \fInumber\fR Specifies the index of the the component. For menus, 0 corresponds to the left-most menu of the menu bar. For entries, 0 corresponds to the top-most entry of the menu. \fInumber\fR Specifies the page numerically, where 0 corresponds to the first page in the notebook, 1 to the second, and so on. .TP \fBselect\fR Specifies the currently selected page's index. If no page is currently selected, the value -1 is returned. .TP \fBend\fR Specifes the last page in the notebooks's index. If the notebook is empty this will return -1. .TP \fIpattern\fR If the index doesn't satisfy the form of a number, then this form is used. Pattern is pattern-matched against the \fBlabel\fR of each page in the notebook, in order from the first to the last page, until a matching entry is found. The rules of \fBTcl_StringMatch\fR are used. .PP '............................................................................. The following commands are possible for notebook widgets: .TP \fIpathName\fR \fBadd\fR ?\fIoption value\fR? Add a new page at the end of the notebook. A new child site frame is created. Returns the child site pathName. If additional arguments are present, they specify any of the following options: .RS .TP \fB-background\fR \fIvalue\fR Specifies a background color to use for displaying the child site frame of this page. If this option is specified as an empty string (the default), then the background option for the overall notebook is used. .TP \fB-command\fR \fIvalue\fR Specifies a Tcl command to be executed when this page is selected. This allows the programmer a hook to reconfigure this page's widgets or any other page's widgets. .IP If the notebook has the auto option set to true, when a page is selected this command will be called immediately after the previously selected page is unpacked and immediately before this page is selected. The index value select is valid during this Tcl command. `index select' will return this page's page number. .IP If the auto option is set to false, when a page is selected the unpack and pack calls are bypassed. This Tcl command is still called. .TP \fB-foreground\fR \fIvalue\fR Specifies a foreground color to use for displaying tab labels when tabs are in their normal unselected state. If this option is specified as an empty string (the default), then the foreground option for the overall notebook is used. .TP \fB-label\fR \fIvalue\fR Specifies a string to associate with this page. This label serves as an additional identifier used to reference the page. This label may be used for the index value in widget commands. .RE .TP \fIpathName\fR \fBchildSite\fR ?\fIindex\fR? If passed no arguments, returns a list of pathNames for all the pages in the notebook. If the notebook is empty, an empty list is returned .IP If index is passed, it returns the pathName for the page's child site frame specified by index. Widgets that are created with this pathName will be displayed when the associated page is selected. If index is not a valid index, an empty string is returned. .TP \fIpathName\fR \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue\fR \fIoption\fR \fIvalue\fR ...? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::notebook\fR command. .TP \fIpathName\fR \fBdelete\fR \fIindex1\fR ?i\fRndex2? Delete all of the pages between \fIindex1\fR and \fIindex2\fR inclusive. If \fIindex2\fR is omitted then it defaults to \fIindex1\fR. Returns an empty string. .TP \fIpathName\fR \fBindex\fR \fIindex\fR Returns the numerical index corresponding to \fIindex\fR. .TP \fBpathName\fR \fBinsert\fR \fIindex\fR ?\fIoption\fR \fIvalue\fR? Insert a new page in the notebook before the page specified by \fIindex\fR. A new child site \fBframe\fR is created. See the \fBadd\fR command for valid options. Returns the child site pathName. .TP \fIpathName\fR \fBnext\fR Advances the selected page to the next page (order is determined by insertion order). If the currently selected page is the last page in the notebook, the selection wraps around to the first page in the notebook. .IP For notebooks with auto set to true the current page's child site is unpacked from the notebook's child site frame. Then the next page's child site is packed into the notebooks child site frame. The Tcl command given with the command option will be invoked between these two operations. .IP For notebooks with auto set to false the Tcl command given with the command option will be invoked. .TP \fIpathName\fR \fBpagecget\fR \fIindex\fR ?\fIoption\fR? Returns the current value of the configuration option given by \fIoption\fR for the page specified by \fIindex\fR. The valid available options are the same as available to the \fBadd\fR command. .TP \fIpathName\fR \fBpageconfigure\fR \fIindex\fR ?\fIoption\fR? ?\fIvalue\fR \fIoption\fR \fIvalue\fR ...? This command is similar to the configure command, except that it applies to the options for an individual page, whereas configure applies to the options for the notebook. Options may have any of the values accepted by the add widget command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for page \fIindex\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). .TP \fIpathName\fR \fBprev\fR Moves the selected page to the previous page (order is determined by insertion order). If the currently selected page is the first page in the notebook, the selection wraps around to the last page in the notebook. .IP For notebooks with \fBauto\fR set to \fBtrue\fR the current page's child site is unpacked from the notebook's child site frame. Then the previous page's child site is packed into the notebooks child site frame. The Tcl command given with the command option will be invoked between these two operations. .IP For notebooks with \fBauto\fR set to \fBfalse\fR the Tcl command given with the command option will be invoked. .TP \fIpathName\fR \fBselect\fR \fIindex\fR Selects the page specified by \fIindex\fR as the currently selected page. .IP For notebooks with \fBauto\fR set to \fBtrue\fR the current page's child site is unpacked from the notebook's child site frame. Then the index page's child site is packed into the notebooks child site frame. The Tcl command given with the command option will be invoked between these two operations. .IP For notebooks with \fBauto\fR set to \fBfalse\fR the Tcl command given with the command option will be invoked. .TP \fIpathName\fR \fBview\fR Returns the currently selected page. This command is for compatibility with the scrollbar widget. .TP \fIpathName\fR \fBview\fR \fIindex\fR Selects the page specified by \fIindex\fR as the currently selected page. This command is for compatibility with the scrollbar widget. .TP \fIpathName\fR \fBview\fR \fImoveto\fR \fIfraction\fR Uses the fraction value to determine the corresponding page to move to. This command is for compatibility with the scrollbar widget. .TP \fIpathName\fR \fBview\fR \fIscroll\fR \fInum\fR \fIwhat\fR Uses the \fInum\fR value to determine how many pages to move forward or backward (num can be negative or positive). The \fIwhat\fR argument is ignored. This command is for compatibility with the scrollbar widget. .SH EXAMPLE .PP Following is an example that creates a notebook with two pages. In this example, we use a scrollbar widget to control the notebook widget. .nf .IP .ta 2c 8c 12c .DS package require Iwidgets 4.0 # Create the notebook widget and pack it. iwidgets::notebook .nb -width 100 -height 100 pack .nb -anchor nw \\ -fill both \\ -expand yes \\ -side left \\ -padx 10 \\ -pady 10 .IP # Add two pages to the notebook, labelled # "Page One" and "Page Two", respectively. .nb add -label "Page One" .nb add -label "Page Two" .IP # Get the child site frames of these two pages. set page1CS [.nb childsite 0] set page2CS [.nb childsite "Page Two"] .IP # Create buttons on each page of the notebook button $page1CS.b -text "Button One" pack $page1CS.b button $page2CS.b -text "Button Two" pack $page2CS.b .IP # Select the first page of the notebook .nb select 0 .IP # Create the scrollbar and associate teh scrollbar # and the notebook together, then pack the scrollbar scrollbar .scroll -command ".nb view" .nb configure -scrollcommand ".scroll set" pack .scroll -fill y -expand yes -pady 10 .DE .fi .SH AUTHOR Bill W. Scott .SH KEYWORDS notebook page iwidgets-4.1.1/doc/spintime.n0000644003604700454610000001573007340743221014513 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) spintime.n '\" .so man.macros .HS iwidgets::spintime iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::spintime \- Create and manipulate time spinner widgets .SH SYNOPSIS \fBiwidgets::spintime\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Spintime .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR \fBrelief\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "entryfield" manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR \fBlabelMargin\fR .fi .LP See the "labeledwidget" manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBarrowOrient\fR \fBrepeatDelay\fR \fBrepeatInterval\fR .fi .LP See the "spinner" manual entry for details on the above associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBlabelPos\fR Class: \fBPosition\fR Command-Line Switch: \fB-labelpos\fR .fi .IP Specifies the position of the label along the sides of the various spinners: \fBn\fR, \fBe\fR, \fBs\fR, or \fBw\fR. The default is w. .LP .nf Name: \fBhourLabel\fR Class: \fBText\fR Command-Line Switch: \fB-hourlabel\fR .fi .IP Specifies the text of the label for the hour spinner. The default is "Hour". .LP .nf Name: \fBhourOn\fR Class: \fBhourOn\fR Command-Line Switch: \fB-houron\fR .fi .IP Specifies whether or not to display the hour spinner in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBhourWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-hourwidth\fR .fi .IP Specifies the width of the hour spinner in any of the forms acceptable to \fBTcl_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBmilitaryOn\fR Class: \fBmilitaryOn\fR Command-Line Switch: \fB-militaryon\fR .fi .IP Specifies use of a 24 hour clock for hour display in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBminuteLabel\fR Class: \fBText\fR Command-Line Switch: \fB-minutelabel\fR .fi .IP Specifies the text of the label for the minute spinner. The default is "Minute". .LP .nf Name: \fBminuteOn\fR Class: \fBminuteOn\fR Command-Line Switch: \fB-minuteon\fR .fi .IP Specifies whether or not to display the minute spinner in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBminuteWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-minutewidth\fR .fi .IP Specifies the width of the minute spinner in any of the forms acceptable to \fBTcl_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBorient\fR Class: \fBOrient\fR Command-Line Switch: \fB-orient\fR .fi .IP Specifies the orientation of the hour, minute, and second spinners: \fBvertical\fR or \fBhorizontal\fR. The default is horizontal. .LP .nf Name: \fBsecondLabel\fR Class: \fBText\fR Command-Line Switch: \fB-secondlabel\fR .fi .IP Specifies the text of the label for the second spinner. The default is "Second" .LP .nf Name: \fBsecondOn\fR Class: \fBsecondOn\fR Command-Line Switch: \fB-secondon\fR .fi .IP Specifies whether or not to display the second spinner in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBsecondWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-secondwidth\fR .fi .IP Specifies the width of the second spinner in any of the forms acceptable to \fBTcl_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBtimeMargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-timemargin\fR .fi .IP Specifies the margin space between the hour, minute, and second spinners is any of the forms accpetable to \fBTcl_GetPixels\fR. The default is 1 pixel. .LP .nf .BE .SH DESCRIPTION .PP The \fBiwidgets::spintime\fR command creates a set of spinners for use in time value entry. The set includes an hour, minute, and second spinner widget. .SH "METHODS" .PP The \fBiwidgets::spintime\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for spintime widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::spintime\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::spintime\fR command. .TP \fIpathName \fBget\fR ?\fBformat\fR? Returns the current contents of the spintime widget in a format of string or as an integer clock value using the \fB-string\fR and \fB-clicks\fR format options respectively. The default is by string. Reference the clock command for more information on obtaining time and its formats. .TP \fIpathName \fBshow\fR \fItime\fR Changes the currently displayed time to be that of the time argument. The time may be specified either as a string, an integer clock value or the keyword "now". Reference the clock command for more information on obtaining times and its format. .ta 4c .SH "COMPONENTS" .LP .nf Name: \fBhour\fR Class: \fBSpinint\fR .fi .IP The hour component is the hour spinner of the time spinner. See the SpinInt widget manual entry for details on the hour component item. .LP .nf Name: \fBminute\fR Class: \fBSpinint\fR .fi .IP The minute component is the minute spinner of the time spinner. See the SpinInt widget manual entry for details on the minute component item. .LP .nf Name: \fBsecond\fR Class: \fBSpinint\fR .fi .IP The second component is the second spinner of the time spinner. See the SpinInt widget manual entry for details on the second component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::spintime .st pack .st -padx 10 -pady 10 .DE .SH AUTHOR Sue Yockey .DE Mark L. Ulferts .SH KEYWORDS spintime, spinint, spinner, entryfield, entry, widget iwidgets-4.1.1/doc/messagedialog.n0000644003604700454610000001321407476742024015474 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) messagedialog.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::messagedialog iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::messagedialog \- Create and manipulate a message dialog widget .SH SYNOPSIS \fBiwidgets::messagedialog\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell <- iwidgets::Dialogshell <- iwidgets::Dialog <- iwidgets::Messagedialog .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBbitmap\fR \fBcursor\fR \fBfont\fR \fBforeground\fR \fBimage\fR \fBtext\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBbuttonBoxPadX\fR \fBbuttonBoxPadY\fR \fBbuttonBoxPos\fR \fBpadX\fR \fBpadY\fR \fBseparator\fR \fBthickness\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBmaster\fR \fBmodality\fR .fi .LP See the "shell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" widget manual entry for details on the above inherited options. .LP .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBimagePos\fR Class: \fBPosition\fR Command-Line Switch: \fB-imagepos\fR .fi .IP Specifies the image position relative to the message text: \fBn\fR, \fBs\fR, \fBe\fR, or \fBw\fR. The default is w. .LP .nf Name: \fBtextPadX\fR Class: \fBPad\fR Command-Line Switch: \fB-textpadx\fR .fi .IP Specifies a non-negative value indicating how much extra space to request for the message text in the X direction. The value may have any of the forms acceptable to Tk_GetPixels. .LP .nf Name: \fBtextPadY\fR Class: \fBPad\fR Command-Line Switch: \fB-textpady\fR .fi .IP Specifies a non-negative value indicating how much extra space to request for the message text in the X direction. The value may have any of the forms acceptable to Tk_GetPixels. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::messagedialog\fR command creates a message dialog composite widget. The messagedialog is derived from the Dialog class and is composed of an image and associated message text with commands to manipulate the dialog buttons. .SH "METHODS" .PP The \fBiwidgets::messagedialog\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for messagedialog widgets: .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBadd\fR \fBbuttonconfigure\fR \fBdefault\fR \fBhide\fR \fBinsert\fR \fBinvoke\fR \fBshow\fR .fi .LP See the "buttonbox" widget manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBchildsite\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBdeactivate\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::messagedialog\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::messagedialog\fR command. .SH "COMPONENTS" .LP .nf Name: \fBimage\fR Class: \fBLabel\fR .fi .IP The image component is the bitmap or image of the message dialog. See the "label" widget manual entry for details on the image component item. .LP .nf Name: \fBmessage\fR Class: \fBLabel\fR .fi .IP The message component provides the textual portion of the message dialog. See the "label" widget manual entry for details on the message component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 # # Standard question message dialog used for confirmation. # iwidgets::messagedialog .md -title "Message Dialog" -text "Are you sure ?" \\ -bitmap questhead -modality global .md buttonconfigure OK -text Yes .md buttonconfigure Cancel -text No if {[.md activate]} { .md configure -text "Are you really sure ?" if {[.md activate]} { puts stdout "Yes" } else { puts stdout "No" } } else { puts stdout "No" } destroy .md # # Copyright notice with automatic deactivation. # iwidgets::messagedialog .cr -title "Copyright" -bitmap @dsc.xbm -imagepos n \\ -text "Copyright 1995 DSC Communications Corporation\\n \\ All rights reserved" .cr hide Cancel .cr activate after 10000 ".cr deactivate" .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS messagedialog, dialog, dialogshell, shell, widget iwidgets-4.1.1/doc/checkbox.n0000644003604700454610000001416407476742024014463 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) checkbox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::checkbox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::checkbox \- Create and manipulate a checkbox widget .SH SYNOPSIS \fBiwidgets::checkbox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledframe <- iwidgets::Checkbox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBborderWidth\fR \fBcursor\fR \fBdisabledForeground\fR \fBforeground\fR \fBrelief\fR \fBselectColor\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR .fi .LP See the "labeledframe" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBcommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-command\fR .fi .IP Specifies a Tcl command procedure to be evaluated following a change in the current check box selection. .LP .nf Name: \fBorient\fR Class: \fBOrient\fR Command-Line Switch: \fB-orient\fR Default Value: \fBvertical\fR .fi .IP Specifies the orientation of the checkbuttons within the checkbox. Valid values are either "horizontal" or "vertical". .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::checkbox\fR command creates a check button box widget capable of adding, inserting, deleting, selecting, and configuring checkbuttons as well as obtaining the currently selected button. .SH "METHODS" .PP The \fBiwidgets::checkbox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP Many of the widget commands for the \fBcheckbox\fR take as one argument an indicator of which checkbutton of the checkbox to operate on. These indicators are called \fIindexes\fR and allow reference and manipulation of checkbuttons. Checkbox indexes may be specified in any of the following forms: .TP 12 \fInumber\fR Specifies the checkbutton numerically, where 0 corresponds to the top checkbutton of the checkbox. .TP 12 \fBend\fR Indicates the last checkbutton of the checkbox. .TP 12 \fIpattern\fR If the index doesn't satisfy one of the above forms then this form is used. \fIPattern\fR is pattern-matched against the tag of each checkbutton in the checkbox, in order from top to bottom, until a matching entry is found. The rules of \fBTcl_StringMatch\fR are used. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBadd\fR \fItag\fR ?\fIoption value option value\fR? Adds a new checkbutton to the checkbuttond window on the bottom. The command takes additional options which are passed on to the checkbutton as construction arguments. These include the standard Tk checkbutton options. The tag is returned. .TP \fIpathName \fBbuttonconfigure\fR \fIindex\fR ?\fIoptions\fR? This command is similar to the \fBconfigure\fR command, except that it applies to the options for an individual checkbutton, whereas \fBconfigure\fRapplies to the options for the checkbox as a whole. \fIOptions\fR may have any of the values accepted by the \fBadd\fR widget command. If \fIoptions\fR are specified, options are modified as indicated in the command and the command returns an empty string. If no \fIoptions\fR are specified, returns a list describing the current options for entry \fIindex\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::checkbox\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::checkbox\fR command. .TP \fIpathName \fBdelete\fR \fIindex\fR Deletes a specified checkbutton given an \fIindex\fR. .TP \fIpathName \fBdeselect\fR \fIindex\fR Deselects a specified checkbutton given an \fIindex\fR. .TP \fIpathName \fBflash\fR \fIindex\fR Flashes a specified checkbutton given an \fIindex\fR. .TP \fIpathName \fBget\fR ?\fIindex\fR? Returns the tags of the currently selected checkbuttons or the selection status of specific checkbutton when given an index. .TP \fIpathName \fBindex\fR \fIindex\fR Returns the numerical index corresponding to index. .TP \fIpathName \fBinsert \fIindex\fR \fItag\fR ?\fIoption value option value ...\fR? Same as the \fBadd\fR command except that it inserts the new checkbutton just before the one given by \fIindex\fR, instead of appending to the end of the checkbox. The \fIoption\fR, and \fIvalue\fR arguments have the same interpretation as for the \fBadd\fR widget command. .TP \fIpathName \fBselect\fR \fIindex\fR Selects a specified checkbutton given an \fIindex\fR. .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::checkbox .cb -labeltext Styles .cb add bold -text Bold .cb add italic -text Italic .cb add underline -text Underline .cb select underline pack .cb -padx 10 -pady 10 -fill both -expand yes .DE .SH AUTHOR John A. Tucker .SH KEYWORDS checkbox, widget iwidgets-4.1.1/doc/tabnotebook.n0000644003604700454610000006566207476742024015215 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) tabnotebook.n '\" .so man.macros .HS iwidgets::tabnotebook iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::tabnotebook \- create and manipulate tabnotebook widgets .SH SYNOPSIS \fBiwidgets::tabnotebook\fR \fIpathName\fR? \fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Tabnotebook .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background disabledForeground foreground scrollCommand cursor font height width\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBangle\fR Class: \fBAngle\fR Command-Line Switch: \fB-angle\fR .fi .IP Specifes the angle of slope from the inner edge to the outer edge of the tab. An angle of 0 specifies square tabs. Valid ranges are 0 to 45 degrees inclusive. Default is 15 degrees. If \fBtabPos\fR is e or w, this option is ignored. .LP .nf Name: \fBauto\fR Class: \fBAuto\fR Command-Line Switch: \fB-auto\fR .fi .IP Specifies whether to use the automatic packing/unpacking algorithm of the notebook. A value of true indicates that page frames will be unpacked and packed acoording to the algorithm described in the select command. A value of \fBfalse\fR leaves the current page packed and subsequent \fBselects\fR, \fBnext\fR, or \fBprevious\fR commands do not switch pages automatically. In either case the page's associated command (see the \fBadd\fR command's description of the command option) is invoked. The value may have any of the forms accepted by the \fBTcl_GetBoolean\fR, such as \fBtrue\fR, \fBfalse\fR, \fB0\fR, \fB1\fR, \fByes\fR, or \fBno\fR. .LP .nf Name: \fBbackdrop\fR Class: \fBBackdrop\fR Command-Line Switch: \fB-backdrop\fR .fi .IP Specifies a background color to use when filling in the backdrop area behind the tabs. .LP .nf Name: \fBbackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-background\fR .fi .IP Specifies a background color to use for displaying a page and its associated tab. This can be thought of as the selected tab background color, since the tab associated with the selected page is the selected tab. .LP .nf Name: \fBbevelAmount\fR Class: \fBBevelAmount\fR Command-Line Switch: \fB-bevelamount\fR .fi .IP Specifes the size of tab corners. A value of 0 with \fBangle\fR set to 0 results in square tabs. A \fBbevelAmount\fR of 4, means that the tab will be drawn with angled corners that cut in 4 pixels from the edge of the tab. The default is 0. .LP .nf Name: \fBborderWidth\fR Class: \fBBorderWidth\fR Command-Line Switch: \fB-borderwidth\fR .fi .IP Specifies the width of shadowed border to place around the notebook area of the tabnotebook. The default value is 2. .LP .nf Name: \fBdisabledForeground\fR Class: \fBDisabledForeground\fR Command-Line Switch: \fB-disabledforeground\fR .fi .IP Specifies a foreground color to use for displaying a tab's label when its \fBstate\fR is disabled. .LP .nf Name: \fBequalTabs\fR Class: \fBEqualTabs\fR Command-Line Switch: \fB-equaltabs\fR .fi .IP Specifies whether to force tabs to be equal sized or not. A value of \fBtrue\fR means constrain tabs to be equal sized. A value of \fBfalse\fR allows each tab to size based on the text label size. The value may have any of the forms accepted by the \fBTcl_GetBoolean\fR, such as \fBtrue\fR, \fBfalse\fR, \fB0\fR, \fB1\fR, \fByes\fR, or \fBno\fR. .IP For horizontally positioned tabs (\fBtabpos\fR is either \fBs\fR or \fBn\fR), \fBtrue\fR forces all tabs to be equal width (the width being equal to the longest label plus any \fBpadX\fR specified). Horizontal tabs are always equal in height. .IP For vertically positioned tabs (\fBtabpos\fR is either \fBw\fR or \fBe\fR), \fBtrue\fR forces all tabs to be equal height (the height being equal to the height of the label with the largest font). Vertically oriented tabs are always equal in width. .LP .nf Name: \fBforeground\fR Class: \fBForeground\fR Command-Line Switch: \fB-foreground\fR .fi .IP Specifies a foreground color to use for displaying a page and its associated tab label. This can be thought of as the selected tab background color, since the tab associated with the selected page is the selected tab. .LP .nf Name: \fBgap\fR Class: \fBGap\fR Command-Line Switch: \fB-gap\fR .fi .IP Specifies the amount of pixel space to place between each tab. Value may be any pixel offset value. In addition, a special keyword \fBoverlap\fR can be used as the value to achieve a standard overlap of tabs. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBmargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-Bmargin\fR .fi .IP Specifies the amount of space to place between the outside edge of the tabnotebook and the outside edge of its tabs. If \fBtabPos\fR is \fBs\fR, this is the amount of space between the bottom edge of the tabnotebook and the bottom edge of the set of tabs. If \fBtabPos\fR is \fBn\fR, this is the amount of space between the top edge of the tabnotebook and the top edge of the set of tabs. If \fBtabPos\fR is \fBe\fR, this is the amount of space between the right edge of the tabnotebook and the right edge of the set of tabs. If \fBtabPos\fR is \fBw\fR, this is the amount of space between the left edge of the tabnotebook and the left edge of the set of tabs. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBpadX\fR Class: \fBPadX\fR Command-Line Switch: \fB-padx\fR .fi .IP Specifies a non-negative value indicating how much extra space to request for a tab around its label in the X-direction. When computing how large a window it needs, the tab will add this amount to the width it would normally need The tab will end up with extra internal space to the left and right of its text label. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBpadY\fR Class: \fBPadY\fR Command-Line Switch: \fB-pady\fR .fi .IP Specifies a non-negative value indicating how much extra space to request for a tab around its label in the Y-direction. When computing how large a window it needs, the tab will add this amount to the height it would normally need The tab will end up with extra internal space to the top and bottom of its text label. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBraiseSelect\fR Class: \fBRaiseSelect\fR Command-Line Switch: \fB-raiseselect\fR .fi .IP Specifes whether to slightly raise the selected tab from the rest of the tabs. The selected tab is drawn 2 pixels closer to the outside of the tabnotebook than the unselected tabs. A value of \fBtrue\fR says to raise selected tabs, a value of \fBfalse\fR turns this feature off. The default is \fBfalse\fR. The value may have any of the forms accepted by the \fBTcl_GetBoolean\fR, such as \fBtrue\fR, \fBfalse\fR, \fB0\fR, \fB1\fR, \fByes\fR, or \fBno\fR. .LP .nf Name: \fBstart\fR Class: \fBStart\fR Command-Line Switch: \fB-start\fR .fi .IP Specifies the amount of space to place between the left or top edge of the tabnotebook and the starting edge of its tabs. For horizontally positioned tabs, this is the amount of space between the left edge of the notebook and the left edge of the first tab. For vertically positioned tabs, this is the amount of space between the top of the notebook and the top of the first tab. This value may change if the user performs a MButton-2 scroll on the tabs. This value may have any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Sets the active state of the tabnotebook. Specifying \fBnormal\fR allows all pages to be selectable. Specifying \fBdisabled\fR disables the notebook causing all page tabs to be drawn in the \fBdisabledForeground\fR color. .LP .nf Name: \fBtabBackground\fR Class: \fBTabBackground\fR Command-Line Switch: \fB-tabbackground\fR .fi .IP Specifies a background color to use for displaying tab backgrounds when they are in their unselected state. This is the background associated with tabs on all pages other than the selected page. .LP .nf Name: \fBtabBorders\fR Class: \fBTabBorders\fR Command-Line Switch: \fB-tabborders\fR .fi .IP Specifies whether to draw the borders of tabs that are not selected. Specifying \fBtrue\fR (the default) draws these borders, specifying \fBfalse\fR draws only the border around the selected tab. The value may have any of the forms accepted by the \fBTcl_GetBoolean\fR, such as \fBtrue\fR, \fBfalse\fR, \fB0\fR, \fB1\fR,\fB yes\fR, or \fBno\fR. .LP .nf Name: \fBtabForeground\fR Class: \fBTabForeground\fR Command-Line Switch: \fB-tabforeground\fR .fi .IP Specifies a foreground color to use for displaying tab labels when they are in their unselected state. This is the foreground associated with tabs on all pages other than the selected page. .LP .nf Name: \fBtabPos\fR Class: \fBTabPos\fR Command-Line Switch: \fB-tabpos\fR .fi .IP Specifies the location of the set of tabs in relation to the notebook area. Must be n, s, e, or w. Defaults to s. .BE .SH DESCRIPTION .PP The \fBiwidgets::tabnotebook\fR command creates a new window (given by the pathName argument) and makes it into a \fBtabnotebook\fR widget. Additional options, described above may be specified on the command line or in the option database to configure aspects of the tabnotebook such as its colors, font, and text. The iwidgets::tabnotebook command returns its pathName argument. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist. .PP A \fBtabnotebook\fR is a widget that contains a set of tabbed pages. It displays one page from the set as the selected page. A Tab displays the label for the page to which it is attached and serves as a page selector. When a page's tab is selected, the page's contents are displayed in the page area. The selected tab has a three-dimensional effect to make it appear to float above the other tabs. The tabs are displayed as a group along either the left, top, right, or bottom edge. When first created a tabnotebook has no pages. Pages may be added or deleted using widget commands described below. .PP A special option may be provided to the tabnotebook. The \fB-auto\fR option specifies whether the tabnotebook will automatically handle the unpacking and packing of pages when pages are selected. A value of true signifies that the notebook will automatically manage it. This is the default value. A value of false signifies the notebook will not perform automatic switching of pages. .SH NOTEBOOK PAGES A tabnotebook's pages area contains a single child site frame. When a new page is created it is a child of this frame. The page's child site frame serves as a geometry container for applications to pack widgets into. It is this frame that is automatically unpacked or packed when the auto option is true. This creates the effect of one page being visible at a time. When a new page is selected, the previously selected page's child site frame is automatically unpacked from the tabnotebook's child site frame and the newly selected page's child site is packed into the tabnotebook's child site frame. .PP However, sometimes it is desirable to handle page changes in a different manner. By specifying the \fBauto\fR option as \fBfalse\fR, child site packing can be disabled and done differently. For example, all widgets might be packed into the first page's child site \fBframe\fR. Then when a new page is selected, the application can reconfigure the widgets and give the appearance that the page was flipped. .PP In both cases the command option for a page specifies a Tcl Command to execute when the page is selected. In the case of \fBauto\fR being \fBtrue\fR, it is between the unpacking of the previously selected page and the packing of the newly selected page. .PP Notebook pages can also be controlled with scroll bars or other widgets that obey the \fBscrollcommand\fR protocol. By giving a scrollbar a \fB-command\fR to call the tabnotebook's \fBselect\fR method, the tabnotebook can be controlled with a scrollbar. .PP The notebook area is implemented with the notebook mega widget. .SH TABS Tabs appear along the edge of the notebook area. Tabs are drawn to appear attached to their associated page. When a tab is clicked on, the associated page is selected and the tab is drawn as raised above all other tabs and as a seamless part of its notebook page. Tabs can be controlled in their location along the edges, the angle tab sides are drawn with, gap between tabs, starting margin of tabs, internal padding around text labels in a tab, the font, and its label. .PP The Tab area is implemented with the \fBtabset\fR mega widget. See \fBtabset(1)\fR. Tabs may be oriented along either the north, south, east, or west sides with the \fBtabPos\fR option. North and south tabs may appear as angled, square, or bevelled. West and east tabs may appear as square or bevelled. By changing tab gaps, tab angles, bevelling, orientations, colors, fonts, start locations, and margins; tabs may appear in a wide variety of styles. For example, it is possible to implement Microsoft-style tabs, Borland property tab styles, or Borland Delphi style tabs all with the same tabnotebook. .SH "WIDGET-SPECIFIC METHODS" .PP The \fBiwidgets::tabnotebook\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIoption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP Many of the widget commands for a notebook take as one argument an indicator of which page of the notebook to operate on. These indicators are called indexes and may be specified in any of the following forms: .TP \fInumber\fR Specifies the page numerically, where 0 corresponds to the first page in the notebook, 1 to the second, and so on. .TP \fBselect\fR Specifies the currently selected page's index. If no page is currently selected, the value -1 is returned. .TP \fBend\fR Specifes the last page in the tabnotebook's index. If the notebook is empty this will return -1. .TP \fIpattern\fR If the index doesn't satisfy any of the above forms, then this form is used. Pattern is pattern-matched against the label of each page in the notebook, in order from the first to the last page, until a matching entry is found. The rules of Tcl_StringMatch are used. '............................................................................. The following commands are possible for tabnotebook widgets: .TP \fIpathName\fR \fBadd\fR ?\fIoption\fR \fIvalue\fR \fIoption\fR \fIvalue\fR ...? Add a new page at the end of the tabnotebook. A new child site frame is created. Returns the child site pathName. If additional arguments are present, they specify any of the following options: .RS .TP \fB-angle\fR \fIvalue\fR Specifes the angle of slope from the inner edge to the outer edge of the tab. An angle of 0 specifies square tabs. Valid ranges are 0 to 45 degrees inclusive. Default is 15 degrees. If this option is specified as an empty string (the default), then the angle option for the overall tabnotebook is used. This is generally only set at the tabnotebook level. Tabs normally will want to share the same angle value. .TP \fB-background\fR \fIvalue\fR Specifies a background color to use for displaying tabs when they are selected and for displaying the current page. If this option is specified as an empty string (the default), then the background option for the overall tabnotebook is used. .TP \fB-bevelamount\fR \fIvalue\fR Specifes the size of tab corners. A value of 0 with angle set to 0 results in square tabs. A bevelAmount of 4, means that the tab will be drawn with angled corners that cut in 4 pixels from the edge of the tab. The default is 0. This is generally only set at the tabnotebook level. Tabs normally will want to share the same bevelAmount. .TP \fB-bitmap\fR \fIvalue\fR If label is a non-empty string, specifies a bitmap to display in this page's tab. Bitmap may be of any of the forms accepted by Tk_GetPixmap. .TP \fB-command\fR \fIvalue\fR Specifies a Tcl command to be executed when this page is selected. This allows the programmer a hook to reconfigure this page's widgets or any other page's widgets. .IP If the tabnotebook has the auto option set to true, when a page is selected this command will be called immediately after the previously selected page is unpacked and immediately before this page is selected. The index value select is valid during this Tcl command. `index select' will return this page's page number. .IP If the auto option is set to false, when a page is selected the unpack and pack calls are bypassed. This Tcl command is still called. .TP \fB-disabledforeground\fR \fIvalue\fR Specifies a foreground color to use for displaying tab labels when tabs are in their disable state. If this option is specified as an empty string (the default), then the disabledforeground option for the overall tabnotebook is used. .TP \fB-font\fR \fIvalue\fR Specifies the font to use when drawing a text label on a page tab. If this option is specified as an empty string then the font option for the overall tabnotebook is used.. .TP \fB-foreground\fR \fIvalue\fR Specifies a foreground color to use for displaying tab labels when they are selected. If this option is specified as an empty string (the default), then the foreground option for the overall tabnotebook is used. .TP \fB-label\fR \fIvalue\fR Specifies a string to display as an identifying label for a notebook page. This label serves as an additional identifier used to reference the page. This label may be used for the index value in widget commands. .TP \fB-tabbackground\fR \fIvalue\fR Specifies a background color to use for displaying a tab when it is not elected. If this option is specified as an empty string (the default), then the tabBackground option for the overall tabnotebook is used. .TP \fB-tabforeground\fR \fIvalue\fR Specifies a foreground color to use for displaying the tab's text label when it is not selected. If this option is specified as an empty string (the default), then the tabForeground option for the overall tabnotebook is used. .TP \fB-padx\fR \fIvalue\fR Specifies a non-negative value indicating how much extra space to request for a tab around its label in the X-direction. When computing how large a window it needs, the tab will add this amount to the width it would normally need The tab will end up with extra internal space to the left and right of its text label. This value may have any of the forms acceptable to Tk_GetPixels. If this option is specified as an empty string (the default), then the padX option for the overall tabnotebook is used .TP \fB-pady\fR \fIvalue\fR Specifies a non-negative value indicating how much extra space to request for a tab around its label in the Y-direction. When computing how large a window it needs, the tab will add this amount to the height it would normally need The tab will end up with extra internal space to the top and bottom of its text label. This value may have any of the forms acceptable to Tk_GetPixels. If this option is specified as an empty string (the default), then the padY option for the overall tabnotebook is used .TP \fB-state\fR \fIvalue\fR Specifies one of two states for the page: normal or disabled. In normal state unselected tabs are displayed using the tabforeground and tabbackground option from the tabnotebook or the page. Selected tabs and pages are displayed using the foreground and background option from the tabnotebook or the page. The disabled state means that the page and its tab is insensitive: it doesn't respond to mouse button presses or releases. In this state the entry is displayed according to its disabledForeground option for the tabnotebook and the background/tabbackground option from the page or the tabnotebook. .RE .TP '>>>>>>>>>> \fIpathName\fR \fBchildSite\fR ?\fIindex\fR? If passed no arguments, returns a list of pathNames for all the pages in the tabnotebook. If the tab notebook is empty, an empty list is returned .IP If \fIindex\fR is passed, it returns the \fIpathName\fR for the page's child site \fBframe\fR specified by \fIindex\fR. Widgets that are created with this \fIpathName\fR will be displayed when the associated page is selected. If \fIindex\fR is not a valid index, an empty string is returned. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue\fR \fIoption\fR \fIvalue\fR ...? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the iwidgets::tabnotebook command. .TP \fIpathName\fR \fBdelete\fR \fIindex1\fR ?\fIindex2\fR? Delete all of the pages between \fIindex1\fR and \fIindex2\fR inclusive. If \fIindex2\fR is omitted then it defaults to \fIindex1\fR. Returns an empty string. .TP \fIpathName\fR \fBindex\fR \fIindex\fR Returns the numerical index corresponding to \fIindex\fR. .TP \fIpathName\fR \fBinsert\fR \fIindex\fR ?\fIoption\fR \fIvalue\fR \fIoption\fR \fIvalue\fR ...? Insert a new page in the tabnotebook before the page specified by \fIindex\fR. A new child site \fBframe\fR is created. The additional arguments are the same as for the \fBadd\fR command. Returns the child site \fIpathName\fR. .TP \fIpathName\fR \fBnext\fR Advances the selected page to the next page (order is determined by insertion order). If the currently selected page is the last page in the notebook, the selection wraps around to the first page in the notebook. It behaves as if the user selected the new page. .IP For notebooks with \fBauto\fR set to \fBtrue\fR the current page's child site is unpacked from the notebook's child site frame. Then the next page's child site is packed into the notebook's child site frame. The Tcl command given with the command option will be invoked between these two operations. .IP For notebooks with \fBauto\fR set to \fBfalse\fR the Tcl command given with the command option will be invoked. .TP \fIpathName\fR \fBpageconfigure\fR \fIindex\fR ?\fIoption\fR? ?\fIvalue\fR \fIoption\fR \fIvalue\fR ...? This command is similar to the \fBconfigure\fR command, except that it applies to the options for an individual page, whereas configure applies to the options for the tabnotebook as a whole. \fIOptions\fR may have any of the values accepted by the add widget command. If options are specified, options are modified as indicated in the command and the command returns an empty string. If no options are specified, returns a list describing the current options for page index (see \fBTk_ConfigureInfo\fR for information on the format of this list). .TP \fIpathName\fR \fBprev\fR Moves the selected page to the previous page (order is determined by insertion order). If the currently selected page is the first page in the notebook, the selection wraps around to the last page in the notebook. It behaves as if the user selected the new page. .IP For notebooks with \fBauto\fR set to \fBtrue\fR the current page's child site is unpacked from the notebook's child site \fBframe\fR. Then the previous page's child site is packed into the notebook's child site frame. The Tcl command given with the command option will be invoked between these two operations. .IP For notebooks with \fBauto\fR set to \fBfalse\fR the Tcl command given with the command option will be invoked. .TP \fIpathName\fR \fBselect\fR \fIindex\fR Selects the page specified by \fIindex\fR as the currently selected page. It behaves as if the user selected the new page. .IP For notebooks with \fBauto\fR set to \fBtrue\fR the current page's child site is unpacked from the notebook's child site frame. Then the \fIindex\fR page's child site is packed into the notebook's child site frame. The Tcl command given with the command option will be invoked between these two operations. .IP For notebooks with \fBauto\fR set to \fBfalse\fR the Tcl command given with the command option will be invoked. .TP \fIpathName\fR \fBview\fR Returns the currently selected page. This command is for compatibility with the \fBscrollbar\fR widget. .TP \fIpathName\fR \fBview\fR \fIindex\fR Selects the page specified by \fIindex\fR as the currently selected page. This command is for compatibility with the \fBscrollbar\fR widget. .TP \fIpathName\fR \fBview\fR \fBmoveto\fR \fIfraction\fR Uses the \fIfraction\fR value to determine the corresponding page to move to. This command is for compatibility with the \fBscrollbar\fR widget. .TP \fIpathName\fR \fBview\fR \fBscroll\fR \fInum\fR \fIwhat\fR Uses the \fInum\fR value to determine how many pages to move forward or backward (\fInum\fR can be negative or positive). The \fIwhat\fR argument is ignored. This command is for compatibility with the \fBscrollbar\fR widget. .SH "COMPONENTS" .LP Generally all behavior of the internal components, \fBtabset\fR and \fBnotebook\fR are controlled via the \fBpageconfigure\fR method. The following section documents these two components. .LP .nf Name: \fBtabset\fR Class: \fBTabset\fR .fi .IP This is the tabset component. It implements the tabs that are associated with the notebook component. .IP See the "\fBTabset\fR" widget manual entry for details on the \fBtabset\fR component item. .LP .nf Name: \fBnotebook\fR Class: \fBNotebook\fR .fi .IP This is the notebook component. It implements the notebook that contains the pages of the tabnotebook. .IP See the "\fBNotebook\fR" widget manual entry for details on the \fBnotebook\fR component item. .fi .SH EXAMPLE .PP Following is an example that creates a tabnotebook with two pages. .PP .nf .IP .ta 2c 8c 12c package require Iwidgets 4.0 # Create the tabnotebook widget and pack it. iwidgets::tabnotebook .tn -width 100 -height 100 pack .tn \\ -anchor nw \\ -fill both \\ -expand yes \\ -side left \\ -padx 10 \\ -pady 10 .IP # Add two pages to the tabnotebook, # labelled "Page One" and "Page Two" .tn add -label "Page One" .tn add -label "Page Two" .IP # Get the child site frames of these two pages. set page1CS [.tn childsite 0] set page2CS [.tn childsite "Page Two"] .IP # Create buttons on each page of the tabnotebook. button $page1CS.b -text "Button One" pack $page1CS.b button $page2CS.b -text "Button Two" pack $page2CS.b .IP # Select the first page of the tabnotebook. .tn select 0 .fi .SH AUTHOR Bill W. Scott .SH KEYWORDS tab tabset notebook tabnotebook page iwidgets-4.1.1/doc/tk2html.perl0000644003604700454610000002244606557146036014771 0ustar dgp771div#!/usr/local/bin/perl # Lightly modified man2html to make html equivs of tk/tcl man pages # probably a dead end soln since works on output after troff processing # Set the man path array to the paths to search... @manpath = ('/usr/share/man','/usr/gnu/man','/usr/local/man'); #@manpath = ('/s/usr/hops/src/ftp/tcl/tk3.4/docs'); # There has to be a blank line after this... #print "Content-type:text/html\n\n"; if (!$ARGV[0]) { print "\n"; chop($os = `uname`); chop($ver = `uname -r`); print " $os $ver Manual Pages

    $os $ver Manual Pages

    Enter the name of the man page, optionally surrounded by parenthesis with the number. For example:

    • stat to find one or more man pages for ls
    • stat(2) for the system call stat
    This converter is still in development. I intend to improve the handling of multiple matches, and add a interface to apropos (or man -k (or whatis...))

    Brooks Cutter "; exit(0); } $_ = $ARGV[0]; $manpages[0] = $_; if ((/^-$/)) { $manpages[0] = $_; } elsif ((m!^/!)) { $manpages[0] = $_; #} elsif (($name, $sect) = /(\S+)\((\d.*)\)/) { # @manpages = &findman($name, $sect, @manpath); #} elsif (($name, $sect) = /(\S+)<(\d.*)>/) { # @manpages = &findman($name, $sect, @manpath); #} elsif (($name, $sect) = /(\S+)\[(\d.*)\]/) { # @manpages = &findman($name, $sect, @manpath); #} else { # @manpages = &findman($_, '', @manpath); } if (!scalar @manpages) { print "Sorry, I was unable to find a match for $_\n"; exit(0); } elsif (scalar @manpages > 1) { &which_manpage(@manpages); } else { if (!-e $manpages[0]) { die "man2html: Error, Can't locate file '$manpages[0]'\n"; } chop($type=`file -L $manpages[0]`); if ($type =~ /roff/i) { $manpages[0] = "nroff -man $manpages[0]|col -b|"; } elsif ($type =~ /text/i) { # #$manpages[0] = $manpages[0]; # ; # NOP (No Operation) $manpages[0] = "nroff -man $manpages[0]| col -b|"; } else { print " Man2HTML: An Error has occurred

    Man2HTML: An Error has occurred

    man2html found the following match for your query: $manpages[0]

    When 'file -L $manpages[0]' was run (which should follow symbolic links) it returned the following value '$type'

    "; if ($type =~ /link/i) { print " This problem appears to be that there is a symbolic link for a man page that is pointing to a file that doesn't exist.

    "; } print " Please report this problem to someone who can do something about it. (Assuming you aren't that person...) If you don't know who that is, try emailing 'root' or 'postmaster'.

    There was only one match for your query - and it can't currently be accessed. "; exit(0); #die "Unknown type '$type' for manpage '$manpages[0]'"; } &print_manpage($manpages[0]); } exit(0); sub findman { # Take a argument like 'ls' or 'vi(1)' or 'tip(1c)' and return # a list of one or more manpages. # Arguments 2- are the directories to search in local($lookfor) = shift(@_); local($section) = shift(@_); local($file, @files, @return, $return); local(%men,%man); die "lookfor($lookfor) is null\n" unless($lookfor); for (@_) { # I'm... too lazy... for... opendir()... too lazy for readdir()... # too lazy for closedir() ... I'm too lazy! if (!$section) { @files = `/bin/ls $_/*/$lookfor.* 2> /dev/null`; } else { # if the section is like '1b' then just search *1b # otherwise if '1' search *1* (to catch all sub-sections) # Reason for wildcards: ($_/*$section*/$lookfor.*) # (given $section = '2') # 1st: So it catches cat2 and man2 # 2nd: So it catches man2 and man2v # (This should make it compatiable with HP/UX's man2.Z - not tested) # 3rd: So it catches stat.2 and stat.2v # if (length($section) == 1) { @files = `/bin/ls $_/*$section*/$lookfor.* 2> /dev/null`; } else { local($section_num) = substr($section, 0, 1); # Just the number... @files = `/bin/ls $_/*$section_num*/$lookfor.* $_/*$section/$lookfor.* 2> /dev/null`; } } next if (!scalar @files); # This part checks the files that were found... for $file (@files) { chop($file); local(@dirs) = split(/\//,$file); local($fn) = pop(@dirs); local($catman) = pop(@dirs); local($dir) = join('/',@dirs); local($key) = "$dir/$fn"; next if ($man{$key}); # forces unique if (!$men{$key}) { $men{$key} = $catman; $man{$key} = $file; } else { # pre-formatted man pages always take precedence unless zero bytes... next if (($men{$key} =~ /^cat/i) && (!(-z $man{$key}))); $men{$key} = $catman; $man{$key} = $file; } } } return(values %man); } sub which_manpage { # Print a list of manpages... print " There were multiple matches for the argument '$ARGV[0]'. Below are the fully qualified pathnames of the matches, please click on the appropriate one.

      "; for (@_) { print "
    • $_\n"; } print "
    \n"; return; } sub print_manpage { local($page) = @_; local($label, $before, $after, $begtag, $endtag, $blanks, $begtag2, $endtag2); local($pre); local($standard_indent) = 0; if ($page eq '-') { open(MAN, '-'); } elsif (index($page,'|') == length($page)) { # A Pipe local($eval) = 'open(MAN, "'.$page.'") || die "Can'."'t open pipe to '$page' for reading: ".'$!";'; eval($eval); die "Eval error line $. : '$eval' returned '$@' : $!\n"; } else { open(MAN, $page) || die "Can't open '$page' for reading: $!"; } while () { s/\|\|*[ ]*$//; # Delete trailing change bars if (/^\s*$/) { $blanks++; #if ($pre) { print "\n"; $pre = 0; } if (($. != 1) && ($blanks == 1)) { if (($pre) || ($section_pre)) { print "\n"; } else { print "

    \n"; } } next; } #next if (!/^[A-Z]{2,}\(.*\).*/); if (//) { s/.//g; } # Escape & < and > s/&/\&/g; s//\>/g; # if (/^(\w+.*)\s*$/) { $label = $1; $next_action = ''; if (/^[A-Z ]{2,}\s*$/) { if (($pre) || ($section_pre)) { print "\n"; } $pre = $section_pre = $section_fmt = 0; if (!$standard_indent) { $next_action = 'check_indent'; } } if ($label eq 'NAME') { $begtag = ''; $endtag = ''; $begtag2 = '

    '; $endtag2 = '

    '; $next_action = 'check_indent'; next; } if ($label eq 'SYNOPSIS') { $section_fmt = 1; } if ($label eq 'SEE ALSO') { $next_action = 'create_links'; } if (($label =~ /OPTIONS$/) || ($label eq 'FILES')) { $section_pre = 1; print "\n"; # print "\n"; } elsif (/^[A-Z ]+\s*$/) { print "\n" if (($pre) || ($section_pre)); $section_pre = 0; } print "..$label..\n"; if (/^[-A-Z ]+\s*$/) { print "

    $label

    \n"; $blanks = 0; print "
    \n" if ($section_pre);
            next;
          }
          next;
        }
        if ($section_fmt) { print; $blanks = 0; next; }
        if ($next_action eq 'create_links') {
          # Parse see also looking for man page links.  Make it
          # call this program.  use '+' notation for spaces
          local($page);
          local($first) = 1;
          for $page (split(/,/)) {
            $page =~ tr/\x00-\x20//d; # Delete all control chars, spaces
            if ($page =~ /.+\(\d.*\).*$/) {
              $url_page = $page;
              $url_page =~ tr/()/[]/;
              print "," if (!$first);
              $first = 0;
              print "$page\n";
            } else {
              print "," if (!$first);
              $first = 0;
              print "$page";
            }
          }
          next;
        }
        # This is to detect preformatted blocks.  I look at the first
        # line after header 'DESCRIPTION' and count the leading white
        # space as the "standard indent".  If I encounter a line with
        # a indent greater than the value of standard_indent then
        # surround it with 
     and 
    if ($next_action eq 'check_indent') { if (/^(\s+)\S+.*/) { $standard_indent = length($1); $next_action = ''; } } # $before = length($_); $saved = $_; s/^[ ][ ]*//; # Delete leading whitespace $after = length($_); s/[ ][ ]*$//; # Delete trailing whitespace if ($begtag) { chop; print "$begtag$_$endtag\n"; print "$begtag2$_$endtag2\n" if ($begtag2); $blanks = 0; $begtag2 = $endtag2 = $begtag = $endtag = ''; next; } if ((!$section_fmt) && (!$section_pre) && ($standard_indent)) { if (($blanks == 1) && (!$pre) && ($after + $standard_indent) < $before) { $pre = 1; print "
    \n";
          } elsif (($pre) && ($after + $standard_indent) >= $before) {
            $pre = 0;
            print "
    \n"; } } if (($section_pre) || ($pre)) { print "$saved"; $blanks = 0; next; } # Handle word cont- # inuations if ($prefix) { print $prefix; $prefix = ''; } if (/^(.+)\s+(\w+)\-\s*$/) { $prefix = $2; print "$1\n"; $blanks = 0; next; } print; $blanks = 0; } close(MAN); } # EOF iwidgets-4.1.1/doc/tk2html0000644003604700454610000000300106557146035014011 0ustar dgp771div#!/bin/sh # filter to convert Tk and Tcl man pages to html equivalents # does not do any linking !!!! TOP=`pwd` if [ $# -eq 0 ] ; then echo "Usage $0 filename" exit fi cat $1 | sed -e 's/\\-/-/g' \ -e 's/\\[0&]/ /g' \ -e 's/&/\&/g' \ -e 's//\>/g' \ -e 's/\\|//g' \ -e 's/\\e/\\/g' | /usr/bin/nawk -f ${TOP}/tk2html.awk | sed -e 's^\\fB\([^\\]*\)\\fR^\1^g' \ -e 's^\\fI\(.[^\\]*\)\\fR^\1^g' \ -e 's^\\fB^^g' \ -e 's^\\fI^^g' \ -e 's^\\f[RP]^^g' \ -e 's/^.[LP]P/

    /' \ -e 's/^.br/
    /' \ -e 's/^\.DS.*/

    /' \
            -e 's$^\.DE.*$
    $' \ -e 's/^\.nf *//' \ -e 's$^\.fi *$
    $' \ -e 's$^\.BE *$

    $' \ -e 's/^\.RS.*/
      /' \ -e 's$^\.RE.*$
    $' \ -e 's^\.SH *"*\([^"]*\)"*^

    \1

    ^' \ -e 's/^\.[a-zA-Z]*.*//' \ -e 's/^`\\\".*//' | /usr/bin/nawk -f ${TOP}/tk2html2.awk # The above handling for font mapping to html works correctly in about 95% of # the cases, the others turn out stacking the font setting so you get the # font bleeding since it isn't being turned # off in the correct places. # To correct we would have to record the current ( non-default) font and # explicitly turn it off when another font change is detected. # Which would make multiple styles impossible concurrently which seems to # be the case anyway.... iwidgets-4.1.1/doc/dialogshell.n0000644003604700454610000001366007476742024015164 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) dialogshell.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::dialogshell iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::dialogshell \- Create and manipulate a dialog shell widget .SH SYNOPSIS \fBiwidgets::dialogshell\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell <- iwidgets::Dialogshell .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBheight\fR \fBmaster\fR \fBmodality\fR \fBwidth\fR .fi .LP See the "shell" manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" manual entry for details on the above inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBbuttonBoxPadX\fR Class: \fBPad\fR Command-Line Switch: \fB-buttonboxpadx\fR .fi .IP Specifies a non-negative padding distance to leave between the button group and the outer edge of the button box in the x direction. The value may be given in any of the forms accpetable to \fBTk_GetPixels\fR. The default is 5 pixels. .LP .nf Name: \fBbuttonBoxPadY\fR Class: \fBPad\fR Command-Line Switch: \fB-buttonboxpady\fR .fi .IP Specifies a non-negative padding distance to leave between the button group and the outer edge of the button box in the y direction. The value may be given in any of the forms accpetable to \fBTk_GetPixels\fR. The default is 5 pixels. .LP .nf Name: \fBbuttonBoxPos\fR Class: \fBPosition\fR Command-Line Switch: \fB-buttonboxpos\fR .fi .IP Attaches buttons to the given side of the dialog: \fBn\fR, \fBs\fR, \fBe\fR or \fBw\fR. The default is s. .LP .nf Name: \fBpadX\fR Class: \fBPad\fR Command-Line Switch: \fB-padx\fR .fi .IP Specifies a padding distance for the childsite in the X-direction in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10. .LP .nf Name: \fBpadY\fR Class: \fBPad\fR Command-Line Switch: \fB-pady\fR .fi .IP Specifies a padding distance for the childsite in the Y-direction in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10. .LP .nf Name: \fBseparator\fR Class: \fBSeparator\fR Command-Line Switch: \fB-separator\fR .fi .IP Specifies whether a line is drawn to separate the buttons from the dialog box contents in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBthickness\fR Class: \fBThickness\fR Command-Line Switch: \fB-thickness\fR .fi .IP Specifies the thickness of the separator in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 3 pixels. .BE .SH DESCRIPTION .PP The \fBiwidgets::dialogshell\fR command creates a dialog shell which is a top level widget composed of a button box, separator, and child site area. The class also has methods to control button construction. .SH "METHODS" .PP The \fBiwidgets::dialogshell\fR command create a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for dialogshell widgets: .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBdeactivate\fR .fi .LP See the "shell" manual entry for details on the above inherited methods. .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBadd\fR \fBbuttonconfigure\fR \fBdefault\fR \fBdelete\fR \fBhide\fR \fBindex\fR \fBinsert\fR \fBinvoke\fR \fBshow\fR .fi .LP See the "buttonbox" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::dialogshell\fR command. .TP \fIpathName \fBchildsite\fR Returns the pathname of the child site widget. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::dialogshell\fR command. .SH "COMPONENTS" .LP .nf Name: \fBdschildsite\fR Class: \fBframe\fR .fi .IP The dschildsite component is the user child site for the dialog shell. See the "frame" widget manual entry for details on the dschildsite component item. .LP .nf Name: \fBseparator\fR Class: \fBframe\fR .fi .IP The separator component devides the area between the user child site and the button box. See the "frame" widget manual entry for details on the separator component item. .LP .nf Name: \fBbbox\fR Class: \fBButtonBox\fR .fi .IP The bbox component is the button box containing the buttons for the dialog shell. See the "ButtonBox" widget manual entry for details on the bbox component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::dialogshell .ds -modality none .ds add OK -text "OK" .ds add Cancel -text "Cancel" .ds default OK .ds activate .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS dialogshell, dialog, shell, widget iwidgets-4.1.1/doc/tk2html.awk0000644003604700454610000001650706557146035014611 0ustar dgp771div#!/bin/nawk $0 ~ /'[\/\\]" */ || $1 == "'" { next } # eat [nt]roff comments # defining macros - eat them /^\.de.*/ { getline while ( $0 !~ "^\.\.$" ) { getline } getline } $1 == ".VS" || $1 == ".VE" || $1 == ".AS" { next } # handle first .SH as special case - .SH NAME /^.SH *NAME */ { getline while ( $0 ~ /\.[a-zA-Z].*/ ) # eat dot-cmd following title { getline } print "" $0 "" print "

    " $0 "

    \n" next #-e 's/^.SH *NAME */{N;s#.*\n\(.*\)#

    \1

    #;}' \ } # Convert .IP Paragraphs upto next .cmd to hanging indents # using
      pairs without intervening
    • /^\.IP */ { if ( inIP > 0 ) { print "" } inIP = 1 print "
        " match($0, /".*"/ ) if ( RSTART > 0 ) { arg = substr( $0, RSTART+1, RLENGTH-2) print arg "
        " } else if ( length( $2 ) > 0 ) { print $2 "
        " } next } $0 ~ /^\.[a-zA-Z]*/ && inIP > 0 { inIP = 0 print "
      " } # Convert # .TP # Line1 # line 2 - n # .Any # # to #
      #
      Line1 #
      lines 2 - n #
      /^\.TP */ { if ( inTP > 0 ) { print "
      " } inTP = 1 print "
      " next } inTP == 1 && $1 !~ /\.[a-zA-Z]*/ { print "
      " $0 inTP = 2 next } inTP == 2 && $1 !~ /\.[a-zA-Z]*/{ print "" # Belt and suspenders print "
      " $0 inTP = 3 next } $0 ~ /^\.[a-zA-Z]*/ && inTP > 0 { inTP = 0 print "
      " } $1 == ".AP" { $1="" print "
      " print "
      " $2 "\t\t" $3 "\t\t("$4")" inTP = 2 next } # make a blank line $1 == ".sp" { print "
      " next # print "
      " } $1 == ".ta" { next } # try and make links ( tk ) # "See the .* manual entry" /"options"/ { if ( $0 ~ /^See the .*/ ) sub("\"options\"", " \"options\" ") } /"entry"/ { if ( $0 ~ /^See the .*/ ) sub("\"entry\"", " \"entry\" ") } /"button"/ { if ( $0 ~ /^See the .*/ ) sub("\"button\"", " \"button\" ") } /"scrollbar"/ { if ( $0 ~ /^See the .*/ ) sub("\"scrollbar\"", " \"scrollbar\" ") } /"listbox"/ { if ( $0 ~ /^See the .*/ ) sub("\"listbox\"", " \"listbox\" ") } /"canvas"/ { if ( $0 ~ /^See the .*/ ) sub("\"canvas\"", " \"canvas\" ") } /"text"/ { if ( $0 ~ /^See the .*/ ) sub("\"text\"", " \"text\" ") } /"license.terms"/ { if ( $0 ~ /^See the .*/ ) sub("\"license\".terms", " license.\"terms\" ") } /"buttonbox"/ { if ( $0 ~ /^See the .*/ ) sub("\"buttonbox\"", " \"buttonbox\" ") } /"combobox"/ { if ( $0 ~ /^See the .*/ ) sub("\"combobox\"", " \"combobox\" ") } /"dialog"/ { if ( $0 ~ /^See the .*/ ) sub("\"dialog\"", " \"dialog\" ") } /"dialogshell"/ { if ( $0 ~ /^See the .*/ ) sub("\"dialogshell\"", " \"dialogshell\" ") } /"entryfield"/ { if ( $0 ~ /^See the .*/ ) sub("\"entryfield\"", " \"entryfield\" ") } /"fileselectionbox"/ { if ( $0 ~ /^See the .*/ ) sub("\"fileselectionbox\"", " \"fileselectionbox\" ") } /"fileselectiondialog"/ { if ( $0 ~ /^See the .*/ ) sub("\"fileselectiondialog\"", " \"fileselectiondialog\" ") } /"labeledwidget"/ { if ( $0 ~ /^See the .*/ ) sub("\"labeledwidget\"", " \"labeledwidget\" ") } /"messagedialog"/ { if ( $0 ~ /^See the .*/ ) sub("\"messagedialog\"", " \"messagedialog\" ") } /"optionmenu"/ { if ( $0 ~ /^See the .*/ ) sub("\"optionmenu\"", " \"optionmenu\" ") } /"panedwindow"/ { if ( $0 ~ /^See the .*/ ) sub("\"panedwindow\"", " \"panedwindow\" ") } /"promptdialog"/ { if ( $0 ~ /^See the .*/ ) sub("\"promptdialog\"", " \"promptdialog\" ") } /"pushbutton"/ { if ( $0 ~ /^See the .*/ ) sub("\"pushbutton\"", " \"pushbutton\" ") } /"scrolledcanvas"/ { if ( $0 ~ /^See the .*/ ) sub("\"scrolledcanvas\"", " \"scrolledcanvas\" ") } /"scrolledframe"/ { if ( $0 ~ /^See the .*/ ) sub("\"scrolledframe\"", " \"scrolledframe\" ") } /"scrolledlistbox"/ { if ( $0 ~ /^See the .*/ ) sub("\"scrolledlistbox\"", " \"scrolledlistbox\" ") } /"scrolledtext"/ { if ( $0 ~ /^See the .*/ ) sub("\"scrolledtext\"", " \"scrolledtext\" ") } /"selectionbox"/ { if ( $0 ~ /^See the .*/ ) sub("\"selectionbox\"", " \"selectionbox\" ") } /"selectiondialog"/ { if ( $0 ~ /^See the .*/ ) sub("\"selectiondialog\"", " \"selectiondialog\" ") } /"spindate"/ { if ( $0 ~ /^See the .*/ ) sub("\"spindate\"", " \"spindate\" ") } /"spinint"/ { if ( $0 ~ /^See the .*/ ) sub("\"spinint\"", " \"spinint\" ") } /"spinner"/ { if ( $0 ~ /^See the .*/ ) sub("\"spinner\"", " \"spinner\" ") } /"spintime"/ { if ( $0 ~ /^See the .*/ ) sub("\"spintime\"", " \"spintime\" ") } /^Name: */ { print $1 " " $2 next } /^Class: */ { print $1 " " $2 next } /^Bret A. Schuhmacher*/ { print "" $0 "" next } /^John S. Sigler*/ { print "" $0 "" next } /^Mark L. Ulferts*/ { print "" $0 "" next } /^Alfredo Jahn*/ { print "" $0 "" next } /^Sue Yockey*/ { print "" $0 "" next } # just pass everything else on { print $0 } iwidgets-4.1.1/doc/generateHtml.sh0000644003604700454610000000022406564065554015464 0ustar dgp771div#!/bin/ksh # manpages=`\ls *.n` for doc in $manpages do echo "Generating html/$doc.html" nroff -man $doc | rman -f html > html/$doc.html done iwidgets-4.1.1/doc/selectiondialog.n0000644003604700454610000001267307476742024016045 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) selectiondialog.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::selectiondialog iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::selectiondialog \- Create and manipulate a selection dialog widget .SH SYNOPSIS \fBiwidgets::selectiondialog\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell <- iwidgets::Dialogshell <- iwidgets::Dialog <- iwidgets::Selectiondialog .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "entryfield" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget class manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "scrolledlistbox" widget class manual entry for details on the above associated options. \fBchildsitepos\fR \fBitemsCommand\fR \fBitemsLabel\fR \fBitemsOn\fR \fBselectionCommand\fR \fBselectionLabel\fR \fBselectionOn\fR .fi .LP See the "selectionbox" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBbuttonBoxPadX\fR \fBbuttonBoxPadY\fR \fBbuttonBoxPos\fR \fBpadX\fR \fBpadY\fR \fBseparator\fR \fBthickness\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBheight\fR \fBmaster\fR \fBmodality\fR \fBwidth\fR .fi .LP See the "shell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" widget manual entry for details on the above inherited options. .BE .SH DESCRIPTION .PP The \fBiwidgets::selectiondialog\fR command creates a selection box similar to the OSF/Motif standard selection dialog composite widget. The selectiondialog is derived from the Dialog class and is composed of a selectionbox with commands to manipulate the dialog buttons. .SH "METHODS" .PP The \fBiwidgets::selectiondialog\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for selectiondialog widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBchildsite\fR \fBclear\fR \fBget\fR \fBinsert\fR \fBselectitem\fR .fi .LP See the "selectionbox" widget manual entry for details on the above associated methods. .LP .nf .ta 4c 8c 12c \fBcurselection\fR \fBdelete\fR \fBindex\fR \fBnearest\fR \fBscan\fR \fBselection\fR \fBsize\fR .fi .LP See the "listbox" widget manual entry for details on the above associated methods. .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBadd\fR \fBbuttonconfigure\fR \fBdefault\fR \fBhide\fR \fBinvoke\fR \fBshow\fR .fi .LP See the "buttonbox" widget manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBdeactivate\fR .fi .LP See the "shell" widget manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::selectiondialog\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::selectiondialog\fR command. .SH "COMPONENTS" .LP .nf Name: \fBselectionbox\fR Class: \fBSelectionbox\fR .fi .IP The selectionbox component is the selection box for the selection dialog. See the "selectionbox" widget manual entry for details on the selectionbox component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::selectiondialog .sd .sd activate .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS selectiondialog, selectionbox, dialog, dialogshell, shell, widget iwidgets-4.1.1/doc/dateentry.n0000644003604700454610000001236307476742024014673 0ustar dgp771div'\" '\" Copyright (c) 1997 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) dateentry.n 1.0 97/04/30 16:04:44 '\" .so man.macros .HS iwidgets::dateentry iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::dateentry \- Create and manipulate a dateentry widget .SH SYNOPSIS \fBiwidgets::dateentry\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::LabeledWidget <- iwidgets::Datefield <- iwidgets::Dateentry .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground justify relief\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBint\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on these inherited options. .LP .nf .ta 4c 8c 12c \fBcommand\fR \fBiq\fR \fBstate\fR \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "datefield" class manual entry for details on these inherited options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackwardImage\fR \fBbuttonForeground\fR \fBcommand\fR \fBcurrentDateFont\fR \fBdateFont\fR \fBdayFont\fR \fBdays\fR \fBforwardImage\fR \fBoutline\fR \fBselectColor\fR \fBselectThickness\fR \fBstartDay\fR \fBtitleFont\fR \fBweekdayBackground\fR \fBweekendBackground\fR .fi .LP See the "calendar" manual entry for details on the associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBgrab\fR Class: \fBGrab\fR Command-Line Switch: \fB-grab\fR .fi .IP Specifies the grab level, \fBlocal\fR or \fBglobal\fR, to be obtained before bringing up the popup calendar. The default is global. For more information concerning grab levels, consult the documentation for Tk's \fBgrab\fR command. .LP .nf Name: \fBicon\fR Class: \fBIcon\fR Command-Line Switch: \fB-icon\fR .fi .IP Specifies the calendar icon image to be used in the dateentry. This image must have been created previously with the \fBimage create\fR command. Should one not be provided, then one will be generated, pixmap if possible, bitmap otherwise. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::dateentry\fR command creates a quicken style date entry field with a popup calendar by combining the datefield and calendar widgets together. This allows a user to enter the date via the keyboard or by using the mouse and selecting the calendar icon which brings up a popup calendar. .DE .SH "METHODS" .PP The \fBiwidgets::dateentry\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for dateentry widgets: .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBget\fR \fBisvalid\fR \fBshow\fR .fi .LP See the "datefield" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::dateentry\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::dateentry\fR command. .SH "COMPONENTS" .LP .nf Name: \fBlabel\fR Class: \fBLabel\fR .fi .IP The label component provides a label component to used to identify the date. See the "label" widget manual entry for details on the label component item. .LP .nf Name: \fBiconbutton\fR Class: \fBLabel\fR .fi .IP The iconbutton component provides a labelbutton component to act as a lightweight button displaying the calendar icon. Upon pressing the labelbutton, the calendar appears. See the "label" widget manual entry for details on the labelbutton component item. .LP .nf Name: \fBdate\fR Class: \fBEntry\fR .fi .IP The date component provides the entry field for date input and display. See the "entry" widget manual entry for details on the date component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::dateentry .de pack .de .DE .SH AUTHOR Mark L. Ulferts .LP .SH KEYWORDS dateentry, widget iwidgets-4.1.1/doc/spinint.n0000644003604700454610000001216207476742024014355 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) spinint.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::spinint iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::spinint \- Create and manipulate a integer spinner widget .SH SYNOPSIS \fBiwidgets::spinint\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Spinner <- iwidgets::Spinint .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth justify relief selectBackground selectBorderWidth selectForeground textVariable\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBshow\fR \fBstate\fR .fi .LP See the "entry" manual entry for details on the associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBcommand\fR \fBchildSitePos\fR \fBfixed\fR \fBfocusCommand\fR \fBinvalid\fR \fBtextBackground\fR \fBtextFont\fR \fBvalidate\fR \fBwidth\fR .fi .LP See the "entryfield" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBarroworient\fR \fBdecrement\fR \fBincrement\fR \fBrepeatDelay\fR \fBrepeatInterval\fR .fi .LP See the "spinner" widget manual entry for details on the above inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBrange\fR Class: \fBRange\fR Command-Line Switch: \fB-range\fR .fi .IP Specifies a two element list of minimum and maximum integer values. The default is no range, {{} {}}. .LP .nf Name: \fBstep\fR Class: \fBStep\fR Command-Line Switch: \fB-step\fR .fi .IP Specifies the increment/decrement value. The default is 1. .LP .nf Name: \fBwrap\fR Class: \fBWrap\fR Command-Line Switch: \fB-wrap\fR .fi .IP Specifies whether to wrap the spinner value upon reaching the minimum or maximum value in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::spinint\fR command creates a spinint widget. The spinint allows "spinning" of integer values within a specified range with wrap support. The spinner arrows may be drawn horizontally or vertically. .DE .SH "METHODS" .PP The \fBiwidgets::spinint\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for spinint widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBdelete\fR \fBget\fR \fBicursor\fR \fBindex\fR \fBinsert\fR \fBpeek\fR \fBscan\fR \fBselection\fR \fBxview\fR .fi .LP See the "entry" manual entry for details on the associated methods. .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBchildsite\fR \fBclear\fR .fi .LP See the "entryfield" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::spinint\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::spinint\fR command. .TP \fIpathName \fBdown\fR Decrement the spinner value by the value given in the step option. .TP \fIpathName \fBup\fR Increment the spinner value by the value given in the step option. .SH "COMPONENTS" .IP See the "Spinner" widget manual entry for details on the integer spinner component items. .SH EXAMPLE .DS package require Iwidgets 4.0 option add *textBackground white iwidgets::spinint .si -labeltext "Temperature" -labelpos w \\ -fixed yes -width 5 -range {32 212} pack .si -pady 10 .DE .SH AUTHOR Sue Yockey .SH KEYWORDS spinint, widget iwidgets-4.1.1/doc/spindate.n0000644003604700454610000001624307340743176014503 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) spindate.n '\" .so man.macros .HS iwidgets::spindate iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::spindate \- Create and manipulate time spinner widgets .SH SYNOPSIS \fBiwidgets::spindate\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Spindate .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR \fBrelief\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "entryfield" manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR \fBlabelMargin\fR .fi .LP See the "labeledwidget" manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBarrowOrient\fR \fBrepeatDelay\fR \fBrepeatInterval\fR .fi .LP See the "spinner" manual entry for details on the above associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBdateMargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-datemargin\fR .fi .IP Specifies the margin space between the month, day, and year spinners is any of the forms accpetable to \fBTcl_GetPixels\fR. The default is 1 pixel. .LP .nf Name: \fBdayLabel\fR Class: \fBText\fR Command-Line Switch: \fB-daylabel\fR .fi .IP Specifies the text of the label for the day spinner. The default is "Day". .LP .nf Name: \fBdayOn\fR Class: \fBdayOn\fR Command-Line Switch: \fB-dayon\fR .fi .IP Specifies whether or not to display the day spinner in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBdayWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-daywidth\fR .fi .IP Specifies the width of the day spinner in any of the forms acceptable to \fBTcl_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBlabelPos\fR Class: \fBPosition\fR Command-Line Switch: \fB-labelpos\fR .fi .IP Specifies the position of the label along the sides of the various spinners: \fBn\fR, \fBe\fR, \fBs\fR, or \fBw\fR. The default is w. .LP .nf Name: \fBmonthFormat\fR Class: \fBMonthFormat\fR Command-Line Switch: \fB-monthformat\fR .fi .IP Specifies the format of month display, \fBinteger\fR (1-12) or \fBbrief\fR strings (Jan - Dec), or \fBfull\fR strings (January - December). .LP .nf Name: \fBmonthLabel\fR Class: \fBText\fR Command-Line Switch: \fB-monthlabel\fR .fi .IP Specifies the text of the label for the month spinner. The default is "Month". .LP .nf Name: \fBmonthOn\fR Class: \fBmonthOn\fR Command-Line Switch: \fB-monthon\fR .fi .IP Specifies whether or not to display the month spinner in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBmonthWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-monthwidth\fR .fi .IP Specifies the width of the month spinner in any of the forms acceptable to \fBTcl_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBorient\fR Class: \fBOrient\fR Command-Line Switch: \fB-orient\fR .fi .IP Specifies the orientation of the month, day, and year spinners: \fBvertical\fR or \fBhorizontal\fR. The default is horizontal. .LP .nf Name: \fByearDigits\fR Class: \fBYearDigits\fR Command-Line Switch: \fB-yeardigits\fR .fi .IP Specifies the number of digits to be displayed as the value for the year spinner. The valid values are 2 and 4. The default is 2. .LP .nf Name: \fByearLabel\fR Class: \fBText\fR Command-Line Switch: \fB-yearlabel\fR .fi .IP Specifies the text of the label for the year spinner. The default is "Year" .LP .nf Name: \fByearOn\fR Class: \fByearOn\fR Command-Line Switch: \fB-yearon\fR .fi .IP Specifies whether or not to display the year spinner in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fByearWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-yearwidth\fR .fi .IP Specifies the width of the year spinner in any of the forms acceptable to \fBTcl_GetPixels\fR. The default is 3 pixels. .LP .nf .BE .SH DESCRIPTION .PP The \fBiwidgets::spindate\fR command creates a set of spinners for use in date value entry. The set includes an month, day, and year spinner widget. .SH "METHODS" .PP The \fBiwidgets::spindate\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for spindate widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::spindate\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::spindate\fR command. .TP \fIpathName \fBget\fR ?\fBformat\fR? Returns the current contents of the spindate widget in a format of string or as an integer clock value using the \fB-string\fR and \fB-clicks\fR format options respectively. The default is by string. Reference the clock command for more information on obtaining dates and their formats. .TP \fIpathName \fBshow\fR \fIdate\fR Changes the currently displayed date to be that of the date argument. The date may be specified either as a string, an integer clock value or the keyword "now". Reference the clock command for more information on obtaining dates and their formats. .ta 4c .SH "COMPONENTS" .LP .nf Name: \fBmonth\fR Class: \fBSpinner\fR .fi .IP The month spinner component is the month spinner of the date spinner. See the Spinner widget manual entry for details on the month component item. .LP .nf Name: \fBday\fR Class: \fBSpinint\fR .fi .IP The day spinner component is the day spinner of the date spinner. See the SpinInt widget manual entry for details on the day component item. .LP .nf Name: \fByear\fR Class: \fBSpinint\fR .fi .IP The year spinner component is the year spinner of the date spinner. See the SpinInt widget manual entry for details on the year component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::spindate .sd pack .sd -padx 10 -pady 10 .DE .SH AUTHOR Sue Yockey .DE Mark L. Ulferts .SH KEYWORDS spindate, spinint, spinner, entryfield, entry, widget iwidgets-4.1.1/doc/scrolledtext.n0000644003604700454610000002133307537260565015410 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) scrolledtext.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::scrolledtext iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::scrolledtext \- Create and manipulate a scrolled text widget .SH SYNOPSIS \fBiwidgets::scrolledtext\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Scrolledwidget <- iwidgets::Scrolledtext .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBactiveBackground\fR \fBbackground\fR \fBborderWidth\fR \fBcursor\fR \fBexportSelection\fR \fBforeground\fR \fBhighlightColor\fR \fBhighlightThickness\fR \fBinsertBackground\fR \fBinsertBorderWidth\fR \fBinsertOffTime\fR \fBinsertOnTime\fR \fBinsertWidth\fR \fBpadX\fR \fBpadY\fR \fBrelief\fR \fBselectBackground\fR \fBselectBorderWidth\fR \fBselectForeground\fR \fBsetGrid\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBspacing1\fR \fBspacing2\fR \fBspacing3\fR \fBstate\fR \fBtabs\fR \fBwrap\fR .fi .LP See the "text" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the scrolled text as an entire unit. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. Any additional space needed to display the other components such as labels, margins, and scrollbars force the text to be compressed. A value of zero along with the same value for the width causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default height is zero. .LP .nf Name: \fBhscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-hscrollmode\fR .fi .IP Specifies the the display mode to be used for the horizontal scrollbar: \fBstatic, dynamic,\fR or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBsbWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-sbwidth\fR .fi .IP Specifies the width of the scrollbar in any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBscrollMargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-scrollmargin\fR .fi .IP Specifies the distance between the text area and scrollbar in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBtextBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-textbackground\fR .fi .IP Specifies the background color for the text area in any of the forms acceptable to \fBTk_GetColor\fR. .LP .nf Name: \fBtextFont\fR Class: \fBFont\fR Command-Line Switch: \fB-textfont\fR .fi .IP Specifies the font to be used in the scrolled text area. .LP .nf Name: \fBvisibleitems\fR Class: \fBVisibleItems\fR Command-Line Switch: \fB-visibleitems\fR .fi .IP Specifies the widthxheight in characters and lines for the text. This option is only administered if the width and height options are both set to zero, otherwise they take precedence. The default value is 80x24. With the visibleitems option engaged, geometry constraints are maintained only on the text. The size of the other components such as labels, margins, and scroll bars, are additive and independent, effecting the overall size of the scrolled text. In contrast, should the width and height options have non zero values, they are applied to the scrolled text as a whole. The text is compressed or expanded to maintain the geometry constraints. .LP .nf Name: \fBvscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-vscrollmode\fR .fi .IP Specifies the the display mode to be used for the vertical scrollbar: \fBstatic, dynamic,\fR or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the scrolled text as an entire unit. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. Any additional space needed to display the other components such as labels, margins, and scrollbars force the text to be compressed. A value of zero along with the same value for the height causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default width is zero. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::scrolledtext\fR command creates a scrolled text widget with additional options to manage the scrollbars. This includes options to control the method in which the scrollbars are displayed, i.e. statically or dynamically. Options also exist for adding a label to the scrolled text area and controlling its position. Import/export of methods are provided for file I/O. .SH "METHODS" .PP The \fBiwidgets::scrolledtext\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for scrolledtext widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBbbox\fR \fBcompare\fR \fBdebug\fR \fBdelete\fR \fBdlineinfo\fR \fBget\fR \fBimage\fR \fBindex\fR \fBinsert\fR \fBmark\fR \fBscan\fR \fBsearch\fR \fBsee\fR \fBtag\fR \fBwindow\fR \fBxview\fR \fByview\fR .fi .LP See the "text" manual entry for details on the standard methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledtext\fR command. .TP \fIpathName \fBchildsite\fR Returns the child site widget path name. .TP \fIpathName \fBclear\fR Clear the text area of all characters. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledtext\fR command. .TP \fIpathName \fBimport\fR \fIfilename\fR ?\fIindex\fR? Load the text from a file into the text area at the \fIindex\fR. The \fIfilename\fR must exist. .TP \fIpathName \fBexport\fR \fIfilename\fR Write text to a file. If \fIfilename\fR exists then contents are replaced with text widget contents. .SH "COMPONENTS" .LP .nf Name: \fBtext\fR Class: \fBText\fR .fi .IP The text component is the text widget. See the "text" widget manual entry for details on the text component item. .LP .nf Name: \fBhorizsb\fR Class: \fBScrollbar\fR .fi .IP The horizsb component is the horizontal scroll bar. See the "scrollbar" widget manual entry for details on the horizsb component item. .LP .nf Name: \fBvertsb\fR Class: \fBScrollbar\fR .fi .IP The vertsb component is the vertical scroll bar. See the "scrollbar" widget manual entry for details on the vertsb component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 option add *textBackground white iwidgets::scrolledtext .st -hscrollmode dynamic -labeltext "Password File" pack .st -padx 10 -pady 10 -fill both -expand yes .st import /etc/passwd .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS scrolledtext, text, widget iwidgets-4.1.1/doc/scopedobject.n0000644003604700454610000000623207476742024015336 0ustar dgp771div'\" '\" Copyright (c) 1997 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) scopedobject.n 1.21 97/1/30 16:04:44 '\" .so man.macros .HS scopedobject iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME scopedobject \- Create and manipulate a scoped \[incr Tcl\] class object. .SH SYNOPSIS \fBscopedobject\fI \fIobjName \fR?\fIoptions\fR? .SH "INHERITANCE" None .SH "STANDARD OPTIONS" .LP .nf Name: \fBenterscopecommand:\fR Command-Line Switch: \fB-enterscopecommand\fR .fi .IP Specifies a Tcl command to invoke when an object enters scope (i.e. when it is created..). The default is {}. .LP .nf Name: \fBenterscopecommand:\fR Command-Line Switch: \fB-enterscopecommand\fR .fi .IP Specifies a Tcl command to invoke when an object exits scope (i.e. when it is deleted..). The default is {}. .LP .BE .SH DESCRIPTION .PP The \fBscopedobject\fR command creates a base class for defining Itcl classes which posses scoped behavior like Tcl variables. The objects are only accessible within the procedure in which they are instantiated and are deleted when the procedure returns. This class was designed to be a general purpose base class for supporting scoped incr Tcl classes. The options include the execute a Tcl script command when an object enters and exits its scope. .SH "METHODS" .PP The \fBscopedobject\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the object. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for scopedobject objects: .SH "OBJECT-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBscopedobject\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the object. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR. If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given objects option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBscopedobject\fR command. .SH EXAMPLE .IP The scopedobject was primarily meant to be a base class. The following is an example of usage without inheritance: .LP .DS proc scopedobject_demo {} { iwidgets::scopedobject #auto \ -exitscopecommand {puts "enter scopedobject_demo"} \ -exitscopecommand {puts "exit scopedobject_demo"} } scopedobject_demo .DE .SH AUTHOR John A. Tucker .SH KEYWORDS scopedobject, object iwidgets-4.1.1/doc/optionmenu.n0000644003604700454610000002045307476742024015070 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) optionmenu.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::optionmenu iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::optionmenu \- Create and manipulate a option menu widget .SH SYNOPSIS \fBiwidgets::optionmenu\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Optionmenu .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground activeBorderWidth activeForeground background borderWidth cursor disabledForeground font foreground highlightColor highlightThickness relief\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "LabeledWidget" manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBclickTime\fR Class: \fBClickTime\fR Command-Line Switch: \fB-clicktime\fR .fi .IP Interval time, in msec, used to determine that a single mouse click has occurred. Used to post menu on a "quick" mouse click. \fBNote\fR: changing this value may cause the sigle-click functionality to not work properly. The default is 150 msec. .LP .nf Name: \fBcommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-command\fR .fi .IP Specifies a Tcl command procedure to be evaluated following a change in the current option menu selection. .LP .nf Name: \fBcyclicOn\fR Class: \fBCyclicOn\fR Command-Line Switch: \fB-cyclicon\fR .fi .IP Turns on/off the 3rd mouse button capability. The value may be specified in any of the forms acceptable to \fBTcl_GetBoolean\fR. This feature allows the right mouse button to cycle through the popup menu list without poping it up. The right mouse button cycles through the menu in reverse order. The default is true. .LP .nf Name: \fBpopupCursor\fR Class: \fBCursor\fR Command-Line Switch: \fB-popupcursor\fR .fi .IP Specifies the mouse cursor to be used for the popup menu. The value may have any of the forms acceptable to \fBTk_GetCursor\fR. .LP .nf Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Specified one of two states for the optionmenu: \fBnormal\fR, or \fBdisabled\fR. If the optionmenu is disabled, then option menu selection is ignored. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies a fixed size for the menu button label in any of the forms acceptable to \Tk_GetPixels\fR. If the text is too small to fit in the label, the text is clipped. Note: Normally, when a new list is created, or new items are added to an existing list, the menu button label is resized automatically. Setting this option overrides that functionality. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::optionmenu\fR command creates an option menu widget with options to manage it. An option menu displays a frame containing a label and a button. A pop-up menu will allow for the value of the button to change. .SH "METHODS" .PP The \fBiwidgets::optionmenu\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP Many of the widget commands for an optionmenu take as one argument an indicator of which entry of the option menu to operate on. These indicators are called \fIindex\fRes and may be specified in any of the following forms: .TP 12 \fInumber\fR Specifies the entry numerically, where 0 corresponds to the top-most entry of the option menu, 1 to the entry below it, and so on. .TP 12 \fBend\fR Indicates the bottommost entry in the menu. If there are no entries in the menu then -1 is returned. .TP 12 \fBselect\fR Returns the numerical index of the currently selected option menu entry. If no entries exist in the menu, then -1 is returned. .TP 12 \fIpattern\fR If the index doesn't satisfy one of the above forms then this form is used. \fIPattern\fR is pattern-matched against the label of each entry in the option menu, in order from the top down, until a matching entry is found. The rules of \fBTcl_StringMatch\fR are used. .PP The following widget commands are possible for optionmenu widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::optionmenu\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::optionmenu\fR command. .TP \fIpathName \fBdelete \fIfirst\fR ?\fIlast\fR? Delete all of the option menu entries between \fIfirst\fR and \fIlast\fR inclusive. If \fIlast\fR is omitted then it defaults to \fIfirst\fR. .TP \fIpathName \fBdisable \fIindex\fR Disable the option menu entry specified by \fIindex\fR. Disabling a menu item will prevent the user from being able to select this item from the menu. This only effects the state of the item in the menu, in other words, should the item be the currently selected item, the programmer is responsible for determining this condition and taking appropriate action. .TP \fIpathName \fBenable \fIindex\fR Enable the option menu entry specified by \fIindex\fR. Enabling a menu item allows the user to select this item from the menu. .TP \fIpathName \fBget\fR ?\fIfirst\fR? ?\fIlast\fR? If no arguments are specified, this operation returns the currently selected option menu item. Otherwise, it returns the name of the option at index \fIfirst\fR, or a range of options between \fIfirst\fR and \fIlast\fR. .TP \fIpathName \fBindex \fIindex\fR Returns the numerical index corresponding to \fIindex\fR. .TP \fIpathName \fBinsert \fIindex string\fR ?\fIstring\fR? Insert an item, or list of items, into the menu at location \fIindex\fR. .TP \fIpathName \fBselect \fIindex\fR Select an item from the option menu to be displayed as the currently selected item. .TP \fIpathName \fBsort \fImode\fR Sort the current menu in either \fBascending\fR, or \fBdescending\fR order. The values \fBincreasing\fR, or \fBdecreasing\fR are also accepted. .SH "COMPONENTS" .LP .nf Name: \fBmenuBtn\fR Class: \fBMenubutton\fR .fi .IP The menuBtn component is the option menu button which displays the current choice from the popup menu. See the "menubutton" widget manual entry for details on the menuBtn component item. .LP .nf Name: \fBpopupMenu\fR Class: \fBMenu\fR .fi .IP The popupMenu component is menu displayed upon selection of the menu button. The menu contains the choices for the option menu. See the "menu" widget manual entry for details on the popupMenu component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::optionmenu .om -labelmargin 5 \\ -labelon true -labelpos w -labeltext "Operating System :" .om insert end Unix VMS Linux OS/2 {Windows NT} DOS .om sort ascending .om select Linux pack .om -padx 10 -pady 10 .DE .SH ACKNOWLEDGEMENTS: Michael J. McLennan .IP Borrowed some ideas (next & previous) from OptionButton class. .LP Steven B. Jaggers .IP Provided an initial prototype in [incr Tcl]. .LP Bret Schuhmacher .IP Helped with popup menu functionality. .LP .SH AUTHOR Alfredo Jahn .SH KEYWORDS optionmenu, widget iwidgets-4.1.1/doc/messagebox.n0000644003604700454610000002220007476742024015020 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) messagebox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::messagebox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::messagebox \- Create and manipulate a messagebox text widget .SH SYNOPSIS \fBiwidgets::messagebox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Scrolledwidget <- iwidgets::Messagebox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground activeForeground background borderWidth cursor exportSelection font foreground highlightColor highlightThickness padX padY relief setGrid\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR .fi .LP See the "labeledwidget" class manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBheight\fR \fBhscrollMode\fR \fBsbWidth\fR \fBscrollMargin\fR \fBtextBackground\fR \fBvisibleItems\fR \fBvscrollMode\fR \fBwidth\fR .fi .LP See the "scrolledtext" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBspacing1\fR \fBspacing2\fR \fBspacing3\fR .fi .LP See the "text" widget manual entry for details on the above associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBfileName\fR Class: \fBFileName\fR Command-Line Switch: \fB-filename\fR .fi .IP Specifies the filename to be displayed in the file selection dialog when it pops up during a save of the messagebox contents operation. .LP .nf Name: \fBmaxLines\fR Class: \fBMaxLines\fR Command-Line Switch: \fB-maxlines\fR .fi .IP Specifies the maximum number of lines allowed in the text area of the messagebox. When this limit is reached, the oldest line will be deleted such that the total number of lines remains \fImaxlines\fR. .LP .nf Name: \fBsaveDir\fR Class: \fBSaveDir\fR Command-Line Switch: \fB-savedir\fR .fi .IP Specifies the default directory to display when the file selection dialog pops up during a save of the messagebox contents operation. If this parameter is not specified, then the files in the current working directory are displayed. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::messagebox\fR command creates a scrolled information messages area widget. Message types can be user defined and configured. Their options include foreground, background, font, bell, and their display mode of on or off. This allows message types to defined as needed, removed when no longer so, and modified when necessary. An export method is provided for file I/O. .PP The number of lines displayed may be limited with the default being 1000. When this limit is reached, the oldest line is removed. A popup menu which appears when the right mouse button has been pressed in the message area has been predefined. The contents of the popup menu by default support clearing the area and saving its contents to a file. Additional operations may be defined or existing operations removed by using the component command to access the popup menu. .SH "MESSAGE TYPES" .PP The display characteristics of messages issued to the messagebox vary with the message type. Types are defined by the user and they may be added, removed, and configured. The options of the message type control the display include the following: .TP \fB\-background \fIcolor\fR \fIColor\fR specifies the background color to use for characters associated with the message type. It may have any of the forms accepted by \fBTk_GetColor\fR. .TP \fB\-bell \fIboolean\fR Specifies whether or not to ring the bell whenenver a message of this type is issued. \fIBoolean\fR may have any of the forms accepted by \fBTk_GetBoolean\fR. The default is 0. .TP \fB-font\ \fIfontName\fR \fIFontName\fR is the name of a font to use for drawing characters. It may have any of the forms accepted by Tk_GetFontStruct. .TP \fB\-foreground \fIcolor\fR \fIColor\fR specifies the foreground color to use for characters associated with the message type. It may have any of the forms accepted by \fBTk_GetColor\fR. .TP \fB\-show \fIboolean\fR Specifies whether of not to display this message type when issued. \fIBoolean\fR may have any of the forms accepted by \fBTk_GetBoolean\fR. The default is 1. .SH "METHODS" .PP The \fBiwidgets::messagebox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for messagebox widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::messagebox\fR command. .TP \fIpathName \fBclear\fR Clear the messagebox of all messages. .TP \fIpathName \fBexport\fR \fIfilename\fR Write text to a file. If \fIfilename\fR exists then contents are replaced with text widget contents. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::messagebox\fR command. .TP \fIpathName \fBtype\fR \fIoption\fR \fImsgtype\fR ?\fIarg arg ...\fR? This command is used to manipulate message types. The behavior of the command depends on the option argument that follows the type keyword. The following forms of the command are supported: .RS .TP .TP \fIpathName \fBtype add\fR \fImsgtype\fR ?\fIoption value ...\fR? Adds a new message type given by \fImsgtype\fR with the display properties defined by the option value pairs. See MESSAGE TYPES for information on the options that are supported. .TP \fIpathName \fBtype cget\fR \fImsgtype option\fR Returns the value of a configuration option for a message type. \fIMsgtype\fR identifies the message type, and \fIoption\fR specifies a particular configuration option, which must be one of the ones listed in the section MESSAGE TYPES. .TP \fIpathName \fBtype configure \fImsgtype\fR ?\fIoption value ...\fR? Query or modify the configuration options for a message type. If no \fIoption\fR is specified, returns a list describing all of the available options for the message type \fImsgtype\fR. If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option. If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given option(s) to have the given value(s); in this case the command returns an empty string. See MESSAGE TYPES for information on the options that are supported. \fIpathName \fBtype remove\fR \fImsgtype\fR Removes an existing message type given by \fImsgtype\fR. .RE .TP \fIpathName \fBissue\fR \fIstring\fR \fI?level?\fR \fI?tags?\fR Print a \fIstring\fR to the text area at the given level and with any additional tags specified. .SH "COMPONENTS" .LP .nf Name: \fBitemMenu\fR Class: \fBMenu\fR .fi .IP This is the popup menu that gets displayed when you right-click in the text area of the messagebox. Its contents may be modified via the component command. .LP .nf Name: \fBtext\fR Class: \fBScrolledtext\fR .fi .IP The text component is the scrolledtext widget. See the "scrolledtext" widget manual entry for details on the text component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::messagebox .mb -hscrollmode dynamic \\ -labeltext "Messages" -labelpos n \\ -height 120 -width 550 -savedir "/tmp" -textbackground #d9d9d9 pack .mb -padx 5 -pady 5 -fill both -expand yes .mb type add ERROR -background red -foreground white -bell 1 .mb type add WARNING -background yellow -foreground black .mb type add INFO -background white -foreground black .mb issue "This is an error message in red with a beep" ERROR .mb issue "This warning message in yellow" WARNING .mb issue "This is an informational message" INFO .DE .SH AUTHOR Alfredo Jahn V .DE Mark L. Ulferts .LP .SH KEYWORDS messagebox, scrolledtext, text, widget iwidgets-4.1.1/doc/toolbar.n0000644003604700454610000003100107476742024014324 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" toolbar.n '\" .so man.macros .HS iwidgets::toolbar iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME \fBiwidgets::toolbar\fR \- Create and manipulate a tool bar .SH SYNOPSIS \fBiwidgets::toolbar\fR \fIpathName\fR ?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Toolbar .SH STANDARD OPTIONS .LP .nf .ta 4c 8c 12c \fB activeBackground activeForeground background borderWidth cursor disabledForeground font foreground highlightBackground highlightColor highlightThickness insertBackground insertForeground orient selectBackground selectBorderWidth selectForeground state troughColor\fR .fi .LP See the "options" manual entry for details on the standard options. For widgets added to the toolbar, these options will be propogated if the widget supports the option. For example, all widgets that support a font option will be changed if the the toolbar's font option is configured. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBballoonBackground\fR Class: \fBBalloonBackground\fR Command-Line Switch: \fB-ballooonbackground\fR .fi .IP Specifies the background color of the balloon help displayed at the bottom center of a widget on the toolbar that has a non empty string for its balloonStr option. The default color is yellow. .LP .nf Name: \fBballoonDelay1\fR Class: \fBBalloonDelay1\fR Command-Line Switch: \fB-balloondelay1\fR .fi .IP Specifies the length of time (in milliseconds) to wait before initially posting a balloon help hint window. This delay is in effect whenever 1) the mouse leaves the toolbar, or 2) a toolbar item is selected with the mouse button. .LP .nf Name: \fBballoonDelay2\fR Class: \fBBalloonDelay2\fR Command-Line Switch: \fB-balloondelay2\fR .fi .IP Specifies the length of time (in milliseconds) to wait before continuing to post balloon help hint windows. This delay is in effect after the first time a balloon hint window is activated. It remains in effect until 1) the mouse leaves the toolbar, or 2) a toolbar item is selected with the mouse button. .LP .nf Name: \fBballoonFont\fR Class: \fBBalloonFont\fR Command-Line Switch: \fB-balloonfont\fR .fi .IP Specifies the font of the balloon help text displayed at the bottom center of a widget on the toolbar that has a non empty string for its balloonStr option. The default font is 6x10. .LP .nf Name: \fBballoonForeground\fR Class: \fBBalloonForeground\fR Command-Line Switch: \fB-ballooonforeground\fR .fi .IP Specifies the foreground color of the balloon help displayed at the bottom center of a widget on the toolbar that has a non empty string for its balloonStr option. The default color is black. .LP .nf Name: \fBhelpVariable\fR Class: \fBHelpVariable\fR Command-Line Switch: \fB-helpvariable\fR .fi .IP Specifies the global variable to update whenever the mouse is in motion over a toolbar widget. This global variable is updated with the current value of the active widget's helpStr. Other widgets can "watch" this variable with the trace command, or as is the case with entry or label widgets, they can set their textVariable to the same global variable. This allows for a simple implementation of a help status bar. Whenever the mouse leaves a menu entry, the helpVariable is set to the empty string {}. .LP .nf Name: \fBorient\fR Class: \fBOrient\fR Command-Line Switch: \fB-orient\fR .fi .IP Specifies the orientation of the toolbar. Must be either horizontal or vertical. .BE .SH DESCRIPTION The \fBiwidgets::toolbar\fR command creates a new window (given by the pathName argument) and makes it into a \fBtoolbar\fR widget. Additional options, described above may be specified on the command line or in the option database to configure aspects of the toolbar such as its colors, font, and orientation. The \fBiwidgets::toolbar\fR command returns its pathName argument. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist. .PP A \fBtoolbar\fR is a widget that displays a collection of widgets arranged either in a row or a column (depending on the value of the -orient option). This collection of widgets is usually for user convenience to give access to a set of commands or settings. Any widget may be placed on a toolbar. However, command or value-oriented widgets (such as button, radiobutton, etc.) are usually the most useful kind of widgets to appear on a toolbar. .PP In addition, the toolbar adds two new options to all widgets that are added to it. These are the \fBhelpStr\fR and \fBballoonStr\fR options. See the discussion for the widget command add below. .SH "WIDGET-SPECIFIC METHODS" .PP The iwidgets::toolbar command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName\fR \fIoption\fR \fI?arg arg ...?\fR .DE Option and args determine the exact behavior of the command. .PP Many of the widget commands for a toolbar take as one argument an indicator of which widget item of the toolbar to operate on. The indicator is called an \fBindex\fR and may be specified in any of the following forms: .TP \fInumber\fR Specifies the widget numerically, where 0 corresponds to the first widget in the notebook, 1 to the second, and so on. (For horizontal, 0 is the leftmost; for vertical, 0 is the topmost). .TP \fBend\fR Specifes the last widget in the toolbar's index. If the toolbar is empty this will return -1. .TP \fBlast\fR Same as end. .TP \fIpattern\fR If the index doesn't satisfy any of the above forms, then this form is used. Pattern is pattern-matched against the widgetName of each widget in the toolbar, in order from the first to the last widget, until a matching entry is found. An exact match must occur. .PP The following commands are possible for toolbar widgets: .TP \fIpathName\fR \fBadd\fR \fIwidgetCommand\fR \fIwidgetName\fR \fI?option value?\fR Adds a widget with the command widgetCommand whose name is widgetName to the toolbar. If widgetCommand is radiobutton or checkbutton, its packing is slightly padded to match the geometry of button widgets. In addition, the indicatorOn option is false by default and the selectColor is that of the toolbar background by default. This allows Radiobutton and Checkbutton widgets to be added as icons by simply setting their bitmap or image options. If additional arguments are present, they are the set of available options that the widget type of \fIwidgetCommand\fR supports. In addition they may also be one of the following options: .RS .TP \fB-helpstr\fR \fIvalue\fR Specifes the help string to associate with the widget. When the mouse moves over the widget, the variable denoted by \fBhelpVariable\fR is set to \fBhelpStr\fR. Another widget can bind to the helpVariable and thus track status help. .TP \fB-balloonstr\fR \fIvalue\fR Specifes the string to display in a balloon window for this widget. A balloon window is a small popup window centered at the bottom of the widget. Usually the \fBballoonStr\fR value is the name of the item on the toolbar. It is sometimes known as a hint window. .IP When the mouse moves into an item on the toolbar, a timer is set based on the value of \fBballoonDelay1\fR. If the mouse stays inside the item for \fBballoonDelay1\fR, the balloon window will pop up displaying the \fBballoonStr\fR value. Once the balloon window is posted, a new timer based on \fBballoonDelay2\fR is set. This is typically a shorter timer. If the mouse is moved to another item, the window is unposted and a new window will be posted over the item if the shorter delay time is satisfied. .IP While the balloon window is posted, it can also be unposted if the item is selected. In this case the timer is reset to \fBballoonDelay1\fR. Whenever the mouse leaves the toolbar, the timer is also reset to \fBballoonDelay1\fR. .IP This window posting/unposting model is the same model used in the Windows95 environment. .RE .TP \fIpathName\fR \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR \fIvalue\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for pathName (see Tk_ConfigureInfo for information on the format of this list). If \fIoption\fR is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. .TP \fIpathName\fR \fBdelete\fR \fIindex\fR ?\fIindex2\fR? This command deletes all items between \fIindex\fR and \fIindex2\fR inclusive. If \fIindex2\fR is omitted then it defaults to \fIindex\fR. Returns an empty string. .TP \fIpathName\fR \fBindex\fR \fIindex\fR Returns the widget's numerical index for the entry corresponding to \fIindex\fR. If \fIindex\fR is not found, -1 is returned. .TP \fIpathName\fR \fBinsert\fR \fIbeforeIndex\fR \fIwidgetCommand\fR \fIwidgetName\fR \fI?option value?\fR .TP Insert a new item named \fIwidgetName\fR with the command \fIwidgetCommand\fR before the item specified by \fIbeforeIndex\fR. If \fIwidgetCommand\fR is \fBradiobutton\fR or \fBcheckbutton\fR, its packing is slightly padded to match the geometry of button widgets. In addition, the \fBindicatorOn\fR option is \fBfalse\fR by default and the \fBselectColor\fR is that of the toolbar background by default. This allows \fBRadiobutton\fR and \fBCheckbutton\fR widgets to be added as icons by simply setting their \fBbitmap\fR or \fBimage\fR options. The set of available options is the same as specified in the \fBad\fR command. .TP \fIpathName\fR \fBitemcget\fR \fIindex\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR for index. The item type of \fIindex\fR determines the valid available options. .TP \fIpathName\fR \fBitemconfigure\fR \fIindex\fR \fI?option value?\fR Query or modify the configuration options of the widget of the toolbar specified by \fIindex\fR. If no option is specified, returns a list describing all of the available options for \fIindex\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. The item type of \fIindex\fR determines the valid available options. The set of available options is the same as specified in the \fBad\fR command. .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::toolbar .tb -helpvariable statusVar .tb add button item1 \\ -helpstr "Save It" -bitmap @./icons/Tool_32_box.xbm \\ -balloonstr "Save" -command {puts 1} .tb add button item2 \\ -helpstr "Save It" -bitmap @./icons/Tool_32_brush.xbm \\ -balloonstr "Save" -command {puts 1} .tb add button item3 \\ -helpstr "Save It" -bitmap @./icons/Tool_32_cut.xbm \\ -balloonstr "Save" -command {puts 1} .tb add button item4 \\ -helpstr "Save It" -bitmap @./icons/Tool_32_draw.xbm \\ -balloonstr "Save" -command {puts 1} .tb add button item5 \\ -bitmap @./icons/Tool_32_erase.xbm -helpstr "Play It" \\ -command {puts 2} .tb add frame filler \\ -borderwidth 1 -width 10 -height 10 .tb add radiobutton item6 \\ -bitmap @./icons/Tool_32_oval.xbm -command {puts 4} \\ -variable result -value OPEN -helpstr "Radio Button # 1" \\ -balloonstr "Radio" .tb add radiobutton item7 \\ -bitmap @./icons/Tool_32_line.xbm -command {puts 5} \\ -variable result -value CLOSED .tb add checkbutton item8 \\ -bitmap @./icons/Tool_32_text.xbm -command {puts 6} \\ -variable checkit -onvalue yes -offvalue no .tb add checkbutton check2 \\ -bitmap @./icons/Tool_32_points.xbm -command {puts 7} \\ -variable checkit2 -onvalue yes -offvalue no pack .tb -side top -anchor nw .DE .SH AUTHOR Bill Scott .SH KEYWORDS toolbar, button, radiobutton, checkbutton, iwidgets, widget iwidgets-4.1.1/doc/watch.n0000644003604700454610000001713307340743271013775 0ustar dgp771div'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) watch.n '\" .so man.macros .HS iwidgets::watch iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::watch \- Create and manipulate time with a watch widgets .SH SYNOPSIS \fBiwidgets::watch\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Watch .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR \fBrelief\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP See the "Canvas" manual entry for details on the above associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBclockColor\fR Class: \fBColorfR Command-Line Switch: \fB-clockcolor\fR .fi .IP Fill color for the main oval encapsulating the watch, in any of the forms acceptable to \fBTk_GetColor\fR. The default is "White". .nf .LP Name: \fBclockStipple\fR Class: \fBBitmapfR Command-Line Switch: \fB-clockstipple\fR .fi .IP Bitmap for the main oval encapsulating the watch, in any of the forms acceptable to \fBTk_GetBitmap\fR. The default is "". .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the watch widget in any of the forms acceptable to \fBTk_GetPixels\fR. The default height is 175 pixels. .LP .nf Name: \fBhourColor\fR Class: \fBColorfR Command-Line Switch: \fB-hourcolor\fR .fi .IP Fill color for the hour hand, in any of the forms acceptable to \fBTk_GetColor\fR. The default is "Red". .LP .nf Name: \fBhourRadius\fR Class: \fBRadius\fR Command-Line Switch: \fB-hourradius\fR .fi .IP Specifies the radius of the hour hand as a percentage of the radius from the center to the out perimeter of the clock. The value must be a fraction <= 1. The default is ".5". .LP .nf Name: \fBminuteColor\fR Class: \fBColorfR Command-Line Switch: \fB-minutecolor\fR .fi .IP Fill color for the minute hand, in any of the forms acceptable to \fBTk_GetColor\fR. The default is "Yellow". .LP .nf Name: \fBminuteRadius\fR Class: \fBRadius\fR Command-Line Switch: \fB-minuteradius\fR .fi .IP Specifies the radius of the minute hand as a percentage of the radius from the center to the out perimeter of the clock. The value must be a fraction <= 1. The default is ".8". .LP .nf Name: \fBpivotColor\fR Class: \fBColorfR Command-Line Switch: \fB-pivotcolor\fR .fi .IP Fill color for the circle in which the watch hands rotate in any of the forms acceptable to \fBTk_GetColor\fR. The default is "White". .LP .nf Name: \fBpivotRadius\fR Class: \fBRadius\fR Command-Line Switch: \fB-pivotradius\fR .fi .IP Specifies the radius of the circle in which the watch hands rotate as a percentage of the radius. The value must be a fraction <= 1. The default is ".1". .LP .nf Name: \fBsecondColor\fR Class: \fBColorfR Command-Line Switch: \fB-secondcolor\fR .fi .IP Fill color for the second hand, in any of the forms acceptable to \fBTk_GetColor\fR. The default is "Black". .LP .nf Name: \fBsecondRadius\fR Class: \fBRadius\fR Command-Line Switch: \fB-secondradius\fR .fi .IP Specifies the radius of the second hand as a percentage of the radius from the center to the out perimeter of the clock. The value must be a fraction <= 1. The default is ".9". .LP .nf Name: \fBshowAmPm\fR Class: \fBShosAmPm\fR Command-Line Switch: \fB-showampm\fR .fi .IP Specifies whether the AM/PM radiobuttons should be displayed, in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is yes. .LP .nf Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Specifies the editable state for the hands on the watch. In a normal state, the user can select and move the hands via mouse button 1. The valid values are \fBnormal\fR, and \fBdisabled\fR. The defult is normal. .LP .nf Name: \fBtickColor\fR Class: \fBColorfR Command-Line Switch: \fB-tickcolor\fR .fi .IP Fill color for the 60 ticks around the perimeter of the watch, in any of the forms acceptable to \fBTk_GetColor\fR. The default is "Black". .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the watch widget in any of the forms acceptable to \fBTk_GetPixels\fR. The default height is 155 pixels. .BE .SH DESCRIPTION .PP The \fBiwidgets::watch\fR command creates a watch with hour, minute, and second hands modifying the time value. .SH "METHODS" .PP The \fBiwidgets::watch\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for watch widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::watch\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::watch\fR command. .TP \fIpathName \fBget\fR ?\fBformat\fR? Returns the current time of the watch in a format of string or as an integer clock value using the \fB-string\fR and \fB-clicks\fR format options respectively. The default is by string. Reference the clock command for more information on obtaining time and its formats. .TP \fIpathName \fBshow\fR \fItime\fR Changes the currently displayed time to be that of the time argument. The time may be specified either as a string, an integer clock value or the keyword "now". Reference the clock command for more information on obtaining time and its format. .TP \fIpathName \fBwatch\fR ?\fBargs\fR? Evaluates the specifieds \fBargs\fR against the canvas component. .ta 4c .SH "COMPONENTS" .LP .nf Name: \fBcanvas\fR Class: \fBCanvas\fR .fi .IP The canvas component is the where the clock is drawn. See the Canvas widget manual entry for details. .LP .nf Name: \fBframe\fR Class: \fBFrame\fR .fi .IP The frame component is the where the "AM" and "PM" radiobuttons are displayed. See the Frame widget manual entry for details. .LP .nf Name: \fBam\fR Class: \fBRadiobutton\fR .fi .IP The am component indicates whether on not the time is relative to "AM". See the Radiobutton widget manual entry for details. .LP .nf Name: \fBpm\fR Class: \fBRadiobutton\fR .fi .IP The pm component indicates whether on not the time is relative to "PM". See the Radiobutton widget manual entry for details. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::watch .w -state disabled -showampm no -width 155 -height 155 pack .w -padx 10 -pady 10 -fill both -expand yes while {1} { after 1000 .w show update } .DE .SH AUTHOR John Tucker .DE Mark L. Ulferts .SH KEYWORDS watch, hand, ticks, pivot, widget iwidgets-4.1.1/doc/tk2html2.awk0000644003604700454610000000216606557146037014671 0ustar dgp771div#!/bin/nawk # cleans up any leading crap before line in stream from tk2html /^<TITLE>/ { go = 1 } /^<table>*/ { getline ln numf = split (ln, spln) if ( ln !~ "Name: *" ) { ind = 0 inc = 4 print "<table cellpadding=5>" while ( ln !~ "^</table>" ) { for (i = 1; i <= numf; i++) { tablns[ind] = spln[i] ind++ } getline ln numf = split (ln, spln) } for (i = 0; i < inc; i++) { print "<td valign=top>" for (j = i; j < ind; j += inc) print tablns[j] "<br>" print "</td>" } print "</table>" } else { print "<pre>" while ( ln !~ "^</table>" ) { print ln getline ln } print "</pre>" } next } go == 1 { print $0 } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/feedback.n�����������������������������������������������������������������������0000644�0036047�0045461�00000010601�07476742024�014411� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1996 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) feedback.n '\" .so man.macros .HS iwidgets::feedback iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::feedback \- Create and manipulate a feedback widget to display feedback on the current status of an ongoing operation to the user. .SH SYNOPSIS \fBiwidgets::feedback\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Feedback .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR \fBhighlightColor\fR \fBhighlightThickness\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBbarcolor\fR Class: \fBBarColor\fR Command-Line Switch: \fB-barcolor\fR .fi .IP Specifies the color of the status bar, in any of the forms acceptable to \fBTk_GetColor\fR. The default is DodgerBlue. .LP .nf Name: \fBbarheight\fR Class: \fBBarHeight\fR Command-Line Switch: \fB-barheight\fR .fi .IP Specifies the height of the status bar, in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 20. .LP .nf Name: \fBtroughColor\fR Class: \fBTroughColor\fR Command-Line Switch: \fB-troughcolor\fR .fi .IP Specifies the color of the frame in which the status bar sits, in any of the forms acceptable to \fBTk_GetColor\fR. The default is white. .LP .nf Name: \fBsteps\fR Class: \fBSteps\fR Command-Line Switch: \fB-steps\fR .fi .IP Specifies the total number of steps for the status bar. The default is 10. .LP .SH DESCRIPTION .PP The \fBiwidgets::feedback\fR command creates a widget to display feedback on the current status of an ongoing operation to the user. Display is given as a percentage and as a thermometer type bar. Options exist for adding a label and controlling its position. .SH "METHODS" .PP The \fBiwidgets::feedback\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for scrolledtext widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBscrolledhtml\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::feedback\fR command. .TP \fIpathName\fR \fBreset\fR Reset the current number of steps completed to 0, and configures the percentage complete label text to 0% .TP \fIpathName\fR \fBstep\fR ?\fIinc\fR? Increase the current number of steps completed by the amount specified by \fIinc\fR. \fIInc\fR defaults to 1. .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::feedback .fb -labeltext "Status" -steps 20 pack .fb -padx 10 -pady 10 -fill both -expand yes for {set i 0} {$i < 20} {incr i} { .fb step after 500 } .DE .SH ACKNOWLEDGEMENTS Sam Shen .IP This code is based largely on his feedback.tcl code from tk inspect. The original feedback code is copyright 1995 Lawrence Berkeley Laboratory. .LP .SH AUTHOR Kris Raney .SH KEYWORDS feedback, widget �������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/finddialog.n���������������������������������������������������������������������0000644�0036047�0045461�00000020427�07476742024�014774� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) finddialog.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::finddialog iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::finddialog \- Create and manipulate a find dialog widget .SH SYNOPSIS \fBiwidgets::finddialog\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell <- iwidgets::Dialogshell <- iwidgets::Finddialog .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground activeForeground background borderWidth cursor disabledForeground font foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth selectBackground selectBorderWidth selectColor selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBselectColor\fR .fi .LP See the "checkbutton" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBselectColor\fR .fi .LP See the "entryfield" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBbuttonBoxPadX\fR \fBbuttonBoxPadY\fR \fBbuttonBoxPos\fR \fBpadX\fR \fBpadY\fR \fBseparator\fR \fBthickness\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBheight\fR \fBmaster\fR \fBmodality\fR \fBwidth\fR .fi .LP See the "shell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" widget manual entry for details on the above inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBclearCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-clearcommand\fR .fi .IP Specifies a command to be invoked following a clear operation. The option is meant to be used as means of notification that the clear has taken place and allow other actions to take place such as disabling a find again menu. .LP .nf Name: \fBmatchCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-matchcommand\fR .fi .IP Specifies a command to be invoked following a find operation. The command is called with a match point as an argument which identifies where exactly where in the text or scrolledtext widget that the match is located. Should a match not be found the match point is {}. The option is meant to be used as a means of notification that the find operation has completed and allow other actions to take place such as disabling a find again menu option if the match point was {}. .LP .nf Name: \fBpatternBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-patternbackground\fR .fi .IP Specifies the background color of the text matching the search pattern. It may have any of the forms accepted by Tk_GetColor. The default is gray44. .LP .nf Name: \fBpatternForeground\fR Class: \fBBackground\fR Command-Line Switch: \fB-patternforeground\fR .fi .IP Specifies the foreground color of the text matching the search pattern. It may have any of the forms accepted by Tk_GetColor. The default is white. .LP .nf Name: \fBsearchBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-searchbackground\fR .fi .IP Specifies the background color of the line containing the matching the search pattern. It may have any of the forms accepted by Tk_GetColor. The default is gray77. .LP .nf Name: \fBsearchForeground\fR Class: \fBBackground\fR Command-Line Switch: \fB-searchforeground\fR .fi .IP Specifies the foreground color of the line containing the matching the search pattern. It may have any of the forms accepted by Tk_GetColor. The default is black. .LP .nf Name: \fBtextWidget\fR Class: \fBTextWidget\fR Command-Line Switch: \fB-textwidget\fR .fi .IP Specifies the text or scrolledtext widget to be searched. .BE .SH DESCRIPTION .PP The \fBiwidgets::finddialog\fR command creates a find dialog that works in conjunction with a text or scrolledtext widget to provide a means of performing search operations. The user is prompted for a text pattern to be found in the text or scrolledtext widget. The search can be for all occurances, by regular expression, considerate of the case, or backwards. .SH "METHODS" .PP The \fBiwidgets::finddialog\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for finddialog widgets: .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBadd\fR \fBbuttonconfigure\fR \fBdefault\fR \fBhide\fR \fBinvoke\fR \fBshow\fR .fi .LP See the "buttonbox" widget manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBdeactivate\fR .fi .LP See the "shell" widget manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::finddialog\fR command. .TP \fIpathName \fBclear\fR Clears the pattern in the entry field and the pattern matchin indicators in the text or scrolledtext widget. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::finddialog\fR command. .TP \fIpathName \fBfind\fR Search for a specific text string in the text widget given by the -textwidget option. This method is the standard callback for the Find button. It is made available such that it can be bound to a find again action. .SH "COMPONENTS" .LP .nf Name: \fBall\fR Class: \fBCheckbutton\fR .fi .IP The all component specifies that all the matches of the pattern should be found when performing the search. See the "checkbutton" widget manual entry for details on the all component item. .LP .nf Name: \fBbackwards\fR Class: \fBCheckbutton\fR .fi .IP The backwards component specifies that the search should continue in a backwards direction towards the beginning of the text or scrolledtext widget. See the "checkbutton" widget manual entry for details on the backwards component item. .LP .nf Name: \fBcase\fR Class: \fBCheckbutton\fR .fi .IP The case component specifies that the case of the pattern should be taken into consideration when performing the search. See the "checkbutton" widget manual entry for details on the case component item. .LP .nf Name: \fBpattern\fR Class: \fBEntryfield\fR .fi .IP The pattern component provides the pattern entry field. See the "entryfield" widget manual entry for details on the pattern component item. .LP .nf Name: \fBregexp\fR Class: \fBCheckbutton\fR .fi .IP The regexp component specifies that the pattern is a regular expression. See the "checkbutton" widget manual entry for details on the regexp component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::scrolledtext .st pack .st .st insert end "Now is the time for all good men\\n" .st insert end "to come to the aid of their country" iwidgets::finddialog .fd -textwidget .st .fd center .st .fd activate .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS finddialog, dialogshell, shell, widget �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/pushbutton.n���������������������������������������������������������������������0000644�0036047�0045461�00000011047�07476742024�015105� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) pushbutton.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::pushbutton iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::pushbutton \- Create and manipulate a push button widget .SH SYNOPSIS \fBiwidgets::pushbutton\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Pushbutton .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground activeForeground background bitmap borderWidth command cursor disabledForeground font foreground highlightBackground highlightColor highlightThickness image padX padY state text underline wrapLength\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBdefaultRing\fR Class: \fBDefaultRing\fR Command-Line Switch: \fB-defaultring\fR .fi .IP Boolean describing whether the button displays its default ring given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is false. .LP .nf Name: \fBdefaultRingPad\fR Class: \fBPad\fR Command-Line Switch: \fB-defaultringpad\fR .fi .IP Specifies the amount of space to be allocated to the indentation of the default ring ring given in any of the forms acceptable to \fBTcl_GetPixels\fR. The option has no effect if the defaultring option is set to false. The default is 2 pixels. .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the button inclusive of any default ring given in any of the forms acceptable to \fBTk_GetPixels\fR. A value of zero lets the push button determine the height based on the requested height plus highlightring and defaultringpad. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the button inclusive of any default ring given in any of the forms acceptable to \fBTk_GetPixels\fR. A value of zero lets the push button determine the width based on the requested width plus highlightring and defaultringpad. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::pushbutton\fR command creates a push button with an optional default ring used for default designation and traversal. .SH "METHODS" .PP The \fBiwidgets::pushbutton\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for pushbutton widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBflash\fR \fBinvoke\fR .fi .LP See the "button" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::pushbutton\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::pushbutton\fR command. .SH "COMPONENTS" .LP .nf Name: \fBpushbutton\fR Class: \fBButton\fR .fi .IP The pushbutton component is the button surrounded by the optional default ring. See the "button" widget manual entry for details on the pushbutton component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::pushbutton .pb -text "Hello" -command {puts "Hello World"} -defaultring 1 pack .pb -padx 10 -pady 10 .DE .SH AUTHOR Bret A. Schuhmacher .DE Mark L. Ulferts .SH KEYWORDS pushbutton, widget �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/datefield.n����������������������������������������������������������������������0000644�0036047�0045461�00000015142�07476742024�014613� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1997 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) datefield.n 1.0 97/04/30 16:04:44 '\" .so man.macros .HS iwidgets::datefield iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::datefield \- Create and manipulate a date field widget .SH SYNOPSIS \fBiwidgets::datefield\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::LabeledWidget <- iwidgets::Datefield .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground justify relief\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBchildSitePos\fR Class: \fBPosition\fR Command-Line Switch: \fB-childsitepos\fR .fi .IP Specifies the position of the child site in the date field: \fBn\fR, \fBs\fR, \fBe\fR, or \fBw\fR. The default is e. .LP .nf Name: \fBcommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-command\fR .fi .IP Specifies a Tcl command to be executed upon detection of a Return key press event. .LP .nf Name: \fBgmt\fR Class: \fBGMT\fR Command-Line Switch: \fB-gmt\fR .fi .IP Determines whether the date is calculated relative to Greenwich Mean Time. Accepts a boolean value. The default is no. .LP .nf Name: \fBint\fR Class: \fBDateFormat\fR Command-Line Switch: \fB-int\fR .fi .IP Used to specify international date formats. This option must be a boolean value. When set to true, the date is formatted as YYYY-MM-DD. When set to false, it is formatted as MM/DD/YYYY. Note that this format is driven by the 'clock scan' command and that YYYY-MM-DD is supported in Tk 8.4 or later. The default is no. .LP .nf Name: \fBiq\fR Class: \fBIq\fR Command-Line Switch: \fB-iq\fR .fi .IP Specifies the level of intelligence to be shown in the actions taken by the datefield during the processing of keypress events. Valid settings include \fBhigh\fR, \fBaverage\fR, and \fBlow\fR. With a high iq,the date prevents the user from typing in an invalid date. For example, if the current date is 05/31/1997 and the user changes the month to 04, then the day will be instantly modified for them to be 30. In addition, leap years are fully taken into account. With average iq, the month is limited to the values of 01-12, but it is possible to type in an invalid day. A setting of low iq instructs the widget to do no validity checking at all during date entry. With both average and low iq levels, it is assumed that the validity will be determined at a later time using the date's \fBisvalid\fR command. .LP .nf Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Specifies one of two states for the datefield: \fBnormal\fR or \fBdisabled\fR. If the datefield is disabled then input is not accepted. The default is normal. .LP .nf Name: \fBtextBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-textbackground\fR .fi .IP Background color for inside textual portion of the entry field. The value may be given in any of the forms acceptable to \fBTk_GetColor\fR. .LP .nf Name: \fBtextFont\fR Class: \fBFont\fR Command-Line Switch: \fB-textfont\fR .fi .IP Name of font to use for display of text in datefield. The value may be given in any of the forms acceptable to \fBTk_GetFont\fR. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::datefield\fR command creates an enhanced text entry widget for the purpose of date entry with various degrees of built-in intelligence. .DE .SH "METHODS" .PP The \fBiwidgets::datefield\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for datefield widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::datefield\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::datefield\fR command. .TP \fIpathName \fBget\fR ?\fBformat\fR? Returns the current contents of the datefield in a format of string or as an integer clock value using the \fB-string\fR and \fB-clicks\fR format options respectively. The default is by string. Reference the clock command for more information on obtaining dates and their formats. .TP \fIpathName \fBisvalid\fR Returns a boolean indication of the validity of the currently displayed date value. For example, 03/03/1960 is valid whereas 02/29/1997 is invalid. .TP \fIpathName \fBshow\fR \fIdate\fR Changes the currently displayed date to be that of the date argument. The date may be specified either as a string, an integer clock value or the keyword "now". Reference the clock command for more information on obtaining dates and their formats. .SH "COMPONENTS" .LP .nf Name: \fBdate\fR Class: \fBEntry\fR .fi .IP The date component provides the entry field for date input and display. See the "entry" widget manual entry for details on the date component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 proc returnCmd {} { puts [.df get] } iwidgets::datefield .df -command returnCmd pack .df -fill x -expand yes -padx 10 -pady 10 .DE .SH AUTHOR Mark L. Ulferts .LP .SH KEYWORDS datefield, widget ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/canvasprintbox.n�����������������������������������������������������������������0000644�0036047�0045461�00000021027�07476742023�015731� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" iwidgets::canvasprintbox (c) 1995 Tako Schotanus '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" .so man.macros .HS iwidgets::canvasprintbox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::canvasprintbox \- Create and manipulate a canvas print box widget .SH SYNOPSIS \fBiwidgets::canvasprintbox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Canvasprintbox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor foreground highlightBackground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth relief repeatDelay repeatInterval selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .IP .LP .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBfilename\fR Class: \fBFileName\fR Command-Line Switch: \fB-filename\fR .fi .IP The file to write the postscript output to (Only when output is set to "file"). If posterizing is turned on and \fBhpagecnt\fR and/or \fBvpagecnt\fR is more than 1, x.y is appended to the filename where x is the horizontal page number and y the vertical page number. .LP .nf Name: \fBhpagecnt\fR Class: \fBPageCnt\fR Command-Line Switch: \fB-hpagecnt\fR .fi .IP Is used in combination with \fBposterize\fR to determine over how many pages the output should be distributed. This attribute specifies how many pages should be used horizontaly. Any change to this attribute will automatically update the "stamp". Defaults to 1. .LP .nf Name: \fBorient\fR Class: \fBOrient\fR Command-Line Switch: \fB-orient\fR .fi .IP Determines the orientation of the output to the printer (or file). It can take the value "portrait" or "landscape" (default). Changes to this attribute will be reflected immediately in the "stamp". Defaults to "landscape" but will be changed automaticaly to the value deemed appropiate for the current canvas. Setting this attribute when the canvasprintbox is first constructed (instead of using the "configure" method) will turn off the auto adjustment of this attribute. .LP .nf Name: \fBoutput\fR Class: \fBOutput\fR Command-Line Switch: \fB-output\fR .fi .IP Specifies where the postscript output should go: to the printer or to a file. Can take on the values "printer" or "file". The corresponding entry-widget will reflect the contents of either the \fBprintcmd\fR attribute or the \fBfilename\fR attribute. Defaults to "printer". .LP .nf Name: \fBpageSize\fR Class: \fBPageSize\fR Command-Line Switch: \fB-pagesize\fR .fi .IP The pagesize the printer supports. Changes to this attribute will be reflected immediately in the "stamp". Defaults to "a4". .LP .nf Name: \fBposterize\fR Class: \fBPosterize\fR Command-Line Switch: \fB-posterize\fR .fi .IP Indicates if posterizing is turned on or not. Posterizing the output means that it is possible to distribute the output over more than one page. This way it is possible to print a canvas/region which is larger than the specified pagesize without stretching. If used in combination with stretching it can be used to "blow up" the contents of a canvas to as large as size as you want (See attributes: hpagecnt and vpagecnt). Any change to this attribute will automatically update the "stamp". Defaults to 0. .LP .nf Name: \fBprintCmd\fR Class: \fBPrintCmd\fR Command-Line Switch: \fB-printcmd\fR .fi .IP The command to execute when printing the postscript output. The command will get the postscript directed to its standard input (Only when output is set to "printer"). Defaults to "lpr". .LP .nf Name: \fBprintRegion\fR Class: \fBPrintRegion\fR Command-Line Switch: \fB-printregion\fR .fi .IP A list of four coordinates specifying which part of the canvas to print. An empty list means that the canvas' entire \fBscrollregion\fR should be printed. Any change to this attribute will automatically update the "stamp". Defaults to an empty list. .LP .nf Name: \fBstretch\fR Class: \fBStretch\fR Command-Line Switch: \fB-stretch\fR .fi .IP Determines if the output should be stretched to fill the page (as defined by the attribute pagesize) as large as possible. The aspect-ratio of the output will be retained and the output will never fall outside of the boundaries of the page. Defaults to 0 but will be changed automaticaly to the value deemed appropiate for the current canvas. Setting this attribute when the canvasprintbox is first constructed (instead of using the "configure" method) will turn off the auto adjustment of this attribute. .LP .nf Name: \fBvPageCnt\fR Class: \fBPageCnt\fR Command-Line Switch: \fB-vpagecnt\fR .fi .IP Is used in combination with "posterize" to determine over how many pages the output should be distributed. This attribute specifies how many pages should be used verticaly. Any change to this attribute will automatically update the "stamp". Defaults to 1. .LP .BE .SH DESCRIPTION .PP Implements a print box for printing the contents of a canvas widget to a printer or a file. It is possible to specify page orientation, the number of pages to print the image on and if the output should be stretched to fit the page. Options exist to control the appearance and actions of the widget. .SH "METHODS" .PP The \fBiwidgets::canvasprintbox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for canvasprintbox widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::canvasprintbox\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::canvasprintbox\fR command. .TP \fIpathName\fR \fBgetoutput\fR Returns the value of the \fBprintercmd\fR or \fBfilename\fR option depending on the current setting of \fBoutput\fR. .TP \fIpathName\fR \fBprint\fR Perfrom the actual printing of the canvas using the current settings of all the attributes. Returns a boolean indicating wether the printing was successful or not. .TP \fIpathName\fR \fBrefresh\fR Retrieves the current value for all edit fields and updates the stamp accordingly. Is useful for Apply-buttons. .TP \fIpathName\fR \fBsetcanvas\fR \fIcanvas\fR This is used to set the \fIcanvas\fR that has to be printed. A stamp-sized copy will automatically be drawn to show how the output would look with the current settings. .TP \fIpathName \fBstop\fR Stops the drawing of the "stamp". I'm currently unable to detect when a Canvasprintbox gets destroyed or withdrawn. It's therefore advised that you perform a stop before you do something like that. .SH "COMPONENTS" .LP .nf Name: \fBprtflentry\fR Class: \fBEntry\fR .fi .IP The prtflentry component is the entry field for user input of the \fBfilename\fR or \fBprinter\fR command (depending on the value of \fBoutput\fR). .LP .nf Name: \fBhpcnt\fR Class: \fBEntry\fR .fi .IP The hpcnt component is the entry field for user input of the number of pages to use horizontaly when \fBposterize\fR is turned on. .fi .nf Name: \fBvpcnt\fR Class: \fBEntry\fR .fi .IP The vpcnt component is the entry field for user input of the number of pages to use verticaly when \fBposterize\fR is turned on. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::canvasprintbox .fsb -orient landscape -stretch 1 pack .fsb -padx 10 -pady 10 -fill both -expand yes .DE .SH AUTHOR Tako Schotanus .LP Tako.Schotanus@bouw.tno.nl .SH KEYWORDS canvasprintbox, widget ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/fileselectiondialog.n������������������������������������������������������������0000644�0036047�0045461�00000013467�07340742623�016702� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) fileselectiondialog.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::fileselectiondialog iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::fileselectiondialog \- Create and manipulate a file selection dialog widget .SH SYNOPSIS \fBiwidgets::fileselectiondialog\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell <- iwidgets::Dialogshell <- iwidgets::Dialog <- iwidgets::Fileselectiondialog .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "entryfield" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBchildSitePos\fR \fBdirectory\fR \fBdirsLabel\fR \fBdirSearchCommand\fR \fBdirsOn\fR \fBfilesLabel\fR \fBfilesLabelOn\fR \fBfileSearchCommand\fR \fBfilesOn\fR \fBfileType\fR \fBfilterLabel\fR \fBfilterOn\fR \fBinvalid\fR \fBmask\fR \fBnoMatchString\fR \fBselectionLabel\fR \fBselectionOn\fR .fi .LP See the "fileselectionbox" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "scrolledlistbox" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget class manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBbuttonBoxPadX\fR \fBbuttonBoxPadY\fR \fBbuttonBoxPos\fR \fBpadX\fR \fBpadY\fR \fBseparator\fR \fBthickness\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBheight\fR \fBmaster\fR \fBmodality\fR \fBwidth\fR .fi .LP See the "shell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" widget manual entry for details on the above inherited options. .BE .SH DESCRIPTION .PP The \fBiwidgets::fileselectiondialog\fR command creates a file selection dialog similar to the OSF/Motif standard composite widget. The fileselectiondialog is derived from the Dialog class and is composed of a FileSelectionBox with attributes set to manipulate the dialog buttons. .SH "METHODS" .PP The \fBiwidgets::fileselectiondialog\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for fileselectiondialog widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBget\fR \fBchildsite\fR \fBfilter\fR .fi .LP See the "fileselectionbox" class manual entry for details on the associated methods. .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBadd\fR \fBbuttonconfigure\fR \fBdefault\fR \fBhide\fR \fBinsert\fR \fBinvoke\fR \fBshow\fR .fi .LP See the "buttonbox" widget manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBdeactivate\fR .fi .LP See the "shell" widget manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::fileselectiondialog\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::fileselectiondialog\fR command. .SH "COMPONENTS" .LP .nf Name: \fBfsb\fR Class: \fBFileselectionbox\fR .fi .IP The fsb component is the file selection box for the file selection dialog. See the "fileselectionbox" widget manual entry for details on the fsb component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 # # Non-modal example # proc okCallback {} { puts "You selected [.nmfsd get]" .nmfsd deactivate } iwidgets::fileselectiondialog .nmfsd -title Non-Modal .nmfsd buttonconfigure OK -command okCallback .nmfsd activate # # Modal example # iwidgets::fileselectiondialog .mfsd -modality application .mfsd center if {[.mfsd activate]} { puts "You selected [.mfsd get]" } else { puts "You cancelled the dialog" } .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS fileselectiondialog, fileselectionbox, dialog, dialogshell, shell, widget ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/hyperhelp.n����������������������������������������������������������������������0000644�0036047�0045461�00000014346�07476742024�014677� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1996 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) Hyperhelp.n '\" .so man.macros .HS iwidgets::hyperhelp iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::hyperhelp \- Create and manipulate a hyperhelp widget .SH SYNOPSIS \fBiwidgets::hyperhelp\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell <- iwidgets::Hyperhelp .SH "STANDARD OPTIONS" .LP .nf .ta 5c 10c \fBactiveBackground\fR \fBbackground\fR \fBborderWidth\fR \fBclosecmd\fR \fBcursor\fR \fBexportSelection\fR \fBforeground\fR \fBhighlightColor\fR \fBhighlightThickness\fR \fBinsertBackground\fR \fBinsertBorderWidth \fBinsertOffTime\fR \fBinsertOnTime\fR \fBinsertWidth\fR \fBpadX\fR \fBpadY\fR \fBrelief\fR \fBrepeatDelay\fR \fBrepeatInterval\fR \fBselectBackground\fR \fBselectBorderWidth\fR \fBselectForeground\fR \fBsetGrid\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBhscrollmode\fR \fBvscrollmode\fR \fBtextbackground\fR \fBfontname\fR \fBfontsize\fR \fBfixedfont\fR \fBlink\fR \fBlinkhighlight\fR \fBwidth\fR \fBheight\fR \fBstate\fR \fBwrap\fR \fBunknownimage\fR .fi .LP See the "scrolledhtml" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBmodality\fR \fBtitle\fR .fi .LP See the "shell" manual entry for details on the above inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBtopics\fR Class: \fBTopics\fR Command-Line Switch: \fB-topics\fR .fi .IP Specifies a list of help topics in the form {?\fItopic\fR? ... }. \fITopic\fR may either be a topic name, in which case the document associated with the topic should be in the file \fBhelpdir\fR/\fItopic\fR.html, or it may be of the form {\fIname\fR \fIfile\fR}. In the latter case, \fIname\fR is displayed in the topic menu, and selecting the name loads \fIfile\fR. If file has a relative path, it is assumed to be relative to helpdir. .LP .nf Name: \fBhelpdir\fR Class: \fBDirectory\fR Command-Line Switch: \fB-helpdir\fR .fi .IP Specifies the directory where help files are located. .LP .nf Name: \fBcloseCmd\fR Class: \fBCloseCmd\fR Command-Line Switch: \fB-closecmd\fR .fi .IP Specifies the tcl command to be executed when the close option is selected from the topics menu. .LP .nf Name: \fBmaxHistory\fR Class: \fBMaxHistory\fR Command-Line Switch: \fB-maxhistory\fR .fi .IP Specifies the maximum number of entries stored in the history list .LP .nf Name: \fBbeforelink\fR Class: \fBBeforeLink\fR Command-Line Switch: \fB-beforelink\fR .fi .IP Specifies a command to be eval'ed before a new link is displayed. The path of the link to be displayed is appended before evaling the command. A suggested use might be to busy the widget while a new page is being displayed. .LP .nf Name: \fBafterlink\fR Class: \fBAfterLink\fR Command-Line Switch: \fB-afterlink\fR .fi .IP Specifies a command to be eval'ed after a new link is completely displayed. The path of the link that was displayed is appended before evaling the command. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::hyperhelp\fR command creates a shell window with a pulldown menu showing a list of topics. The topics are displayed by importing a HTML formatted file named \fBhelpdir\fR/\fItopic\fR.html. For a list of supported HTML tags, see \fBscrolledhtml(n)\fR. .SH "METHODS" .PP The \fBiwidgets::hyperhelp\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for dialog widgets: .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBchildsite\fR \fBdeactivate\fR .fi .LP See the "shell" manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::hyperhelp\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::hyperhelp\fR command. .TP \fIpathName\fR \fBshowtopic\fR \fItopic\fR Display html file \fBhelpdir\fR/\fItopic\fR.html. \fITopic\fR may optionally be of the form \fItopicname\fR#\fIanchorname\fR. In this form, either \fItopicname\fR or \fIanchorname\fR or both may be empty. If \fItopicname\fR is empty, the current topic is assumed. If \fIanchorname\fR is empty, the top of the document is assumed .TP \fIpathName\fR \fBfollowlink\fR \fIhref\fR Display html file \fIhref\fR. \fIHref\fR may be optionally be of the form \fIfilename\fR#\fIanchorname\fR. In this form, either \fIfilename\fR or \fIanchorname\fR or both may be empty. If \fIfilename\fR is empty, the current document is assumed. If \fIanchorname\fR is empty, the top of the document is assumed. .TP \fIpathName\fR \fBforward\fR Display html file one forward in history list, if applicable. .TP \fIpathName\fR \fBback\fR Display html file one back in history list, if applicable. .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::hyperhelp .h -topics { Intro Help } -helpdir ~/help .h showtopic Intro .DE .SH AUTHOR Kris Raney .SH KEYWORDS hyperhelp, html, help, shell, widget ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/labeledwidget.n������������������������������������������������������������������0000644�0036047�0045461�00000014754�07476742024�015476� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) labeledwidget.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::labeledwidget iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::labeledwidget \- Create and manipulate a labeled widget .SH SYNOPSIS \fBiwidgets::labeledwidget\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBdisabledForeground\fR Class: \fBDisabledForeground\fR Command-Line Switch: \fB-disabledforeground\fR .fi .IP Specifies the foreground to be used when the state is disabled. .LP .nf Name: \fBlabelBitmap\fR Class: \fBBitmap\fR Command-Line Switch: \fB-labelbitmap\fR .fi .IP Specifies a bitmap to display in the widget, in any of the forms acceptable to \fBTk_GetBitmap\fR. This option overrides the \fIlabeltext\fR option. .LP .nf Name: \fBlabelFont\fR Class: \fBFont\fR Command-Line Switch: \fB-labelfont\fR .fi .IP Specifies the font to be used for the label. .LP .nf Name: \fBlabelImage\fR Class: \fBImage\fR Command-Line Switch: \fB-labelimage\fR .fi .IP Specifies a image to be used as the label. The image may be any of the values created by the \fBimage create\fR command. This option overrides both the \fIlabelbitmap\fR and \fIlabeletext\fR options. .LP .nf Name: \fBlabelMargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-labelmargin\fR .fi .IP Specifies the distance between the childsite and label in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 2 pixel. .LP .nf Name: \fBlabelPos\fR Class: \fBPosition\fR Command-Line Switch: \fB-labelpos\fR .fi .IP Specifies the position of the label along the side of the childsite: \fBnw\fR, \fBn\fR, \fBne\fR, \fBsw\fR, \fBs\fR, \fBse\fR, \fBen\fR, \fBe\fR, \fBes\fR, \fBwn\fR, \fBw\fR, or \fBws\fR. The default is w. .LP .nf Name: \fBlabelText\fR Class: \fBText\fR Command-Line Switch: \fB-labeltext\fR .fi .IP Specifies the text of the label around the childsite. .LP .nf Name: \fBlabelVariable\fR Class: \fBVariable\fR Command-Line Switch: \fB-labelvariable\fR .fi .IP Specifies the text variable of the label around the childsite. .LP .nf Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Specifies one of two states for the label: \fBnormal\fR or \fBdisabled\fR. If the label is disabled then it is displayed in a disabled foreground color. The default is normal. .LP .nf Name: \fBsticky\fR Class: \fBSticky\fR Command-Line Switch: \fB-sticky\fR .fi .IP Specifies the "sticky-ness" of the childsite. The default value is nsew, which is the the same behavior of the labeledwidget before this option was added. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::labeledwidget\fR command creates a labeled widget which contains a label and child site. The child site is a frame which can filled with any widget via a derived class or though the use of the childsite method. This class was designed to be a general purpose base class for supporting the combination of label widget and a childsite. The options include the ability to position the label around the childsite widget, modify the font and margin, and control the display of the labels. .SH "METHODS" .PP The \fBiwidgets::labeledwidget\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for labeledwidget widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBchildsite\fR Return the path name of the child site. .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::labeledwidget\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::labeledwidget\fR command. .SH "STATIC METHODS" .TP \fBiwidgets::Labeledwidget::alignlabels\fR \fIwidget\fR ?\fIwidget ...\fR? The alignlabels procedure takes a list of widgets derived from the Labeledwidget class and uses the label margin to make each widget have the same total space for the combination of label and margin. The net effect is to left align the labels. Generally, this method is only useful with a label position of w, which is the default. .SH "COMPONENTS" .LP .nf Name: \fBlabel\fR Class: \fBlabel\fR .fi .IP The label component provides the label for the labeled widget. See the "label" widget manual entry for details on the label component item. .LP .nf Name: \fBlwchildsite\fR Class: \fBframe\fR .fi .IP The lwchildsite component is the user child site for the labeled widget. See the "frame" widget manual entry for details on the lwchildsite component item. .fi .SH EXAMPLE .IP The labeledwidget was primarily meant to be a base class. The ScrolledListBox and EntryField are good examples of derived classes of the labeledwidget class. In order to provide equal support for composite classes, the 'childsite' methods also exists. The following is an example of 'childsite' method usage. .LP .DS package require Iwidgets 4.0 iwidgets::labeledwidget .lw -labeltext "Canvas Widget" -labelpos s pack .lw -fill both -expand yes -padx 10 -pady 10 set cw [canvas [.lw childsite].c -relief raised -width 200 -height 200] pack $cw -padx 10 -pady 10 .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS labeledwidget, widget ��������������������iwidgets-4.1.1/doc/scrolledframe.n������������������������������������������������������������������0000644�0036047�0045461�00000015076�07476742024�015522� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) scrolledframe.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::scrolledframe iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::scrolledframe \- Create and manipulate scrolled frame widgets .SH SYNOPSIS \fBiwidgets::scrolledframe\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Scrolledwidget <- iwidgets::Scrolledframe .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor font foreground highlightColor highlightThickness relief selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" manual entry for details on the associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBLabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the scrolled frame widget in any of the forms acceptable to \fBTk_GetPixels\fR. The default height is 100 pixels. .LP .nf Name: \fBhscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-hscrollmode\fR .fi .IP Specifies the the display mode to be used for the horizontal scrollbar: \fBstatic\fR, \fBdynamic\fR, or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBsbWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-sbwidth\fR .fi .IP Specifies the width of the scrollbar in any of the forms acceptable to \fBTk_GetPixels\fR. The default width is 15 pixels. .LP .nf Name: \fBscrollMargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-scrollmargin\fR .fi .IP Specifies the distance between the frame and scrollbar in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBvscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-vscrollmode\fR .fi .IP Specifies the the display mode to be used for the vertical scrollbar: \fBstatic\fR, \fBdynamic\fR, or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the scrolled frame widget in any of the forms acceptable to \fBTk_GetPixels\fR. The default height is 100 pixels. .BE .SH DESCRIPTION .PP The \fBscrolledframe\fR combines the functionallity of scrolling with that of a typical frame widget to implement a clipable viewing area whose visible region may be modified with the scroll bars. This enables the contruction of visually larger areas than which could normally be displayed, containing a heterogenous mix of other widgets. Options exist which allow full control over which scrollbars are displayed and the method, i.e. statically or dynamically. The frame itself may be accessed by the \fBchildsite\fR method and then filled with other widget combinations. .SH "METHODS" .PP The \fBiwidgets::scrolledframe\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for scrolledframe widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBxview\fR \fByview\fR .fi .LP See the "canvas" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledframe\fR command. .TP \fIpathName \fBchildsite\fR Return the path name of the child site. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledframe\fR command. .TP \fIpathName \fBjustify \fIdirection\fR Justifies the frame contents via the scroll bars in one of four directions: \fBleft\fR, \fBright\fR, \fBtop\fR, or \fBbottom\fR. .SH "COMPONENTS" .LP .nf Name: \fBhorizsb\fR Class: \fBScrollbar\fR .fi .IP The horizsb component is the horizontal scroll bar. See the "ScrollBar" widget manual entry for details on the horizsb component item. .LP .nf Name: \fBvertsb\fR Class: \fBScrollbar\fR .fi .IP The vertsb component is the vertical scroll bar. See the "ScrollBar" widget manual entry for details on the vertsb component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::scrolledframe .sf -width 150 -height 180 \\ -labelon yes -labeltext scrolledframe set cs [.sf childsite] pack [button $cs.b1 -text Hello] -pady 10 pack [button $cs.b2 -text World] -pady 10 pack [button $cs.b3 -text "This is a test"] -pady 10 pack [button $cs.b4 -text "This is a really big button"] -pady 10 pack [button $cs.b5 -text "This is another really big button"] -pady 10 pack [button $cs.b6 -text "This is the last really big button"] -pady 10 pack .sf -expand yes -fill both -padx 10 -pady 10 .DE .SH AUTHOR .TP Mark L. Ulferts .TP Sue Yockey .SH KEYWORDS scrolledframe, frame, widget ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/hierarchy.n����������������������������������������������������������������������0000644�0036047�0045461�00000051405�07476742024�014652� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1997 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) hierarchy.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::hierarchy iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::hierarchy \- Create and manipulate a hierarchy widget .SH SYNOPSIS \fBiwidgets::hierarchy\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Scrolledwidget <- iwidgets::Hierarchy .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground activeForeground background borderWidth cursor disabledForeground foreground highlightColor highlightThickness relief selectBackground selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBspacing1\fR \fBspacing2\fR \fBspacing3\fR \fBtabs\fR .fi .LP See the "text" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBalwaysQuery\fR Class: \fBAlwaysQuery\fR Command-Line Switch: \fB-alwaysquery\fR .fi .IP Boolean flag which tells the hierarchy widget weather or not each refresh of the display should be via a new query using the command value of the -querycommand option or use the values previous found the last time the query was made. The default is no. .LP .nf Name: \fBclosedIcon\fR Class: \fBIcon\fR Command-Line Switch: \fB-closedicon\fR .fi .IP Specifies the name of an existing closed icon image to be used in the hierarchy before those nodes that are collapsed. Should one not be provided, then a folder icon will be generated, pixmap if possible, bitmap otherwise. .LP .nf Name: \fBdblClickCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-dblclickcommand\fR .fi .IP Specifies a command to be executed upon user double clicking via mouse button one of the text label of an entry. If this command contains "%n", it is replaced with the name of the selected node. Should it contain "%s" then a boolean indicator of the node's current selection status is substituted. .LP .nf Name: \fBexpanded\fR Class: \fBExpanded\fR Command-Line Switch: \fB-expanded\fR .fi .IP When true, the hierarchy will be completely expanded when it is first displayed. A fresh display can be triggered by resetting the -querycommand option. The default is false. .LP .nf Name: \fBfilter\fR Class: \fBFilter\fR Command-Line Switch: \fB-filter\fR .fi .IP When true only the branch nodes and selected items are displayed. This gives a compact view of important items. The default is false. .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the hierarchy as an entire unit. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. Any additional space needed to display the other components such as labels, margins, and scrollbars force the hierarchy to be compressed. A value of zero along with the same value for the width causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default height is zero. .LP .nf Name: \fBiconCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-iconcommand\fR .fi .IP Specifies a command to be executed upon user selection via mouse button one of any additional icons given in the values returned by the command associated with the -querycommand option. If this command contains "%n", it is replaced with the name of the node the icon belongs to. Should it contain "%i" then the icon name is substituted. .LP .nf Name: \fBiconDblCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-icondblcommand\fR .fi .IP Specifies a command to be executed upon user double clicking via mouse button one of the icon of an entry. If this command contains "%n", it is replaced with the name of the node the icon belongs to. Should it contain "%i" then the icon name is substituted. .LP .nf Name: \fBimageCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-imagecommand\fR .fi .IP Specifies a command to be executed upon user selecting an image of an entry. If this command contains "%n", it is replaced with the name of the selected node. Should it contain "%s" then a boolean indicator of the node's current selection status is substituted. .LP .nf Name: \fBimageDblCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-imagedblcommand\fR .fi .IP Specifies a command to be executed upon user double clicking via mouse button one of the image of an entry. If this command contains "%n", it is replaced with the name of the node the icon belongs to. Should it contain "%i" then the icon name is substituted. .LP .nf Name: \fBimageMenuLoadCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-imagemenuloadcommand\fR .fi .IP Specifies a command to be executed upon user selection via mouse button three, on the image or icon, that will dynamically load the itemMenu for the widget. .LP .nf Name: \fBmarkBackground\fR Class: \fBForeground\fR Command-Line Switch: \fB-markbackground\fR .fi .IP Specifies the background color to use when displaying marked nodes. .LP .nf Name: \fBmarkForeground\fR Class: \fBBackground\fR Command-Line Switch: \fB-markforeground\fR .fi .IP Specifies the foreground color to use when displaying marked nodes. .LP .nf Name: \fBmenuCursor\fR Class: \fBCursor\fR Command-Line Switch: \fB-menucursor\fR .fi .IP Specifies the mouse cursor to be used for the item and background menus. The value may have any of the forms accept able to Tk_GetCursor. .LP .nf Name: \fBnodeIcon\fR Class: \fBIcon\fR Command-Line Switch: \fB-nodeicon\fR .fi .IP Specifies the name of an existing node icon image to be used in the hierarchy before those nodes that are leafs. Should one not be provided, then a dog-eared page icon will be generated, pixmap if possible, bitmap otherwise. .LP .nf Name: \fBopenIcon\fR Class: \fBIcon\fR Command-Line Switch: \fB-openicon\fR .fi .IP Specifies the name of an existing open icon image to be used in the hierarchy before those nodes that are expanded. Should one not be provided, then an open folder icon will be generated, pixmap if possible, bitmap otherwise. .LP .nf Name: \fBqueryCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-querycommand\fR .fi .IP Specifies the command executed to query the contents of each node. If this command contains "%n", it is replaced with the name of the desired node. In its simpilest form it should return the children of the given node as a list which will be depicted in the display. Since the names of the children are used as tags in the underlying text widget, each child must be unique in the hierarchy. Due to the unique requirement, the nodes shall be reffered to as uids or uid in the singular sense. The format of returned list is .IP {uid [uid ...]} .IP where uid is a unique id and primary key for the hierarchy entry .IP Should the unique requirement pose a problem, the list returned can take on another more extended form which enables the association of text to be displayed with the uids. The uid must still be unique, but the text does not have to obey the unique rule. In addition, the format also allows the specification of additional tags to be used on the same entry in the hierarchy as the uid and additional icons to be displayed just before the node. The tags and icons are considered to be the property of the user in that the hierarchy widget will not depend on any of their values. The extended format is .IP {{uid [text [tags [icons]]]} {uid [text [tags [icons]]]} ...} .IP where uid is a unique id and primary key for the hierarchy entry text is the text to be displayed for this uid tags is a list of user tags to be applied to the entry icons is a list of icons to be displayed in front of the text .IP The hierarchy widget does a look ahead from each node to determine if the node has a children. This can be cost some performace with large hierarchies. User's can avoid this by providing a hint in the user tags. A tag of "leaf" or "branch" tells the hierarchy widget the information it needs to know thereby avoiding the look ahead operation. .LP .nf Name: \fBhscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-hscrollmode\fR .fi .IP Specifies the the display mode to be used for the horizontal scrollbar: \fBstatic, dynamic,\fR or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBsbWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-sbwidth\fR .fi .IP Specifies the width of the scrollbar in any of the forms acceptable to \fBTk_GetPixels\fR. .LP .nf Name: \fBscrollMargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-scrollmargin\fR .fi .IP Specifies the distance between the text portion of the hierarchy and the scrollbars in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBselectCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-selectcommand\fR .fi .IP Specifies a Tcl command to be evaluated when you select a node in the hierarchy via left mouse click. If "%n" is included in the command, it is substituted with the node name. Similarly, "%s" is substituted with the node's current selection status: 1 for selected, 0 otherwise. .LP Name: \fBtextBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-textbackground\fR .fi .IP Specifies the background color for the text portion of the hierarchy in any of the forms acceptable to \fBTk_GetColor\fR. .LP .nf Name: \fBtextFont\fR Class: \fBFont\fR Command-Line Switch: \fB-textfont\fR .fi .IP Specifies the font to be used in the text portion of the hierarchy. .LP .nf Name: \fBtextMenuLoadCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-textmenuloadcommand\fR .fi .IP Specifies a command to be executed upon user selection via mouse button three, that will dynamically load the itemMenu for the widget. .LP .nf Name: \fBvisibleitems\fR Class: \fBVisibleItems\fR Command-Line Switch: \fB-visibleitems\fR .fi .IP Specifies the widthxheight in characters and lines for the hierarchy. This option is only administered if the width and height options are both set to zero, otherwise they take precedence. The default value is 80x24. With the visibleitems option engaged, geometry constraints are maintained only on the text portion of the hierarchy. The size of the other components such as labels, margins, and scroll bars, are additive and independent, effecting the overall size of the hierarchy. In contrast, should the width and height options have non zero values, they are applied to the hierarchy as a whole. The hierarchy is compressed or expanded to maintain the geometry constraints. .LP .nf Name: \fBvscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-vscrollmode\fR .fi .IP Specifies the the display mode to be used for the vertical scrollbar: \fBstatic, dynamic,\fR or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the hierarchy as an entire unit. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. Any additional space needed to display the other components such as labels, margins, and scrollbars force the text portion of the hierarchy to be compressed. A value of zero along with the same value for the height causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default width is zero. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::hierarchy\fR command creates a hierarchical data view widget. It allows the graphical management of a a list of nodes that can be expanded or collapsed. Individual nodes can be highlighted. Clicking with the right mouse button on any item brings up a special item menu. Clicking on the background area brings up a different popup menu. Options exist to provide user control over the loading of the nodes and actions associated with node selection. Since the hierarchy is based on the scrolledtext widget, it includes options to control the method in which the scrollbars are displayed, i.e. statically or dynamically. Options also exist for adding a label to the hierarchy and controlling its position. .SH "METHODS" .PP The \fBiwidgets::hierarchy\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for hierarchy widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBbbox\fR \fBcompare\fR \fBdebug\fR \fBdelete\fR \fBdlineinfo\fR \fBdump\fR \fBget\fR \fBindex\fR \fBinsert\fR \fBscan\fR \fBsearch\fR \fBsee\fR \fBtag\fR \fBwindow\fR \fBxview\fR \fByview\fR .fi .LP See the "text" manual entry for details on the standard methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::hierarchy\fR command. .TP \fIpathName \fBclear\fR Removes all items from the hierarchy display including all tags and icons. The display will remain empty until the -filter or -querycommand options are set. .TP \fIpathName \fBcollapse\fR \fIuid\fR Collapses the hierarchy beneath the node with the specified unique id by one level. Since this can take a moment for large hierarchies, the cursor will be changed to a watch during the collapse. Also, if any of the nodes beneath the node being collapsed are selected, their status is changed to unselected. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::hierarchy\fR command. .TP \fIpathName \fBcurrent\fR Returns the tags for the node that was most recently selected by the right mouse button when the item menu was posted. Usually used by the code in the item menu to figure out what item is being manipulated. .TP \fIpathName \fBdraw\fR ?\fIwhen\fR? Performs a complete redraw of the entire hierarchy. When may be either -now or -eventually where the latter means the draw can be performed after idle. .TP \fIpathName \fBexpand\fR \fIuid\fR Expands the hierarchy beneath the node with the specified unique id by one level. Since this can take a moment for large hierarchies, the cursor will be changed to a watch during the expansion. .TP \fIpathName \fBexpanded\fR \fIuid\fR Returns the current state of expansion for the node with the specified unique id. .TP \fIpathName \fBexpState\fR Returns a list of all expanded nodes in the tree. .TP \fIpathName \fBmark\fR \fIoption ?arg arg ...?\fR This command is used to manipulate marks which is quite similar to selection, adding a secondary means of hilighting an item in the hierarchy. The exact behavior of the command depends on the \fIoption\fR argument that follows the \fBmark\fR argument. The following forms of the command are currently supported: .RS .TP \fIpathName \fBmark clear\fR Clears all the currently marked nodes in the hierarchy. .TP \fIpathName \fBmark add \fIuid \fR?\fIuid uid ...\fR? Marks the nodes with the specified uids in the hierarchy using the \fB-markbackground\fR and \fB-markforeground\fR options and without affecting the mark state of any other nodes that were already marked. .TP \fIpathName \fBmark remove \fIuid \fR?\fIuid uid ...\fR? Unmarks the nodes with the specified uids in the hierarchy without affecting the mark state of any other nodes that were already marked. .TP \fIpathName \fBmark get\fR Returns a list of the unique ids that are currently marked. .RE .TP \fIpathName \fBrefresh\fR \fIuid\fR Performs a redraw of a specific node that has the given uid. If the node is not currently visible or in other words already drawn on the text, then no action is taken. .TP \fIpathName \fBprune\fR \fIuid\fR Removes the node specified by the given uid from the hierarchy. Should the node have children, then all of its children will be removed as well. .TP \fIpathName \fBselection\fR \fIoption \fR?\fIarg arg ...\fR? This command is used to manipulate the selection of nodes in the hierarchy. The exact behavior of the command depends on the \fIoption\fR argument that follows the \fBselection\fR argument. The following forms of the command are currently supported: .RS .TP \fIpathName \fBselection clear\fR Clears all the currently selected nodes in the hierarchy. .TP \fIpathName \fBselection add \fIuid \fR?\fIuid uid ...\fR? Selects the nodes with the specified uids in the hierarchy using the \fB-selectionbackground\fR and \fB-selectionforeground\fR options and without affecting the selection state of any other nodes that were already selected. .TP \fIpathName \fBselection remove \fIuid \fR?\fIuid uid ...\fR? Deselects the nodes with the specified uids in the hierarchy without affecting the selection state of any other nodes that were already selected. .TP \fIpathName \fBselection get\fR Returns a list of the unique ids that are currently selected. .RE A nodes selection status is also dependent on it being visible. If a node is selected and its parent is then collapsed making the selected node not visible, then its selection status is changed to unselected. .TP \fIpathName \fBtoggle\fR \fIuid\fR Toggles the hierarchy beneath the node with the specified unique id. If the hierarchy is currently expanded, then it is collapsed, and vice-versa. .SH "COMPONENTS" .LP .nf Name: \fBlist\fR Class: \fBText\fR .fi .IP The list component is the text widget in which the hierarchy is displayed. See the "text" widget manual entry for details on the text component item. .LP .nf Name: \fBbgMenu\fR Class: \fBMenu\fR .fi .IP The bgMenu component is the popup menu which is displayed upon pressing the right mouse button in the background, i.e. not over a specific node. Menu items can be added along with their commands via the component command. See the "menu" widget manual entry for details on the bgMenu component item. .LP .nf Name: \fBhorizsb\fR Class: \fBScrollbar\fR .fi .IP The horizsb component is the horizontal scroll bar. See the "scrollbar" widget manual entry for details on the horizsb component item. .LP .nf Name: \fBitemMenu\fR Class: \fBMenu\fR .fi .IP The itemMenu component is the popup menu which is displayed upon selection of a hierarchy node with the right mouse button. Menu items can be added along with their commands via the component command. See the "menu" widget manual entry for details on the itemMenu component item. .LP .nf Name: \fBvertsb\fR Class: \fBScrollbar\fR .fi .IP The vertsb component is the vertical scroll bar. See the "scrollbar" widget manual entry for details on the vertsb component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 proc get_files {file} { global env if {$file == ""} { set dir $env(HOME) } else { set dir $file } if {[catch {cd $dir}] != 0} { return "" } set rlist "" foreach file [lsort [glob -nocomplain *]] { lappend rlist [list [file join $dir $file] $file] } return $rlist } iwidgets::hierarchy .h -querycommand "get_files %n" -visibleitems 30x15 \ -labeltext $env(HOME) pack .h -side left -expand yes -fill both .DE .SH AUTHOR Mark L. Ulferts .DE Michael J. McLennan .SH KEYWORDS hierarchy, text, widget �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/extfileselectionbox.n������������������������������������������������������������0000644�0036047�0045461�00000024261�07476742024�016753� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) extfileselectionbox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::extfileselectionbox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::extfileselectionbox \- Create and manipulate a file selection box widget .SH SYNOPSIS \fBiwidgets::extfileselectionbox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Extfileselectionbox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBpopupCursor\fR \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "combobox" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBsashCursor\fR .fi .LP See the "panedwindow" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget class manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "scrolledlistbox" widget manual entry for details on the above associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBautomount\fR Class: \fBAutomount\fR Command-Line Switch: \fB-automount\fR .fi .IP Specifies a list of directory prefixes to ignore. Typically, this option would be used as follows: -automount {export tmp_mnt} .LP .nf Name: \fBchildSitePos\fR Class: \fBPosition\fR Command-Line Switch: \fB-childsitepos\fR .fi .IP Specifies the position of the child site in the extended fileselection box: \fBn\fR, \fBs\fR, \fBe\fR, \fBw\fR, \fBtop\fR, or \fBbottom\fR. The default is s. .LP .nf Name: \fBdirectory\fR Class: \fBDirectory\fR Command-Line Switch: \fB-directory\fR .fi .IP Specifies the initial default directory. The default is the present working directory. .LP .nf Name: \fBdirSearchCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-dirsearchcommand\fR .fi .IP Specifies a Tcl command to be executed to perform a directory search. The command will receive the current working directory and filter mask as arguments. The command should return a list of files which will be placed into the directory list. .LP .nf Name: \fBdirsLabel\fR Class: \fBText\fR Command-Line Switch: \fB-dirslabel\fR .fi .IP Specifies the text of the label for the directory list. The default is "Directories". .LP .nf Name: \fBdirsOn\fR Class: \fBDirsOn\fR Command-Line Switch: \fB-dirson\fR .fi .IP Specifies whether or not to display the directory list. The value may be given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBfileSearchCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-filesearchcommand\fR .fi .IP Specifies a Tcl command to be executed to perform a file search. The command will receive the current working directory and filter mask as arguments. The command should return a list of files which will be placed into the file list. .LP .nf Name: \fBfilesLabel\fR Class: \fBText\fR Command-Line Switch: \fB-fileslabel\fR .fi .IP Specifies the text of the label for the files list. The default is "Files". .LP .nf Name: \fBfilesOn\fR Class: \fBFilesOn\fR Command-Line Switch: \fB-fileson\fR .fi .IP Specifies whether or not to display the files list. The value may be given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBfileType\fR Class: \fBFileType\fR Command-Line Switch: \fB-filetype\fR .fi .IP Specify the type of files which may appear in the file list: \fBregular\fR, \fBdirectory\fR, or \fBany\fR. The default is regular. .LP .nf Name: \fBfilterCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-filtercommand\fR .fi .IP Specifies a Tcl command to be executed upon hitting the Return key in the filter combobox widget. .LP .nf Name: \fBfilterLabel\fR Class: \fBText\fR Command-Line Switch: \fB-filterlabel\fR .fi .IP Specifies the text of the label for the filter combobox. The default is "Filter". .LP .nf Name: \fBfilterOn\fR Class: \fBFilterOn\fR Command-Line Switch: \fB-filteron\fR .fi .IP Specifies whether or not to display the filter combobox. The value may be given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 300 pixels. .LP .nf Name: \fBinvalid\fR Class: \fBCommand\fR Command-Line Switch: \fB-invalid\fR .fi .IP Command to be executed should the filter contents be proven invalid. The default is {bell}. .LP .nf Name: \fBmask\fR Class: \fBMask\fR Command-Line Switch: \fB-mask\fR .fi .IP Specifies the initial file mask string. The default is "*". .LP .nf Name: \fBnoMatchString\fR Class: \fBNoMatchString\fR Command-Line Switch: \fB-nomatchstring\fR .fi .IP Specifies the string to be displayed in the files list should no files match the mask. The default is "". .LP .nf Name: \fBselectDirCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-selectdirommand\fR .fi .IP Specifies a Tcl command to be executed following selection of a directory in the directory list. .LP .nf Name: \fBselectFileCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-selectfileommand\fR .fi .IP Specifies a Tcl command to be executed following selection of a file in the files list. .LP .nf Name: \fBselectionCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-selectioncommand\fR .fi .IP Specifies a Tcl command to be executed upon hitting the Return key in the selection combobox widget. .LP .nf Name: \fBselectionLabel\fR Class: \fBText\fR Command-Line Switch: \fB-selectionlabel\fR .fi .IP Specifies the text of the label for the selection combobox. The default is "Selection". .LP .nf Name: \fBselectionOn\fR Class: \fBSelectionOn\fR Command-Line Switch: \fB-selectionon\fR .fi .IP Specifies whether or not to display the selection combobox. The value may be given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 350 pixels. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::extfileselectionbox\fR command creates an extended file selection box which is slightly different than the fileselectionbox widget. The differences are mostly cosmetic in that the listboxes are within a panedwindow and the entryfields for the filter and selection have been replaced by comboboxes. Other than that the interface is practically the same. .SH "METHODS" .PP The \fBiwidgets::extfileselectionbox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for extfileselectionbox widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::extfileselectionbox\fR command. .TP \fIpathName \fBchildsite\fR Returns the child site widget path name. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::extfileselectionbox\fR command. .TP \fIpathName \fBfilter\fR Update the current contents of the extended file selection box based on the current filter combobox value. .TP \fIpathName \fBget\fR Returns the current value of the selection combobox widget. .SH "COMPONENTS" .LP .nf Name: \fBdirs\fR Class: \fBScrolledlistbox\fR .fi .IP The dirs component is the directory list box for the extended fileselection box. See the "scrolledlistbox" widget manual entry for details on the dirs component item. .LP .nf Name: \fBfiles\fR Class: \fBScrolledlistbox\fR .fi .IP The files component is the file list box for the extended fileselection box. See the "scrolledlistbox" widget manual entry for details on the files component item. .LP .nf Name: \fBfilter\fR Class: \fBCombobox\fR .fi .IP The filter component is the field for user input of the filter value. See the "combobox" widget manual entry for details on the filter component item. .LP .nf Name: \fBselection\fR Class: \fBCombobox\fR .fi .IP The selection component is the field for user input of the currently selected file value. See the "combobox" widget manual entry for details on the selection component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::extfileselectionbox .fsb pack .fsb -padx 10 -pady 10 -fill both -expand yes .DE .SH AUTHOR(S) Mark L. Ulferts .DE Anthony Parent .SH KEYWORDS extfileselectionbox, widget �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/calendar.n�����������������������������������������������������������������������0000644�0036047�0045461�00000023503�07476742023�014442� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1997 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) calendar.n 1.0 97/04/30 16:04:44 '\" .so man.macros .HS iwidgets::calendar iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::calendar \- Create and manipulate a monthly calendar .SH SYNOPSIS \fBiwidgets::calendar\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::calendar .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBint\fR .fi .LP See the "datefield" manual entry for details on this option. Note that this option is needed when the calendar is used in conjunction with the dateentry widget. It is necessary for support of international date formats in versions of Tk < 8.4. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBbackwardImage\fR Class: \fBImage\fR Command-Line Switch: \fB-backwardimage\fR .fi .IP Specifies a image to be displayed on the backwards calendar button. This image must have been created previously with the \fBimage create\fR command. If none is specified, a default is provided. .LP .nf Name: \fBbuttonForeground\fR Class: \fBForeground\fR Command-Line Switch: \fB-buttonforeground\fR .fi .IP Specifies the foreground color of the forward and backward buttons in any of the forms acceptable to \fBTk_GetColor\fR. The default color is blue. .LP .nf Name: \fBcommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-command\fR .fi .IP Specifies a Tcl script to executed upon selection of a date in the calendar. If the command script contains any \fB%\fR characters, then the script will not be executed directly. Instead, a new script will be generated by replacing each \fB%\fR, and the character following it, with information from the calendar. The replacement depends on the character following the \fB%\fR, as defined in the list below. .TP \fB%d\fR Replaced with the date selected in the format mm/dd/yyyy. .LP .nf Name: \fBcurrentDateFont\fR Class: \fBFont\fR Command-Line Switch: \fB-currentdatefont\fR .fi .IP Specifies the font used for the current date text in any of the forms acceptable to \fBTk_GetFont\fR. .LP .nf Name: \fBdateFont\fR Class: \fBFont\fR Command-Line Switch: \fB-datefont\fR .fi .IP Specifies the font used for the days of the month text in any of the forms acceptable to \fBTk_GetFont\fR. .LP .nf Name: \fBdayFont\fR Class: \fBFont\fR Command-Line Switch: \fB-dayfont\fR .fi .IP Specifies the font used for the days of the week text in any of the forms acceptable to \fBTk_GetFont\fR. .LP .nf Name: \fBdays\fR Class: \fBdays\fR Command-Line Switch: \fB-days\fR .fi .IP Specifies a list of values to be used for the days of the week text to displayed above the days of the month. The default value is {Su Mo Tu We Th Fr Sa}. .LP .nf Name: \fBforewardImage\fR Class: \fBImage\fR Command-Line Switch: \fB-forewardimage\fR .fi .IP Specifies a image to be displayed on the forewards calendar button. This image must have been created previously with the \fBimage create\fR command. If none is specified, a default is provided. .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies a desired window height that the calendar widget should request from its geometry manager. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. The default height is 165 pixels. .LP .nf Name: \fBoutline\fR Class: \fBOutline\fR Command-Line Switch: \fB-outline\fR .fi .IP Specifies the outline color used to surround the days of the month text in any of the forms acceptable to \fBTk_GetColor\fR. The default is the same color as the background. .LP .nf Name: \fBselectColor\fR Class: \fBForeground\fR Command-Line Switch: \fB-selectcolor\fR .fi .IP Specifies the color of the ring displayed that distinguishes the currently selected date in any of the forms acceptable to \fBTk_GetColor\fR. The default is red. .LP .nf Name: \fBselectThickness\fR Class: \fBSelectThickness\fR Command-Line Switch: \fB-selectthickness\fR .fi .IP Specifies the thickness of the ring displayed that distinguishes the currently selected date. The default is 3 pixels. .LP .nf Name: \fBstartday\fR Class: \fBDay\fR Command-Line Switch: \fB-startday\fR .fi .IP Specifies the starting day for the week: \fBsunday\fR, \fBmonday\fR, \fBtuesday\fR, \fBwednesday\fR, \fBthursday\fR, \fBfriday\fR, or \fBsaturday\fR. The default is sunday. .LP .nf Name: \fBtitleFont\fR Class: \fBFont\fR Command-Line Switch: \fB-titlefont\fR .fi .IP Specifies the font used for the title text which consists of the month and year. The font may be given in any of the forms acceptable to \fBTk_GetFont\fR. .LP .nf Name: \fBweekdayBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-weekdaybackground\fR .fi .IP Specifies the background color for the weekdays which allows it to be visually distinguished from the weekend. The color may be given in any of the forms acceptable to \fBTk_GetColor\fR. The default is the same as the background. .LP .nf Name: \fBweekendBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-weekendbackground\fR .fi .IP Specifies the background color for the weekends which allows it to be visually distinguished from the weekdays. The color may be given in any of the forms acceptable to \fBTk_GetColor\fR. The default is the same as the background. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies a desired window width that the calendar widget should request from its geometry manager. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. The default width is 200 pixels. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::calendar\fR command creates a calendar widget for the selection of a date, displaying a single month at a time. Buttons exist on the top to change the month in effect turning the pages of a calendar. As a page is turned, the dates for the month are modified. Selection of a date visually marks that date. The selected value can be monitored via the -command option or just retrieved using the get command. .SH "METHODS" .PP The \fBiwidgets::calendar\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for calendar widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::calendar\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::calendar\fR command. .TP \fIpathName \fBget\fR ?\fBformat\fR? Returns the currently selected date in a format of string or as an integer clock value using the \fB-string\fR and \fB-clicks\fR format options respectively. The default is by string. Reference the clock command for more information on obtaining dates and their formats. .TP \fIpathName \fBselect\fR \fIdate\fR Changes the currently selected date to the value specified which must be in the form of a date string, an integer clock value or as the keyword "now". Reference the clock command for more information on obtaining dates and their formats. Note that selecting a date does not change the month being shown to that of the date given. This chore is left to the \fBshow\fR command. .TP \fIpathName \fBshow\fR \fIdate\fR Changes the currently displayed date to be that of the date argument which must be in the form of a date string, an integer clock value or as the keyword "now". Reference the clock command for more information on obtaining dates and their formats. .SH "COMPONENTS" .LP .nf Name: \fBforward\fR Class: \fBButton\fR .fi .IP The forward component provides the button on the upper right of the calendar that changes the month to be the next. See the "button" widget manual entry for details on the forward component item. .LP .nf Name: \fBpage\fR Class: \fBCanvas\fR .fi .IP The page component provides the canvas on which the title, days of the week, and days of the month appear. See the "canvas" widget manual entry for details on the page component item. .LP .nf Name: \fBbackward\fR Class: \fBButton\fR .fi .TP The backward component provides the button on the upper right of the calendar that changes the month to be the next. See the "button" widget manual entry for details on the backward component item. .SH EXAMPLE .DS package require Iwidgets 4.0 proc selectCmd {date} { puts $date } iwidgets::calendar .c -command {selectCmd %d} \\ -weekendbackground mistyrose \\ -weekdaybackground ghostwhite -outline black \\ -startday wednesday -days {We Th Fr Sa Su Mo Tu} pack .c .DE .SH AUTHOR Mark L. Ulferts .DE Michael J. McLennan .SH KEYWORDS calendar, widget ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/combobox.n�����������������������������������������������������������������������0000644�0036047�0045461�00000031365�07476742024�014507� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 John S. Sigler '\" Copyright (c) 1997 Mitch Gorman '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) Combobox.n '\" .so man.macros .HS iwidgets::combobox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::combobox \- Create and manipulate combination box widgets .SH SYNOPSIS \fBiwidgets::combobox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::LabeledWidget <- iwidgets::Entryfield <- iwidgets::Combobox .SH "STANDARD OPTIONS" .LP .ta 4c 8c 12c .nf \fB background borderWidth cursor justify exportSelection foreground highlightColor highlightThickness insertWidth insertBackground insertOffTime insertOnTime insertWidth insertBorderWidth relief selectForeground selectBackground selectBorderWidth textVariable width\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBhscrollmode\fR \fBtextBackground\fR \fBtextFont\fR \fBvscrollmode\fR .fi .LP See the "scrolledlistbox" manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBshow\fR .fi .LP See the "entry" manual entry for details on the above inherited option. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBchildSitePos\fR \fBcommand\fR \fBfixed\fR \fBfocusCommand\fR \fBinvalid\fR \fBtextBackground\fR \fBtextFont\fR \fBvalidate\fR .fi .LP See the "entryfield" class manual entry for details on the inherited options. .LP .nf .ta 4c 8c 12c \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBarrowRelief\fR Class: \fBRelief\fR Command-Line Switch: \fB-arrowrelief\fR .fi .IP Specifies the relief style to use for a dropdown Combobox's arrow button in a normal (not depressed) state. Acceptable values are \fBraised\fR, \fBsunken\fR, \fBflat\fR, \fBridge\fR, and \fBgroove\fR. Sunken is discouraged as this is the relief used to indicate a depressed state. This option has no effect on simple Comboboxes. The default is raised. .LP .nf Name: \fBcompletion\fR Class: \fBCompletion\fR Command-Line Switch: \fB-completion\fR .fi .IP Boolean given in any of the forms acceptable to \fBTcl_GetBoolean\fR which determines whether insertions into the entry field, whether from the keyboard or programmatically via the \fBinsert\fR method, are automatically completed with the first matching item from the listbox. The default is true. .LP .nf Name: \fBdropdown\fR Class: \fBDropdown\fR Command-Line Switch: \fB-dropdown\fR .fi .IP Boolean describing the Combobox layout style given in any of the forms acceptable to \fBTcl_GetBoolean\fR. If true, the Combobox will be a dropdown style widget which displays an entry field and an arrow button which when activated will pop up a scrollable list of items. If false, a simple Combobox style will be used which has an entry field and a scrollable list beneath it which is always visible. Both styles allow an optional label for the entry field area. The default is true. .LP .nf Name: \fBeditable\fR Class: \fBEditable\fR Command-Line Switch: \fB-editable\fR .fi .IP Boolean describing whether or not the text entry area is editable by the user. If true the user can add items to the combobox by entering text into the entry area and then pressing Return. If false, the list of items is non-editable and can only be changed by calling the insert or delete methods. (The value in the entry field can still be modified by selecting from the list.) Given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBgrab\fR Class: \fBGrab\fR Command-Line Switch: \fB-grab\fR .fi .IP This option sets the grab scope for the appearance of the listbox in drop-down comboboxes. It can be either global or local. The default is local. .LP .nf Name: \fBlistHeight\fR Class: \fBHeight\fR Command-Line Switch: \fB-listheight\fR .fi .IP Height of the listbox specified in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 150 pixels. .LP .nf Name: \fBmargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-margin\fR .fi .IP Specifies the width in pixels between the entry component and the arrow button for a dropdown Combobox given in any of the forms acceptable to \fBTk_GetPixels\fR. This option has no effect on a simple Combobox. The default is 1. .LP .nf Name: \fBpopupCursor\fR Class: \fBCursor\fR Command-Line Switch: \fB-popupcursor\fR .fi .IP Specifies the cursor to be used for dropdown style listboxes. The value may have any of the forms acceptable to \fBTk_GetCursor\fR. The default is arrow. .LP .nf Name: \fBselectionCommand\fR Class: \fBSelectionCommand\fR Command-Line Switch: \fB-selectioncommand\fR .fi .IP Specifies a Tcl command procedure which is called when an item in the listbox area is selected. The item will be selected in the list, the listbox will be removed if it is a dropdown Combobox, and the selected item's text will be inserted into the entry field before the -selectioncommand proc is called. The default is {}. .LP .nf Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Specifies the overall state of the Combobox megawidget. Can be either normal or disabled. If the Combobox is disabled, no text can be entered into the entry field, no selection can be made in the listbox, and the arrowBtn component is disabled. The default is normal. .LP .nf Name: \fBunique\fR Class: \fBUnique\fR Command-Line Switch: \fB-unique\fR .fi .IP Boolean describing whether or not duplicate items are allowed in the combobox list. If true, then duplicates are not allowed to be inserted. If false, a duplicate entry causes selection of the item. Given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .BE .SH DESCRIPTION .PP The \fBiwidgets::combobox\fR command creates an enhanced entry field widget with an optional associated label and a scrollable list. When an item is selected in the list area of a Combobox, its value is then displayed in the entry field text area. Functionally similar to an Optionmenu, the Combobox adds (optional) list scrolling and (optional) item editing and inserting capabilities. .PP There are two basic styles of Comboboxes (determined by the -dropdown option): dropdown and simple. The dropdown style adds an arrow button to the right of the entry field which when activated will pop up (and down) the scrolled listbox beneath the entry field. The simple (non-dropdown) Combobox permanently displays the listbox beneath the entry field and has no arrow button. Either style allows an optional entry field label. .SH "METHODS" .PP The \fBiwidgets::combobox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for Combobox widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBicursor\fR \fBscan\fR .fi .LP See the "entry" manual entries for details on the above associated methods. .LP .nf .ta 4c 8c 12c \fBcurselection\fR \fBindex\fR \fBsee\fR \fBsize\fR \fBxview\fR \fByview\fR .fi .LP See the "listbox" manual entries for details on the above associated methods. .LP .nf .ta 4c 8c 12c \fBgetcurselection\fR \fBjustify\fR \fBsort\fR .fi .LP See the "scrolledlistbox" manual entries for details on the above associated methods. .LP .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::combobox\fR command. .TP \fIpathName \fBclear\fR ?\fBcomponent\fR? Clears the contents from one or both components. Valid component values are \fBlist\fR, or \fBentry\fR. With no component specified, both are cleared. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::combobox\fR command. .TP \fIpathName \fBdelete \fIcomponent\fR \fIfirst\fR ?\fIlast\fR? Delete one or more elements from a given component, \fBlist\fR or \fBentry\fR. If a list item to be removed is currently selected (displayed in the entry field area), the entry field will be cleared. .TP \fIpathName \fBget ?\fIindex\fR? \fR With no arguments, returns the contents currently in the entry field area. With a single argument, returns the contents of the listbox item at the indicated index. .TP \fIpathName \fBinsert\fR \fIcomponent\fR \fIindex\fR \fIelement\fR ?\fIelement element ...\fR? Insert one or more new elements into the given component, \fBlist\fR or \fBentry\fR, just before the element given by \fIindex\fR. .TP \fIpathName \fBselection\fR \fIoption\fR \fIfirst\fR ?\fIlast\fR? Adjust the selection within the listbox component and updates the contents of the entry field component to the value of the selected item. See the "listbox" manual entry for more details on parameter options. .SH "COMPONENTS" .LP .nf Name: \fBentry\fR Class: \fBEntry\fR .fi .IP Text entry area where the current selection is displayed. If the Combobox is editable and its state is normal, the user can edit the contents of this item. .LP .nf Name: \fBlist\fR Class: \fBScrolledlistbox\fR .fi .IP Scrollable list which stores all the items which the user can select from. For dropdown Comboboxes, this component is hidden until the user pops it up by pressing on the arrow button to the right of the entry component. For simple Comboboxes this component is always visible just beneath the entry component. .SH "DEFAULT BINDINGS" .PP The Combobox generally has the same bindings as its primary component items - the Scrolledlistbox and Entryfield. However it also adds these: .PP [1] Button-1 mouse press on the arrow key of a dropdown Combobox causes the list to be popped up. If the combobox is non-editable, a Button-1 press on the entry field area will also pop up the list. .PP [2] Button-1 mouse press anywhere on the display removes a dropdown listbox which has been popped up, unless the keypress is upon one of the Combobox scrollbars which scrolls the list. If it is pressed upon an item in the list area, that item will be selected before the list is removed. .PP [3] Button-3 mouse press on the arrow key of a dropdown Combobox causes the next item to be selected. Shift-Button-3 causes the previous item to be selected. .PP [4] Escape keypress removes a dropdown list which has been popped up. .PP [5] The <space> and <Return> keystrokes select the current item. They also remove the popped up list for dropdown comboboxes. .PP [6] Up and Down arrow keypresses from the entry field and arrow button component cause the previous and next items in the listbox to be selected respectively. Ctl-P and Ctl-N are similarly mapped for emacs emulation. .PP [7] Entry field and arrow button component Shift-Up and Shift-Down arrow keys pop up and down the listbox of a dropdown Combobox. The arrow button component also maps <Return> and <space> similarly. .SH EXAMPLE .DS package require Iwidgets 4.0 proc selectCmd {} { puts stdout "[.cb2 getcurselection]" } # # Non-editable Dropdown Combobox # iwidgets::combobox .cb1 -labeltext Month: \\ -selectioncommand {puts "selected: [.cb1 getcurselection]"} \\ -editable false -listheight 185 -popupcursor hand1 .cb1 insert list end Jan Feb Mar Apr May June Jul Aug Sept Oct Nov Dec # # Editable Dropdown Combobox # iwidgets::combobox .cb2 -labeltext "Operating System:" -selectioncommand selectCmd .cb2 insert list end Linux HP-UX SunOS Solaris Irix .cb2 insert entry end L pack .cb1 -padx 10 -pady 10 -fill x pack .cb2 -padx 10 -pady 10 -fill x .DE .SH ORIGINAL AUTHOR John S. Sigler .SH CURRENT MAINTAINER Mitch Gorman (logain@erols.com) .SH KEYWORDS combobox, entryfield, scrolledlistbox, itk::Widget, entry, listbox, widget, iwidgets ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/radiobox.n�����������������������������������������������������������������������0000644�0036047�0045461�00000014124�07476742024�014500� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) radiobox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::radiobox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::radiobox \- Create and manipulate a radiobox widget .SH SYNOPSIS \fBiwidgets::radiobox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledframe <- iwidgets::Radiobox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBborderWidth\fR \fBcursor\fR \fBdisabledForeground\fR \fBforeground\fR \fBrelief\fR \fBselectColor\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR .fi .LP See the "labeledframe" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBcommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-command\fR .fi .IP Specifies a Tcl command procedure to be evaluated following a change in the current radio box selection. .LP .nf Name: \fBorient\fR Class: \fBOrient\fR Command-Line Switch: \fB-orient\fR Default Value: \fBvertical\fR .fi .IP Specifies the orientation of the radiobuttons within the radiobox. Valid values are either "horizontal" or "vertical". .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::radiobox\fR command creates a radio button box widget capable of adding, inserting, deleting, selecting, and configuring radiobuttons as well as obtaining the currently selected button. .SH "METHODS" .PP The \fBiwidgets::radiobox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP Many of the widget commands for the \fBradiobox\fR take as one argument an indicator of which radiobutton of the radiobox to operate on. These indicators are called \fIindexes\fR and allow reference and manipulation of radiobuttons. Radiobox indexes may be specified in any of the following forms: .TP 12 \fInumber\fR Specifies the radiobutton numerically, where 0 corresponds to the top radiobutton of the radiobox. .TP 12 \fBend\fR Indicates the last radiobutton of the radiobox. .TP 12 \fIpattern\fR If the index doesn't satisfy one of the above forms then this form is used. \fIPattern\fR is pattern-matched against the tag of each radiobutton in the radiobox, in order from top to bottom, until a matching entry is found. The rules of \fBTcl_StringMatch\fR are used. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBadd\fR \fItag\fR ?\fIoption value option value\fR? Adds a new radiobutton to the radiobuttond window on the bottom. The command takes additional options which are passed on to the radiobutton as construction arguments. These include the standard Tk radiobutton options. The tag is returned. .TP \fIpathName \fBbuttonconfigure\fR \fIindex\fR ?\fIoptions\fR? This command is similar to the \fBconfigure\fR command, except that it applies to the options for an individual radiobutton, whereas \fBconfigure\fRapplies to the options for the radiobox as a whole. \fIOptions\fR may have any of the values accepted by the \fBadd\fR widget command. If \fIoptions\fR are specified, options are modified as indicated in the command and the command returns an empty string. If no \fIoptions\fR are specified, returns a list describing the current options for entry \fIindex\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::radiobox\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::radiobox\fR command. .TP \fIpathName \fBdelete\fR \fIindex\fR Deletes a specified radiobutton given an \fIindex\fR. .TP \fIpathName \fBdeselect\fR \fIindex\fR Deselects a specified radiobutton given an \fIindex\fR. .TP \fIpathName \fBflash\fR \fIindex\fR Flashes a specified radiobutton given an \fIindex\fR. .TP \fIpathName \fBget\fR Returns the tag of the currently selected radiobutton. .TP \fIpathName \fBindex\fR \fIindex\fR Returns the numerical index corresponding to index. .TP \fIpathName \fBinsert \fIindex\fR \fItag\fR ?\fIoption value option value ...\fR? Same as the \fBadd\fR command except that it inserts the new radiobutton just before the one given by \fIindex\fR, instead of appending to the end of the radiobox. The \fIoption\fR, and \fIvalue\fR arguments have the same interpretation as for the \fBadd\fR widget command. .TP \fIpathName \fBselect\fR \fIindex\fR Selects a specified radiobutton given an \fIindex\fR. .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::radiobox .rb -labeltext Fonts .rb add times -text Times .rb add helvetica -text Helvetica .rb add courier -text Courier .rb add symbol -text Symbol .rb select courier pack .rb -padx 10 -pady 10 -fill both -expand yes .DE .SH AUTHOR Michael J. McLennan .DE Mark L. Ulferts .SH KEYWORDS radiobox, widget ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/disjointlistbox.n����������������������������������������������������������������0000644�0036047�0045461�00000021311�07476742024�016115� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) disjointlistbox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::disjointlistbox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::disjointlistbox \- Create and manipulate a disjointlistbox widget .SH SYNOPSIS \fBiwidgets::disjointlistbox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Disjointlistbox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground selectBorderWidth selectForeground activeForeground activeRelief background borderWidth buttonPlacement clientData cursor foreground highlightColor highlightThickness disabledForeground elementBorderWidth\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBlhsButtonLabel\fR \fBrhsButtonLabel\fR .fi .LP See the "button" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR \fBlhsLabelText\fR \fBrhsLabelText\fR .fi .LP See the "label" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget class manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR \fBlhsItems\fR \fBrhsItems\fR .fi .LP See the "scrolledlistbox" widget manual entry for details on the above associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBbuttonPlacement\fR Class: \fBButtonPlacement\fR Command-Line Switch: \fB-buttonplacement\fR .fi .IP Specifies the placement of the insertion and removal buttons relative to the scrolledlistbox widgets\fBn\fR, \fBbottom\fR, or \fBcenter\fR. The default is bottom. .LP .nf Name: \fBlhsLabelText\fR Class: \fBLabelText\fR Command-Line Switch: \fB-lhslabeltext\fR .fi .IP Specifies the text for the label of the lhs scrolledlistbox. The default is "Available". .LP .nf Name: \fBrhsLabelText\fR Class: \fBLabelText\fR Command-Line Switch: \fB-rhslabeltext\fR .fi .IP Specifies the text for the label of the rhs scrolledlistbox. The default is "Available". .LP .nf Name: \fBlhsButtonLabel\fR Class: \fBLabelText\fR Command-Line Switch: \fB-lhsbuttonlabel\fR .fi .IP Specifies the text for the button of the lhs scrolledlistbox. The default is "Insert >>". .LP .nf Name: \fBrhsButtonLabel\fR Class: \fBLabelText\fR Command-Line Switch: \fB-rhsbuttonlabel\fR .fi .IP Specifies the text for the button of the rhs scrolledlistbox. The default is "<< Remove". .LP .nf Name: \fBlhsSortOption\fR Class: \fBLhsSortOption\fR Command-Line Switch: \fB-lhssortoption\fR .fi .IP Specifies the sort function to be applied to the lhs scrolledlistbox after items are inserted. Accepts the same sort options as the scrolledlistbox sort method (Tcl's lsort command). If "none" is specified, the inserted items are appended to the end of the list, and no sorting is performed. The default is "increasing". .LP .nf Name: \fBrhsSortOption\fR Class: \fBRhsSortOption\fR Command-Line Switch: \fB-rhssortoption\fR .fi .IP Specifies the sort function to be applied to the rhs scrolledlistbox after items are inserted. Accepts the same sort options as the scrolledlistbox sort method (Tcl's lsort command). If "none" is specified, the inserted items are appended to the end of the list, and no sorting is performed. The default is "increasing". .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::disjointlistbox\fR command creates a disjoint pair of listboxs similar to the OSF/Motif "Book" printing dialog of the "FrameMaker" program. It is implementation constists of a two Scrolledlistboxs, 2 buttons, and 2 labels. The disjoint behavior of this widget exists between the interaction of the two Scrolledlistboxes with one another. That is, a given instance of a Disjointlistbox will never exist, without the aid of a hack magician, which has Scrolledlistbox widgets with items in common. That means the relationship between the two is maintained similar to that of disjoint sets. Users may transfer items between the two Listbox widgets using the the two buttons. Options exists which include the ability to configure the "items" displayed by the 2 Scrolledlistboxes and to control the placement of the insertion and removal buttons. .SH "METHODS" .PP The \fBiwidgets::disjointlistbox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for disjointlistbox widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::disjointlistbox\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::disjointlistbox\fR command. .TP \fIpathName \fBsetlhs\fR Set the current contents of the left-most Scrolledlistbox with the input list of items. Removes all (if any) items from the right-most Scrolledlistbox which exist in the input list option to maintain the disjoint property between the two .TP \fIpathName \fBsetrhs\fR Set the current contents of the right-most Scrolledlistbox with the input list of items. Removes all (if any) items from the left-most Scrolledlistbox which exist in the input list option to maintain the disjoint property between the two .TP \fIpathName \fBgetlhs\fR Returns the current contents of the left-most Scrolledlistbox .TP \fIpathName \fBgetrhs\fR Returns the current contents of the right-most Scrolledlistbox .TP \fIpathName \fBinsertlhs\fR Add the input list of items to the current contents of the left-most Scrolledlistbox. Removes all (if any) items from the right-most Scrolledlistbox which exist in the input list option to maintain the disjoint property between the two .TP \fIpathName \fBinsertrhs\fR Add the input list of items to the current contents of the right-most Scrolledlistbox. Removes all (if any) items from the left-most Scrolledlistbox which exist in the input list option to maintain the disjoint property between the two. .TP .SH "COMPONENTS" .LP .nf Name: \fBlhs\fR Class: \fBScrolledlistbox\fR .fi .IP The lhs component is the scrolledlistbox for the rhs button. See the "scrolledlistbox" widget manual entry for details on the lhs component item. .LP .nf Name: \fBrhs\fR Class: \fBScrolledlistbox\fR .fi .IP The rhs component is the scrolledlistbox for the rhs button. See the "scrolledlistbox" widget manual entry for details on the rhs component item. .LP .nf Name: \fBlhsbutton\fR Class: \fButton\fR .fi .IP The lhsbutton component is the button for users to remove selected items from the lhs Scrolledlistbox. See the "button" widget manual entry for details on the lhs button component. .LP .nf Name: \fBrhsbutton\fR Class: \fBButton\fR .fi .IP The rhsbutton component is the button for users to remove selected items from the rhs Scrolledlistbox. See the "button" widget manual entry for details on the rhs button component. .LP .nf Name: \fBlhsCount\fR Class: \fBLabel\fR .fi .IP The lhsCount component is the label for displaying a count of the current items in the Scrolledlistbox. See the "Label" widget manual entry for details on the lhsCount label component. .LP .nf Name: \fBrhsCount\fR Class: \fBLabel\fR .fi .IP The rhsCount component is the label for displaying a count of the current items in the Scrolledlistbox. See the "Label" widget manual entry for details on the rhsCount label component. .fi .IP .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::disjointlistbox .dlb pack .dlb -padx 10 -pady 10 -fill both -expand yes .DE .SH AUTHOR(S) John A. Tucker .DE Anthony Parent .SH KEYWORDS disjointlistbox, widget �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/scrolledlistbox.n����������������������������������������������������������������0000644�0036047�0045461�00000026353�07476742024�016114� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) scrolledlistbox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::scrolledlistbox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::scrolledlistbox \- Create and manipulate scrolled listbox widgets .SH SYNOPSIS \fBiwidgets::scrolledlistbox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Scrolledwidget <- iwidgets::Scrolledlistbox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor exportSelection foreground highlightColor highlightThickness relief selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBselectMode\fR \fBlistvariable\fR .fi .LP See the "listbox" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderwidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBdblClickCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-dblclickcommand\fR .fi .IP Specifies a Tcl command procedure which is called when an item is double clicked. Typically this occurs when mouse button 1 is double clicked over an item. Selection policy does not matter. .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the scrolled list box as an entire unit. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. Any additional space needed to display the other components such as labels, margins, and scrollbars force the listbox to be compressed. A value of zero along with the same value for the width causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default height is zero. .LP .nf Name: \fBhscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-hscrollmode\fR .fi .IP Specifies the the display mode to be used for the horizontal scrollbar: \fBstatic, dynamic,\fR or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBsbWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-sbwidth\fR .fi .IP Specifies the width of the scrollbar in any of the forms acceptable to \fBTk_GetPixels\fR. The default width is 15 pixels.. .LP .nf Name: \fBscrollMargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-scrollmargin\fR .fi .IP Specifies the distance between the listbox and scrollbar in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBselectionCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-selectioncommand\fR .fi .IP Specifies a Tcl command procedure which is called when an item is selected. Selection policy does not matter. .LP .nf Name: \fBstate\fR Class: \fBState\fR Command-Line Switch: \fB-state\fR .fi .IP Specifies one of two states for the listbox: \fBnormal\fR or \fBdisabled\fR. If the listbox is disabled then selection is ignored. The default is normal. .LP .nf Name: \fBtextBackground\fR Class: \fBBackground\fR Command-Line Switch \fB-textbackground\fR .fi .IP Specifies the background color for the listbox. This allows the background within the listbox to be different from the normal background color. .LP .nf Name: \fBtextFont\fR Class: \fBFont\fR Command-Line Switch: \fB-textfont\fR .fi .IP Specifies the font to be used for text in the listbox. This allows for the font associated with text internal to the scrolled listbox to be different than the font for labels. .LP .nf Name: \fBvisibleitems\fR Class: \fBVisibleItems\fR Command-Line Switch: \fB-visibleitems\fR .fi .IP Specifies the widthxheight in characters and lines for the listbox. This option is only administered if the width and height options are both set to zero, otherwise they take precedence. The default value is 20x10. With the visibleitems option engaged, geometry constraints are maintained only on the listbox. The size of the other components such as labels, margins, and scroll bars, are additive and independent, effecting the overall size of the scrolled list box. In contrast, should the width and height options have non zero values, they are applied to the scrolled list box as a whole. The listbox is compressed or expanded to maintain the geometry constraints. .LP .nf Name: \fBvscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-vscrollmode\fR .fi .IP Specifies the the display mode to be used for the vertical scrollbar: \fBstatic, dynamic,\fR or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the scrolled list box as an entire unit. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. Any additional space needed to display the other components such as labels, margins, and scrollbars force the listbox to be compressed. A value of zero along with the same value for the height causes the value given for the visibleitems option to be applied which administers geometry constraints in a different manner. The default width is zero. .BE .SH DESCRIPTION .PP The \fBiwidgets::scrolledlistbox\fR command creates a scrolled listbox with additional options to manage horizontal and vertical scrollbars. This includes options to control which scrollbars are displayed and the method, i.e. statically or dynamically. .SH "METHODS" .PP The \fBiwidgets::scrolledlistbox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP Many of the widget commands for a scrolledlistbox take as one argument an indicator of which entry of the list box to operate on. These indicators are called \fIindex\fRes and may be specified in any of the following forms: .TP 12 \fInumber\fR Specifies the element as a numerical index, where 0 corresponds to the first element in the listbox. .TP 12 \fBactive\fR Indicates the element that has the location cursor. This element will be displayed with an underline when the listbox has the keyboard focus, and it is specified with the \fBactivate\fR widget command. .TP 12 \fBanchor\fR Indicates the anchor point for the selection, which is set with the \fBselection anchor\fR widget command. .TP 12 \fBend\fR Indicates the end of the listbox. For some commands this means just after the last element; for other commands it means the last element. .TP 12 \fB@\fIx\fB,\fIy\fR Indicates the element that covers the point in the listbox window specified by \fIx\fR and \fIy\fR (in pixel coordinates). If no element covers that point, then the closest element to that point is used. .TP 12 \fIpattern\fR If the index doesn't satisfy one of the above forms then this form is used. \fIPattern\fR is pattern-matched against the items in the list box, in order from the top down, until a matching entry is found. The rules of \fBTcl_StringMatch\fR are used. .PP The following widget commands are possible for scrolledlistbox widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBbbox\fR \fBcurselection\fR \fBdelete\fR \fBget\fR \fBindex\fR \fBinsert\fR \fBitemconfigure\fR \fBnearest\fR \fBscan\fR \fBsee\fR \fBselection\fR \fBsize\fR \fBxview\fR \fByview\fR .fi .LP See the "listbox" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledlistbox\fR command. .TP \fIpathName \fBclear\fR Clears the listbox of all items. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledlistbox\fR command. .TP \fIpathName \fBgetcurselection\fR Returns the contents of the listbox element indicated by the current selection indexes. Short cut version of get and curselection command combination. .TP \fIpathName \fBjustify \fIdirection\fR Justifies the list contents via teh scroll bars in one of four directions: \fBleft\fR, \fBright\fR, \fBtop\fR, or \fBbottom\fR. .TP \fIpathName \fBselecteditemcount\fR Returns the number of items currently selected in the list. .TP \fIpathName \fBsort\fR \fIorder\fR Sort the current list in any of the forms accepted by Tcl's lsort command. Also accepts either \fBascending\fR or \fBdescending\fR order. .SH "COMPONENTS" .LP .nf Name: \fBlistbox\fR Class: \fBlistbox\fR .fi .IP The listbox component is the listbox widget. See the "listbox" widget manual entry for details on the listbox component item. .LP .nf Name: \fBhorizsb\fR Class: \fBScrollbar\fR .fi .IP The horizsb component is the horizontal scroll bar. See the "scrollbar" widget manual entry for details on the horizsb component item. .LP .nf Name: \fBvertsb\fR Class: \fBScrollbar\fR .fi .IP The vertsb component is the vertical scroll bar. See the "scrollbar" widget manual entry for details on the vertsb component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 option add *textBackground white proc selCmd {} { puts stdout "[.slb getcurselection]" } proc defCmd {} { puts stdout "Double Click" return [selCmd] } iwidgets::scrolledlistbox .slb -selection single \\ -vscrollmode static -hscrollmode dynamic -labeltext "List" \\ -selectioncommand selCmd -dblclickcommand defCmd pack .slb -padx 10 -pady 10 -fill both -expand yes .slb insert end {Hello {Out There} World} .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS scrolledlistbox, listbox, widget �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/scrolledcanvas.n�����������������������������������������������������������������0000644�0036047�0045461�00000017152�07476742024�015700� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) ScrolledListBox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::scrolledcanvas iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::scrolledcanvas \- Create and manipulate scrolled canvas widgets .SH SYNOPSIS \fBiwidgets::scrolledcanvas\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Scrolledwidget <- iwidgets::Scrolledcanvas .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor exportSelection font foreground highlightColor highlightThickness insertBorderWidth insertOffTime insertOnTime insertWidth relief selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBcloseEnough\fR \fBconfine\fR \fBscrollRegion\fR \fBxScrollIncrement\fR \fByScrollIncrement\fR .fi .LP See the "canvas" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBautoMargin\fR Class: \fBAutoMargin\fR Command-Line Switch: \fB-automargin\fR .fi .IP Specifies the autoresize extra margin to reserve. This option is only effective with autoresize turned on. The default is 10. .LP .nf Name: \fBautoResize\fR Class: \fBAutoResize\fR Command-Line Switch: \fB-autoresize\fR .fi .IP Automatically adjusts the scrolled region to be the bounding box covering all the items in the canvas following the execution of any method which creates or destroys items. Thus, as new items are added, the scrollbars adjust accordingly. .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the scrolled canvas widget in any of the forms acceptable to \fBTk_GetPixels\fR. The default height is 30 pixels. .LP .nf Name: \fBhscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-hscrollmode\fR .fi .IP Specifies the the display mode to be used for the horizontal scrollbar: \fBstatic, dynamic,\fR or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBsbWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-sbwidth\fR .fi .IP Specifies the width of the scrollbar in any of the forms acceptable to \fBTk_GetPixels\fR. The default width is 15 pixels.. .LP .nf Name: \fBscrollMargin\fR Class: \fBScrollMargin\fR Command-Line Switch: \fB-scrollmargin\fR .fi .IP Specifies the distance between the canvas and scrollbar in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 3 pixels. .LP .nf Name: \fBtextBackground\fR Class: \fBBackground\fR Command-Line Switch \fB-textbackground\fR .fi .IP Specifies the background color for the canvas. This allows the background within the canvas to be different from the normal background color. .LP .nf Name: \fBvscrollMode\fR Class: \fBScrollMode\fR Command-Line Switch: \fB-vscrollmode\fR .fi .IP Specifies the the display mode to be used for the vertical scrollbar: \fBstatic, dynamic,\fR or \fBnone\fR. In static mode, the scroll bar is displayed at all times. Dynamic mode displays the scroll bar as required, and none disables the scroll bar display. The default is static. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the scrolled canvas widget in any of the forms acceptable to \fBTk_GetPixels\fR. The default height is 30 pixels. .BE .SH DESCRIPTION .PP The \fBiwidgets::scrolledcanvas\fR command creates a scrolled canvas with additional options to manage horizontal and vertical scrollbars. This includes options to control which scrollbars are displayed and the method, i.e. statically or dynamically. .SH "METHODS" .PP The \fBiwidgets::scrolledcanvas\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for scrolledcanvas widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBaddtag\fR \fBbbox\fR \fBbind\fR \fBcanvasx\fR \fBcanvasy\fB \fBcoords\fR \fBcreate\fR \fBdchars\fR \fBdelete\fR \fBdtag\fR \fBfind\fR \fBfocus\fR \fBgettags\fR \fBicursor\fR \fBindex\fR \fBinsert\fR \fBitemconfigure\fR \fBlower\fR \fBmove\fR \fBpostscript\fR \fBraise\fR \fBscale\fR \fBscan\fR \fBselect\fR \fBtype\fR \fBxview\fR \fByview\fR .fi .LP See the "canvas" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledcanvas\fR command. .TP \fIpathName \fBchildsite\fR Returns the child site widget path name. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::scrolledcanvas\fR command. .TP \fIpathName \fBjustify \fIdirection\fR Justifies the canvas contents via the scroll bars in one of four directions: \fBleft\fR, \fBright\fR, \fBtop\fR, or \fBbottom\fR. .SH "COMPONENTS" .LP .nf Name: \fBcanvas\fR Class: \fBCanvas\fR .fi .IP The canvas component is the canvas widget. See the "canvas" widget manual entry for details on the canvas component item. .LP .nf Name: \fBhorizsb\fR Class: \fBScrollbar\fR .fi .IP The horizsb component is the horizontal scroll bar. See the "ScrollBar" widget manual entry for details on the horizsb component item. .LP .nf Name: \fBvertsb\fR Class: \fBScrollbar\fR .fi .IP The vertsb component is the vertical scroll bar. See the "ScrollBar" widget manual entry for details on the vertsb component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::scrolledcanvas .sc .sc create rectangle 100 100 400 400 -fill red .sc create rectangle 300 300 600 600 -fill green .sc create rectangle 200 200 500 500 -fill blue pack .sc -padx 10 -pady 10 -fill both -expand yes .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS scrolledcanvas, canvas, widget ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/iwidgets.ps����������������������������������������������������������������������0000644�0036047�0045461�00001527147�06576036250�014711� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-3.0 %%BoundingBox: (atend) %%Pages: (atend) %%PageOrder: (atend) %%DocumentFonts: (atend) %%Creator: Frame 4.0 %%DocumentData: Clean7Bit %%EndComments %%BeginProlog % % Frame ps_prolog 4.0, for use with Frame 4.0 products % This ps_prolog file is Copyright (c) 1986-1993 Frame Technology % Corporation. All rights reserved. This ps_prolog file may be % freely copied and distributed in conjunction with documents created % using FrameMaker, FrameBuilder and FrameViewer as long as this % copyright notice is preserved. % % Frame products normally print colors as their true color on a color printer % or as shades of gray, based on luminance, on a black-and white printer. The % following flag, if set to True, forces all non-white colors to print as pure % black. This has no effect on bitmap images. /FMPrintAllColorsAsBlack true def % % Frame products can either set their own line screens or use a printer's % default settings. Three flags below control this separately for no % separations, spot separations and process separations. If a flag % is true, then the default printer settings will not be changed. If it is % false, Frame products will use their own settings from a table based on % the printer's resolution. /FMUseDefaultNoSeparationScreen true def /FMUseDefaultSpotSeparationScreen true def /FMUseDefaultProcessSeparationScreen false def % % For any given PostScript printer resolution, Frame products have two sets of % screen angles and frequencies for printing process separations, which are % recomended by Adobe. The following variable chooses the higher frequencies % when set to true or the lower frequencies when set to false. This is only % effective if the appropriate FMUseDefault...SeparationScreen flag is false. /FMUseHighFrequencyScreens true def % % PostScript Level 2 printers contain an "Accurate Screens" feature which can % improve process separation rendering at the expense of compute time. This % flag is ignored by PostScript Level 1 printers. /FMUseAcccurateScreens true def % % The following PostScript procedure defines the spot function that Frame % products will use for process separations. You may un-comment-out one of % the alternative functions below, or use your own. % % Dot function /FMSpotFunction {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub } {dup mul exch dup mul add 1 exch sub }ifelse } def % % Line function % /FMSpotFunction { pop } def % % Elipse function % /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add % sqrt 1 exch sub } def % % /FMversion (4.0) def /FMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def /FMPColor FMLevel1 { false /colorimage where {pop pop true} if } { true } ifelse def /FrameDict 400 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } bind def } if /FMshowpage /showpage load def /FMquit /quit load def /FMFAILURE { dup = flush FMshowpage /Helvetica findfont 12 scalefont setfont 72 200 moveto show FMshowpage FMquit } def /FMVERSION { FMversion ne { (Frame product version does not match ps_prolog!) FMFAILURE } if } def /FMBADEPSF { (PostScript Lang. Ref. Man., 2nd Ed., H.2.4 says EPS must not call X ) dup dup (X) search pop exch pop exch pop length 4 -1 roll putinterval FMFAILURE } def /FMLOCAL { FrameDict begin 0 def end } def /concatprocs { /proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }def FrameDict begin /FMnone 0 def /FMcyan 1 def /FMmagenta 2 def /FMyellow 3 def /FMblack 4 def /FMcustom 5 def /FrameNegative false def /FrameSepIs FMnone def /FrameSepBlack 0 def /FrameSepYellow 0 def /FrameSepMagenta 0 def /FrameSepCyan 0 def /FrameSepRed 1 def /FrameSepGreen 1 def /FrameSepBlue 1 def /FrameCurGray 1 def /FrameCurPat null def /FrameCurColors [ 0 0 0 1 0 0 0 ] def /FrameColorEpsilon .001 def /eqepsilon { sub dup 0 lt {neg} if FrameColorEpsilon le } bind def /FrameCmpColorsCMYK { 2 copy 0 get exch 0 get eqepsilon { 2 copy 1 get exch 1 get eqepsilon { 2 copy 2 get exch 2 get eqepsilon { 3 get exch 3 get eqepsilon } {pop pop false} ifelse }{pop pop false} ifelse } {pop pop false} ifelse } bind def /FrameCmpColorsRGB { 2 copy 4 get exch 0 get eqepsilon { 2 copy 5 get exch 1 get eqepsilon { 6 get exch 2 get eqepsilon }{pop pop false} ifelse } {pop pop false} ifelse } bind def /RGBtoCMYK { 1 exch sub 3 1 roll 1 exch sub 3 1 roll 1 exch sub 3 1 roll 3 copy 2 copy le { pop } { exch pop } ifelse 2 copy le { pop } { exch pop } ifelse dup dup dup 6 1 roll 4 1 roll 7 1 roll sub 6 1 roll sub 5 1 roll sub 4 1 roll } bind def /CMYKtoRGB { dup dup 4 -1 roll add 5 1 roll 3 -1 roll add 4 1 roll add 1 exch sub dup 0 lt {pop 0} if 3 1 roll 1 exch sub dup 0 lt {pop 0} if exch 1 exch sub dup 0 lt {pop 0} if exch } bind def /FrameSepInit { 1.0 RealSetgray } bind def /FrameSetSepColor { /FrameSepBlue exch def /FrameSepGreen exch def /FrameSepRed exch def /FrameSepBlack exch def /FrameSepYellow exch def /FrameSepMagenta exch def /FrameSepCyan exch def /FrameSepIs FMcustom def setCurrentScreen } bind def /FrameSetCyan { /FrameSepBlue 1.0 def /FrameSepGreen 1.0 def /FrameSepRed 0.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 1.0 def /FrameSepIs FMcyan def setCurrentScreen } bind def /FrameSetMagenta { /FrameSepBlue 1.0 def /FrameSepGreen 0.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 1.0 def /FrameSepCyan 0.0 def /FrameSepIs FMmagenta def setCurrentScreen } bind def /FrameSetYellow { /FrameSepBlue 0.0 def /FrameSepGreen 1.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 1.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMyellow def setCurrentScreen } bind def /FrameSetBlack { /FrameSepBlue 0.0 def /FrameSepGreen 0.0 def /FrameSepRed 0.0 def /FrameSepBlack 1.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMblack def setCurrentScreen } bind def /FrameNoSep { /FrameSepIs FMnone def setCurrentScreen } bind def /FrameSetSepColors { FrameDict begin [ exch 1 add 1 roll ] /FrameSepColors exch def end } bind def /FrameColorInSepListCMYK { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsCMYK { pop true exit } if } forall dup true ne {pop false} if } bind def /FrameColorInSepListRGB { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsRGB { pop true exit } if } forall dup true ne {pop false} if } bind def /RealSetgray /setgray load def /RealSetrgbcolor /setrgbcolor load def /RealSethsbcolor /sethsbcolor load def end /setgray { FrameDict begin FrameSepIs FMnone eq { RealSetgray } { FrameSepIs FMblack eq { RealSetgray } { FrameSepIs FMcustom eq FrameSepRed 0 eq and FrameSepGreen 0 eq and FrameSepBlue 0 eq and { RealSetgray } { 1 RealSetgray pop } ifelse } ifelse } ifelse end } bind def /setrgbcolor { FrameDict begin FrameSepIs FMnone eq { RealSetrgbcolor } { 3 copy [ 4 1 roll ] FrameColorInSepListRGB { FrameSepBlue eq exch FrameSepGreen eq and exch FrameSepRed eq and { 0 } { 1 } ifelse } { FMPColor { RealSetrgbcolor currentcmykcolor } { RGBtoCMYK } ifelse FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind def /sethsbcolor { FrameDict begin FrameSepIs FMnone eq { RealSethsbcolor } { RealSethsbcolor currentrgbcolor setrgbcolor } ifelse end } bind def FrameDict begin /setcmykcolor where { pop /RealSetcmykcolor /setcmykcolor load def } { /RealSetcmykcolor { 4 1 roll 3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat setrgbcolor pop } bind def } ifelse userdict /setcmykcolor { FrameDict begin FrameSepIs FMnone eq { RealSetcmykcolor } { 4 copy [ 5 1 roll ] FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and { 0 } { 1 } ifelse } { FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind put FMLevel1 not { /patProcDict 5 dict dup begin <0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def <8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -1 -1 moveto 9 9 lineto stroke } bind def <03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def end def /patDict 15 dict dup begin /PatternType 1 def /PaintType 2 def /TilingType 3 def /BBox [ 0 0 8 8 ] def /XStep 8 def /YStep 8 def /PaintProc { begin patProcDict bstring known { patProcDict bstring get exec } { 8 8 true [1 0 0 -1 0 8] bstring imagemask } ifelse end } bind def end def } if /combineColor { FrameSepIs FMnone eq { graymode FMLevel1 or not { [/Pattern [/DeviceCMYK]] setcolorspace FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor } { FrameCurColors 3 get 1.0 ge { FrameCurGray RealSetgray } { FMPColor graymode and { 0 1 3 { FrameCurColors exch get 1 FrameCurGray sub mul } for RealSetcmykcolor } { 4 1 6 { FrameCurColors exch get graymode { 1 exch sub 1 FrameCurGray sub mul 1 exch sub } { 1.0 lt {FrameCurGray} {1} ifelse } ifelse } for RealSetrgbcolor } ifelse } ifelse } ifelse } { FrameCurColors 0 4 getinterval aload FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and FrameSepIs FMcustom eq and { FrameCurGray } { 1 } ifelse } { FrameSepIs FMblack eq {FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse graymode FMLevel1 or not { [/Pattern [/DeviceGray]] setcolorspace FrameCurPat setcolor } { graymode not FMLevel1 and { dup 1 lt {pop FrameCurGray} if } if RealSetgray } ifelse } ifelse } bind def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /dpiranges [ 2540 2400 1693 1270 1200 635 600 0 ] def /CMLowFreqs [ 100.402 94.8683 89.2289 100.402 94.8683 66.9349 63.2456 47.4342 ] def /YLowFreqs [ 95.25 90.0 84.65 95.25 90.0 70.5556 66.6667 50.0 ] def /KLowFreqs [ 89.8026 84.8528 79.8088 89.8026 84.8528 74.8355 70.7107 53.033 ] def /CLowAngles [ 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 ] def /MLowAngles [ 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 ] def /YLowTDot [ true true false true true false false false ] def /CMHighFreqs [ 133.87 126.491 133.843 108.503 102.523 100.402 94.8683 63.2456 ] def /YHighFreqs [ 127.0 120.0 126.975 115.455 109.091 95.25 90.0 60.0 ] def /KHighFreqs [ 119.737 113.137 119.713 128.289 121.218 89.8026 84.8528 63.6395 ] def /CHighAngles [ 71.5651 71.5651 71.5651 70.0169 70.0169 71.5651 71.5651 71.5651 ] def /MHighAngles [ 18.4349 18.4349 18.4349 19.9831 19.9831 18.4349 18.4349 18.4349 ] def /YHighTDot [ false false true false false true true false ] def /PatFreq [ 10.5833 10.0 9.4055 10.5833 10.0 10.5833 10.0 9.375 ] def /screenIndex { 0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for } bind def /getCyanScreen { FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getMagentaScreen { FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getYellowScreen { FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse screenIndex dup 3 1 roll get 3 1 roll get { 3 div {2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat FMSpotFunction } } {/FMSpotFunction load } ifelse 0.0 exch } bind def /getBlackScreen { FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse screenIndex get 45.0 /FMSpotFunction load } bind def /getSpotScreen { getBlackScreen } bind def /getCompositeScreen { getBlackScreen } bind def /FMSetScreen FMLevel1 { /setscreen load }{ { 8 dict begin /HalftoneType 1 def /SpotFunction exch def /Angle exch def /Frequency exch def /AccurateScreens FMUseAcccurateScreens def currentdict end sethalftone } bind } ifelse def /setDefaultScreen { FMPColor { orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer } { orgxfer cvx settransfer } ifelse orgfreq organgle orgproc cvx setscreen } bind def /setCurrentScreen { FrameSepIs FMnone eq { FMUseDefaultNoSeparationScreen { setDefaultScreen } { getCompositeScreen FMSetScreen } ifelse } { FrameSepIs FMcustom eq { FMUseDefaultSpotSeparationScreen { setDefaultScreen } { getSpotScreen FMSetScreen } ifelse } { FMUseDefaultProcessSeparationScreen { setDefaultScreen } { FrameSepIs FMcyan eq { getCyanScreen FMSetScreen } { FrameSepIs FMmagenta eq { getMagentaScreen FMSetScreen } { FrameSepIs FMyellow eq { getYellowScreen FMSetScreen } { getBlackScreen FMSetScreen } ifelse } ifelse } ifelse } ifelse } ifelse } ifelse } bind def end /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgrxfer FMLOCAL /orggxfer FMLOCAL /orgbxfer FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /orgrproc FMLOCAL /orggproc FMLOCAL /orgbproc FMLOCAL /organgle FMLOCAL /orgrangle FMLOCAL /orggangle FMLOCAL /orgbangle FMLOCAL /orgfreq FMLOCAL /orgrfreq FMLOCAL /orggfreq FMLOCAL /orgbfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /edown FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne /manualfeed exch def /paperheight exch def /paperwidth exch def 0 ne /FrameNegative exch def 0 ne /edown exch def /yscale exch def /xscale exch def FMLevel1 { manualfeed {setmanualfeed} if /FMdicttop countdictstack 1 add def /FMoptop count def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} {false} ifelse { (Can't select requested paper size for Frame print job!) FMFAILURE } if count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for } {{1 dict dup /PageSize [paperwidth paperheight]put setpagedevice}stopped { (Can't select requested paper size for Frame print job!) FMFAILURE } if {1 dict dup /ManualFeed manualfeed put setpagedevice } stopped pop } ifelse FMPColor { currentcolorscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def cvlit /orgbproc exch def /orgbangle exch def /orgbfreq exch def cvlit /orggproc exch def /orggangle exch def /orggfreq exch def cvlit /orgrproc exch def /orgrangle exch def /orgrfreq exch def currentcolortransfer FrameNegative { 1 1 4 { pop { 1 exch sub } concatprocs 4 1 roll } for 4 copy setcolortransfer } if cvlit /orgxfer exch def cvlit /orgbxfer exch def cvlit /orggxfer exch def cvlit /orgrxfer exch def } { currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def currenttransfer FrameNegative { { 1 exch sub } concatprocs dup settransfer } if cvlit /orgxfer exch def } ifelse end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /pwid FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch dup /pwid exch def neg translate pop }{ pop /pwid exch def } ifelse edown { [-1 0 0 1 pwid 0] concat } if 0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 0 paperheight lineto 0 0 lineto 1 setgray fill xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin dup array /fillvals exch def dict /patCache exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def % See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714. % "...the following operators MUST NOT be used in an EPS file:" (emphasis ours) /banddevice {(banddevice) FMBADEPSF} def /clear {(clear) FMBADEPSF} def /cleardictstack {(cleardictstack) FMBADEPSF} def /copypage {(copypage) FMBADEPSF} def /erasepage {(erasepage) FMBADEPSF} def /exitserver {(exitserver) FMBADEPSF} def /framedevice {(framedevice) FMBADEPSF} def /grestoreall {(grestoreall) FMBADEPSF} def /initclip {(initclip) FMBADEPSF} def /initgraphics {(initgraphics) FMBADEPSF} def /initmatrix {(initmatrix) FMBADEPSF} def /quit {(quit) FMBADEPSF} def /renderbands {(renderbands) FMBADEPSF} def /setglobal {(setglobal) FMBADEPSF} def /setpagedevice {(setpagedevice) FMBADEPSF} def /setshared {(setshared) FMBADEPSF} def /startjob {(startjob) FMBADEPSF} def /lettertray {(lettertray) FMBADEPSF} def /letter {(letter) FMBADEPSF} def /lettersmall {(lettersmall) FMBADEPSF} def /11x17tray {(11x17tray) FMBADEPSF} def /11x17 {(11x17) FMBADEPSF} def /ledgertray {(ledgertray) FMBADEPSF} def /ledger {(ledger) FMBADEPSF} def /legaltray {(legaltray) FMBADEPSF} def /legal {(legal) FMBADEPSF} def /statementtray {(statementtray) FMBADEPSF} def /statement {(statement) FMBADEPSF} def /executivetray {(executivetray) FMBADEPSF} def /executive {(executive) FMBADEPSF} def /a3tray {(a3tray) FMBADEPSF} def /a3 {(a3) FMBADEPSF} def /a4tray {(a4tray) FMBADEPSF} def /a4 {(a4) FMBADEPSF} def /a4small {(a4small) FMBADEPSF} def /b4tray {(b4tray) FMBADEPSF} def /b4 {(b4) FMBADEPSF} def /b5tray {(b5tray) FMBADEPSF} def /b5 {(b5) FMBADEPSF} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fw 2 div add fy fh 2 div add translate rotate fw 2 div neg fh 2 div neg translate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate /FMdicttop countdictstack 1 add def /FMoptop count def } bind def /FMENDEPSF { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } bind def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } bind def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } bind def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end statusdict begin stopped end } bind def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } bind def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped end } {true} ifelse } bind def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def FMPColor { /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def } ifelse /K { FMPrintAllColorsAsBlack { dup 1 eq 2 index 1 eq and 3 index 1 eq and not {7 {pop} repeat 0 0 0 1 0 0 0} if } if FrameCurColors astore pop combineColor } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setPatternMode { FMLevel1 { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne FrameNegative {not} if {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen offbits offbits onbits add div FrameNegative {1.0 exch sub} if /FrameCurGray exch def } { pop pop dup patCache exch known { patCache exch get } { dup patDict /bstring 3 -1 roll put patDict 9 PatFreq screenIndex get div dup matrix scale makepattern dup patCache 4 -1 roll 3 -1 roll put } ifelse /FrameCurGray 0 def /FrameCurPat exch def } ifelse /graymode false def combineColor } bind def /setGrayScaleMode { graymode not { /graymode true def FMLevel1 { setCurrentScreen } if } if /FrameCurGray exch def combineColor } bind def /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /PFill { graymode FMLevel1 or not { gsave 1 setgray eofill grestore } if } bind def /PStroke { graymode FMLevel1 or not { gsave 1 setgray stroke grestore } if stroke } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setPatternMode} {setGrayScaleMode} ifelse } bind def /V { PFill gsave eofill grestore } bind def /Vclip { clip } bind def /Vstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /N { PStroke } bind def /Nclip { strokepath clip newpath } bind def /Nstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /rad FMLOCAL /rarc {rad arcto } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def mark newpath { x1 y1 rad add moveto x1 y2 x2 y2 rarc x2 y2 x2 y1 rarc x2 y1 x1 y1 rarc x1 y1 x1 y2 rarc closepath } stopped {x1 y1 x2 y2 R} if cleartomark } bind def /RRR { /rad exch def normalize /y4 exch def /x4 exch def normalize /y3 exch def /x3 exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath normalize moveto mark { x2 y2 x3 y3 rarc x3 y3 x4 y4 rarc x4 y4 x1 y1 rarc x1 y1 x2 y2 rarc closepath } stopped {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if cleartomark } bind def /C { grestore gsave R clip setCurrentScreen } bind def /CP { grestore gsave Y clip setCurrentScreen } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /Gstrk { savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /Gclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GG { gsave newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /GGclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GGstrk { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /Aclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /Astrk { Gstrk } bind def /AA { gsave savematrix newpath 3 index 2 div add exch 4 index 2 div sub exch normalize 3 index 2 div sub exch 4 index 2 div add exch translate rotate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /AAclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /AAstrk { GGstrk } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 7 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /rip { bis ris copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop ris gis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop gis bis copy pop dup add is exch cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup dup 24 eq { pop pop 3 mul } { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL FMLevel1 { /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def /u k currentundercolorremoval exec def % /u 0 def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 k currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def } { /colorSetup2 { [ /Indexed /DeviceRGB 255 {dup red exch get 255 div exch dup green exch get 255 div exch blue exch get 255 div} ] setcolorspace } bind def } ifelse /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch concatprocs settransfer } bind def /BITMAPCOLOR { /d 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def FMLevel1 { colorsetup /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} {is} {is} true 3 colorimage } { colorSetup2 /is w d wbytes string def /cf currentfile def 7 dict dup begin /ImageType 1 def /Width w def /Height h def /ImageMatrix [w 0 0 h neg 0 h] def /DataSource {cf is readhexstring pop} bind def /BitsPerComponent d def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def FMLevel1 { colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} {is} {is} true 3 colorimage } { colorSetup2 /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def 7 dict dup begin /ImageType 1 def /Width w def /Height h def /ImageMatrix [w 0 0 h neg 0 h] def /DataSource {ip} bind def /BitsPerComponent d def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { /d 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 w getinterval def /gis im w w getinterval def /bis im w 2 mul w getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {w rip pop ris} {gis} {bis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { /d 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 w getinterval def /gis im w w getinterval def /bis im w 2 mul w getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {w rip pop ris gis bis w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def /I { setdash } bind def /J { [] 0 setdash } bind def %%EndProlog %%BeginSetup (4.0) FMVERSION 1 1 0 0 612 792 0 1 10 FMDOCUMENT 0 0 /Times-Bold FMFONTDEFINE 1 0 /Times-Roman FMFONTDEFINE 2 0 /Times-BoldItalic FMFONTDEFINE 3 0 /Times-Italic FMFONTDEFINE 4 0 /Courier FMFONTDEFINE 5 0 /Courier-Bold FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 <cccccccccccccccc> FMFILL 11 <ffff0000ffff0000> FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 <f0e1c3870f1e3c78> FMFILL 25 <f0783c1e0f87c3e1> FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 <fcf9f3e7cf9f3f7e> FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "1" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 12 Q 0 X 0 0 0 1 0 0 0 K (Intr) 151.94 469 T (oduction) 172.39 469 T 1 10 Q (T) 72 450.33 T (ypically) 77.41 450.33 T (, T) 108.98 450.33 T (cl/Tk application development leads to the) 119.39 450.33 T (redundant creation of widget combination patterns) 72 438.33 T (which can be singled out for replacement with higher) 72 426.33 T (level abstractions. For example, a label is usually asso-) 72 414.33 T (ciated with an entry widget, listboxes frequently have) 72 402.33 T (attached scrollbars, and dialogs require buttons and) 72 390.33 T (modality) 72 378.33 T (. This is due to the simplicity of the Tk widget) 106.91 378.33 T (set. Seasoned developers commonly package this code,) 72 366.33 T (attempting to create a composite widget in a set of pro-) 72 354.33 T (cedures which allows for consistent creation of the wid-) 72 342.33 T (get combination. This may provide centralization of) 72 330.33 T (logic, but the procedures lack the encapsulation of a) 72 318.33 T (pure widget and end up \337ooding global name space. At) 72 306.33 T (this point, some developers may resort to C code.) 72 294.33 T (What was really needed was the ability to combine Tk) 72 270.33 T (widgets together into abstract building blocks called) 72 258.33 T (\322Mega-W) 72 246.33 T (idgets\323 at the VHLL layer) 111.58 246.33 T (. The [incr T) 215.45 246.33 T (cl] [1]) 265.29 246.33 T (and [incr Tk] [2] extensions provide this capability) 72 234.33 T (,) 274.93 234.33 T (allowing mega-widget development in an object-ori-) 72 222.33 T (ented paradigm using T) 72 210.33 T (cl/Tk rather than C. The next) 166.01 210.33 T (step was to build a mega-widget set in these extensions) 72 198.33 T (which replaces the redundant widget combination pat-) 72 186.33 T -0.1 (terns and provides a foundation for future development.) 72 174.33 P ([incr W) 72 162.33 T (idgets] is one such extension.) 102.42 162.33 T ([incr W) 72 144.33 T (idgets] is an object-oriented, extensible set of) 102.42 144.33 T -0.6 (mega-widgets, delivering many general purpose widgets) 72 132.33 P (such as option menus, selection boxes, and dialogs) 72 120.33 T (whose counterparts are found in Motif. Since [incr W) 72 108.33 T (id-) 285.72 108.33 T (gets] is based on [incr Tk], the Tk framework of con\336g-) 72 96.33 T (uration options and widget commands is maintained. In) 72 84.33 T (other words, they look, act, and feel like Tk widgets.) 315 470.33 T ([incr W) 315 458.33 T (idgets] blends with the standard Tk widgets,) 345.42 458.33 T -0.28 (raising the level of programming and making it easier to) 315 446.33 P (consistently develop well styled applications.) 315 434.33 T (The idea of extending the basic Tk widget set is not) 315 410.33 T (original. Other mega-widget extensions exist such as) 315 398.33 T (T) 315 386.33 T (ix [3] and itcl-widgets [4]. V) 320.76 386.33 T (isually) 435.14 386.33 T (, [incr W) 461.16 386.33 T (idgets]) 496.58 386.33 T -0.03 (covers some of the same ground, successfully replacing) 315 374.33 P (many of the same typical combinations. [incr W) 315 362.33 T (idgets]) 507.35 362.33 T (dif) 315 350.33 T (fers in the degree of its reusability) 325.93 350.33 T (, extensibility) 461.92 350.33 T (, \337ex-) 515.72 350.33 T (ibility) 315 338.33 T (, and adherence to the Motif style guide.) 338.25 338.33 T (The [incr W) 315 314.33 T (idgets] mega-widget set is also distin-) 363.47 314.33 T (guished by its consistent use of style, built-in intelli-) 315 302.33 T (gence, high degree of \337exibility) 315 290.33 T (, ease of extending base) 441.83 290.33 T (level functionality) 315 278.33 T (, and its object-oriented implementa-) 387.4 278.33 T (tion. Its use has resulted in increased productivity) 315 266.33 T (, reli-) 512.66 266.33 T (ability) 315 254.33 T (, and style guide adherence. This paper) 339.91 254.33 T (concentrates on these unique aspects of the widget set) 315 242.33 T (and the presentation of its innovative concepts. A picto-) 315 230.33 T (rial tour with sample code segments will be given as an) 315 218.33 T (appendix.) 315 206.33 T 0 12 Q (Mega-W) 390.28 175 T (idgets) 434.72 175 T 1 10 Q (Mega-widgets has been a hot topic within the T) 315 150.33 T (cl/Tk) 504.83 150.33 T (community) 315 138.33 T (. The discussion centers on the bene\336ts,) 359.91 138.33 T (frameworks, mechanisms, and implementation tech-) 315 126.33 T (niques. It was McLennan [1] who originally coined the) 315 114.33 T (term in his work with [incr T) 315 102.33 T (cl], expanding on the con-) 430.4 102.33 T (cept with [incr Tk]. He proposes that mega-widgets) 315 90.33 T (should seamlessly extend the Tk widget set. They) 315 78.33 T 72 495 540 720 R 7 X V 0 14 Q 0 X ([incr W) 263.16 710.67 T (idgets]) 309.18 710.67 T (An Object Oriented Mega-W) 192.98 692.67 T (idget Set) 367.31 692.67 T 2 9 Q (Revised 10/31/95 - Originally present at USENIX T) 176.36 678 T (cl/Tk W) 365.8 678 T (orkshop 95) 394.38 678 T 1 12 Q (Mark L. Ulferts) 268.18 652 T 3 10 Q (DSC Communications Corporation) 235.16 637.33 T (mulferts@spd.dsccc.com) 256.13 623.33 T (http://www) 242.19 609.33 T (.wn.com/biz/iwidgets) 285.91 609.33 T 0 12 Q (Abstract) 283.67 576 T 3 10 Q (The intr) 72 551.33 T (oduction of [incr T) 103.58 551.33 T (cl] and [incr Tk] allows an object oriented appr) 178.5 551.33 T (oach to Tk widget construction. \322Mega-) 370.91 551.33 T (widgets\323 developed in these extensions seamlessly expand the Tk base widget set. Each of these object-oriented wid-) 72 539.33 T -0.03 (gets may themselves be extended, using either inheritance or composition. This paper pr) 72 527.33 P -0.03 (esents one such general pur-) 425.14 527.33 P (pose hierar) 72 515.33 T (chy called [incr W) 117.46 515.33 T (idgets] which maintains the Motif look-and-feel and establishes several new concepts,) 191.06 515.33 T (including extensible child sites and \337exible lar) 72 503.33 T (ge scale component con\336guration.) 257.73 503.33 T FMENDPAGE %%EndPage: "1" 1 %%Page: "2" 2 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (should behave like standard Tk widgets, but are com-) 72 713.33 T (posed of many Tk widgets and possibly other mega-) 72 701.33 T (widgets as components. The implementation must) 72 689.33 T (ensure that users notice no signi\336cant dif) 72 677.33 T (ferences. Stan-) 235.69 677.33 T (dard commands such as \324con\336gure\325 and \324cget\325 must) 72 665.33 T (exist and options should be propagated to all compo-) 72 653.33 T (nents. Thus, con\336guration of a mega-widgets \322-back-) 72 641.33 T (ground\323 or \322-relief\323 option should have the expected) 72 629.33 T (results on its components.) 72 617.33 T -0.15 (The [incr T) 72 593.33 P -0.15 (cl] and [incr Tk] extensions fully address the) 116.55 593.33 P (issues of framework and mechanism for mega-widget) 72 581.33 T (production. They have established themselves as the) 72 569.33 T (defacto standard object-oriented extensions and have) 72 557.33 T (been chosen to provide the backbone for the [incr W) 72 545.33 T (id-) 281.82 545.33 T (gets] set. Using these extensions, each mega-widget) 72 533.33 T (becomes a \322class\323, de\336ning a unique type of widget) 72 521.33 T (object in a separate namespace. This ensures that data) 72 509.33 T (and commands associated with an object are encapsu-) 72 497.33 T (lated, eliminating global name space pollution.) 72 485.33 T 0 12 Q (Example) 161.83 454 T 1 10 Q -0.24 (At this point, an example of mega-widget usage can pro-) 72 429.33 P (vide a taste of [incr W) 72 417.33 T (idgets] capabilities and illustrate) 160.74 417.33 T (the bene\336ts. The example centers around the construc-) 72 405.33 T -0.17 (tion of a typical login screen which prompts the user for) 72 393.33 P (user name and password. New requirements will be) 72 381.33 T -0.03 (incremental, leading to the development of a new mega-) 72 369.33 P (widget which is implemented as an extension of an) 72 357.33 T (existing one.) 72 345.33 T -0.3 (A primitive login screen is composed of two \336elds, each) 72 321.33 P (having a label and entry widget. The T) 72 309.33 T (cl/Tk code) 226.27 309.33 T (required is shown in Figure 1. [incr W) 72 297.33 T (idgets] provides) 224.91 297.33 T (an Entry\336eld class which replaces this standard widget) 72 285.33 T (combination. This is shown in Figure 2. At this point,) 72 273.33 T (mega-widget usage is mostly a matter of convenience) 72 261.33 T (and minor savings in code, yet with a few additional) 72 249.33 T (requirements the bene\336ts begin to escalate.) 72 237.33 T (Now let\325) 72 213.33 T (s add new requirements which might be) 106.72 213.33 T (required for a normal login screen. First, the labels) 72 201.33 T (should be left aligned. Next, the user \336eld width should) 72 189.33 T (be limited to a maximum of 10 characters with input) 72 177.33 T (restricted to alphabetic characters and illegal character) 72 165.33 T (entry ringing the bell. As for the password, input must) 72 153.33 T -0.05 (be masked and the return key should invoke a login pro-) 72 141.33 P (cedure. W) 72 129.33 T (e\325ll also present a more aesthetic interface by) 112.29 129.33 T (varying the textual background in the mega-widget.) 72 117.33 T (Since this last requirement applies to both Entry\336elds,) 72 105.33 T -0.03 (the option database will be used. Figure 3 illustrates the) 72 93.33 P -0.48 (code needed to implement these new requirements using) 72 81.33 P ([incr W) 315 200.33 T (idgets]. Even without the presentation of com-) 345.42 200.33 T -0.18 (parative straight T) 315 188.33 P -0.18 (cl/Tk code, its safe to say that the ben-) 387.27 188.33 P (e\336ts have increased.) 315 176.33 T (This example gives just a sampling of the label control) 315 152.33 T (capabilities built into those classes based on the) 315 140.33 T (Labeledwidget class such as the Entry\336eld mega-wid-) 315 128.33 T -0.18 (get. The label\325) 315 116.33 P -0.18 (s position relative to its associated widget) 372.12 116.33 P -0.04 (may be speci\336ed using standard directions: nw) 315 104.33 P -0.04 (, n, ne, e,) 501.29 104.33 P -0.4 (se, s, sw) 315 92.33 P -0.4 (, and w) 346.88 92.33 P -0.4 (. The label need not be limited to text, the) 374.58 92.33 P (class supports both bitmaps and images as well. A mar-) 315 80.33 T 315 207 540 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 243 540 360 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 315 396 540 720 R 7 X V 0 X N %%BeginBinary: 6824 251 117 129.09 60.17 0 365.92 648 /red < 72FFFFFFFFFFFFFFFFFFFFFFFFFF66F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700FF5500557FB22EB099FFFFB07AFFCC0087AFB4CD73E6A2 4DBF88F558D7439D50D080C0C080C0808060C000FFA000FFBE8BD28BD9B3FF72 20C0A040C040D060F0E010B499A0FF0019BF2FFF6223852F465F4770FF0000FF > store /green < 9F0000000000000000000000000099DEFFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE700FF1A006B7FB28B3099FFFFB094FFF700CEEEEE0073E6A2 4DBF88F558D74DB38080C0C080C080808060C08000A08040BE5BB477D9B3FF77 2070A0402040D0F0F0E010B489A0E4FF19264F00B641DE4F829E4780FF0000FF > store /blue < FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3BF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BFCC8BEE2F7FB257606BFBB3B015322480FAEEB40073E6A2 4DBF88F558D756CAD050C080C08080C08060C080FF000040BE7A8C65D9B3E085 2070C0802040D06050E010B476A0C40070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7R4F6F76F6F7J" S3F78z8z8z 4F9R3F94F9 ;z" S*F7F6<z"z"z"z 0F6F7R#F6F70F6F70F6=z8z8z8z /F9R"F9/F9/F9 J%J#F' O<FEFEFEFE5FEFEFEFEFEFEF9FEJ"8"J'Js" O<F9F9FFEFEF9F9F9FEP2F6F7J#8#J"Jr P#FEFEF9F94F9P3F9J$:*8'?#8"9$8'8$:$8' OGFEFEFEFEFEFEFEF9F9FEFEFEFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEF9FEFE@s"J1:"8%<"9#8)8"808%J$ F6F7O2FEFEFEF9FEFEFEF9FEFEF9F9FEFEF9F9F9FEF9FEFEF9FEFEFEFEFEF9FEFEF9F9FEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9FEF9FEFEO.F6F6F7ArJ$H"@#9"9%:$9"<"<"J" F9O5F9F9F9F9F9F9FEF9F9F9F9F9F9F9FEFEF9O2F9@sJ"?'I"8#H%9%J# F7O1FEF9FEFEFEFEF9FEF9F9F9F9F9F9F9F9F9F9O6F7F7@tJ":$9&J">%?%9%J$ F9O/FEFEF9FEFEF9F9F9F95FEFEF9FEFEFEF9FEFEFEF9FEFEO6F9F9F9J"8$9(8(8$8"9"<08"808"9" O<FEFEFEFEF9F9FEFEFEF9F9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEFEJs9$9";"x;':$8%:$:$8sJs O<F9F9F9F9F9FEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9O;F7J&Jt OMFEF9F9F9F9PLF9J( OMF9FEFEFEFEFEF9=z8z8z8z /F7R"F7/F7/F7rF"J"F"F% F7F7R#F7F7F7F7F7F7'z& F6F6F6F6F6F7S)EEF6F6F6F6F68$J% F9F9F9S+F9F9F9F7 J5 O+QEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEJ5 O*QGFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFFJ#z# O*EEFEQCEEFFEEJ#J# O*FEEEQCEEFFJ#J# O*EEFEQCFFEEJ#9#J#J# 4FEFEFEFE=FEEEQCEEFFJ#J# O*EEFEQCFFEEJ%9%8)<#J# =FEFEFEFEFEFEFEFEFEFEEEFEFEEEFEFEFEEEQCEEFFJ.9"A#J# <FEFEEEEEFEFEEEFEFEEEEEFEFEFEEEFEQCFFEEJ%A&<#J# >FEEEEEEEEEEEEEEEEEFEEEQCEEFFJ&:#;"A#J# <EEEEFEFEFEFEFEEEEEFEQCFFEEJ"8"9%E#J# >EEFEEEEEEEEEFEEEQCEEFFJ-=#=#<#J# 4EEFEFEEEFEFEEEEEFEFEEEEEFEFEFEFEEEFEQCFFEEJ":.E#J# 7FEEEFEFEFEFEEEEEEEFEFEFEFEEEFEEEQCEEFFJ&9%9%8#:#<#J# 5EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEQCFFEEJ#J# O*FEEEQCEEFFJ#J# O*EEFEQCFFEEJ#J# O*FEEEQCEEFFJ5 O*QGEEFEEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEJ5 O*QGFEEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFJz O*QGEE J5 OJQ'FEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEJ5 OIQ(FEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEFEEEJ#z" OIEEFEQ%EEFFJ#J# OIFEEEQ$FFEEJ#J# OIEEFEQ$EEFFJ'J#@#J# 4FEFEFEFEFEFEO#FEFEFEEEQ$FFEEJ&J#J# 6EEEEEEFEFEO.EEFEQ$EEFFJ%9%9%8#8#8#8%8);#<#J# <FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEFEFEEEFEFEFEFEFEEEQ$FFEEJ5B'9"8%B#J# ;4FEFEEEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEFEFEEEEEFEFEFEFEFEEEFEEEFEQ$EEFFJ(=%9):$A#9":#<#J# 6FEFEFEFEEEEEEEFEEEEEEEFEEEEEEEEEEEFEFEFEFEEEEEEEEEEEEEFEEEQ$FFEEJ%8$9&8&J"H#J# 6EEEEEEEEFEFEFEEEEEFEFEFEEEEEFEFEFE6EEEEFEQ$EEFFJ%;"8"9"8"J#J# ;FEFEEEEEEEFEEEFEHFEEEQ$FFEEJ%9%:)G":#<#J# BFEFEEEEEFEFEEEEEEEFEFEEEEEFEFEEEFEFEFEEEFEQ$EEFFJ5B'<%B#J# ;4EEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEEEFEFEFEFEEEEEFEFEEEFEEEQ$FFEEJ#<v9%:#8#:%8#:&8#<#J# 4EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEQ$EEFFJ#J# OIFEEEQ$FFEEJ#J# OIEEFEQ$EEFFJ#J# OIFEEEQ$FFEEJ5 OIQ(EEFEEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFF&J5B% F7F7F7F7F7ODQ(FEEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEF7F7F7F7&JzC& F6F6F6F6F6ODQ'EEF6F6F6F6F68$J% F9F9F9S+F9F9F9F7 <z"z"z 0F6F7R4F6F71F6;z8z8z 1F9R3F91F9 7z8z8z 5F7R3F74F7"J"J" F76F7R4F7 ENDBITMAP %%EndBinary 324 399.57 531 639 R 7 X V 4 8 Q 0 X (frame .login) 324 633.67 T (pack .login -padx 10 -pady 10) 324 623.67 T (frame .login.userFrame) 324 603.67 T (label .login.userFrame.userLabel \134) 324 593.67 T ( -text \322User:\323) 324 583.67 T (entry .login.userFrame.userEntry) 324 573.67 T (pack .login.userFrame -f) 324 553.67 T (ill x -pady 5) 439.2 553.67 T (pack .login.userFrame.userLabel \134) 324 543.67 T ( -side left) 324 533.67 T (pack .login.userFrame.userEntry \134) 324 523.67 T ( -side left -expand yes -f) 324 513.67 T (ill x) 463.2 513.67 T (frame .login.passwdFrame) 324 493.67 T (label .login.passwdFrame.passwdLabel \134) 324 483.67 T ( -text \322Password:\323) 324 473.67 T (entry .login.passwdFrame.passwdEntry) 324 463.67 T (pack .login.passwdFrame -f) 324 443.67 T (ill x -pady 5) 448.8 443.67 T (pack .login.passwdFrame.passwdLabel \134) 324 433.67 T ( -side left) 324 423.67 T (pack .login.passwdFrame.passwdEntry \134) 324 413.67 T ( -side left -expand yes -f) 324 403.67 T (ill x) 463.2 403.67 T 324 252 531 351 R 7 X V 0 X (frame .login) 324 345.67 T (pack .login -padx 10 -pady 10) 324 335.67 T (entryf) 324 315.67 T (ield .login.user \134) 352.8 315.67 T ( -labeltext \322User:\323) 324 305.67 T (pack .login.user -f) 324 295.67 T (ill x -pady 5) 415.2 295.67 T (entryf) 324 275.67 T (ield .login.passwd \134) 352.8 275.67 T ( -labeltext \322Password:\323) 324 265.67 T (pack .login.passwd -f) 324 255.67 T (ill x -pady 5) 424.8 255.67 T 0 10 Q (FIGURE 2) 346.21 227.18 T 1 F ( - [incr W) 392.6 227.18 T (idgets] Login screen) 431.35 227.18 T 0 F (FIGURE 1) 359.33 380.18 T 1 F ( - T) 405.72 380.18 T (cl/Tk Login screen) 419.46 380.18 T 0 -208 1000 792 C FMENDPAGE %%EndPage: "2" 2 %%Page: "3" 3 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (gin between the label and its associated widget may be) 72 429.62 T (given. Alignment is provided by adjusting the mar) 72 417.62 T (gins) 273.48 417.62 T (of a group of Labeledwidget based mega-widgets.) 72 405.62 T (Currently) 72 381.62 T (, our login screen lacks a method of cancella-) 109.68 381.62 T (tion barring closure from the window manager decora-) 72 369.62 T (tion. Since this is not the most elegant method of) 72 357.62 T -0.24 (window removal, \322OK\323 and \322Cancel\323 buttons seem like) 72 345.62 P (worthy additions. A well styled application would also) 72 333.62 T -0.22 (make the buttons be of equal width and signify a default) 72 321.62 P (button associated with striking the return key through) 72 309.62 T (the appearance of an encompassing sunken ring. The) 72 297.62 T (Buttonbox class provides this functionality) 72 285.62 T (, making but-) 243.02 285.62 T (ton management simple. As a manager widget, the But-) 72 273.62 T (tonbox controls the orientation, separation, and size of) 72 261.62 T -0.18 (its button components. Buttons are added with the \324add\325) 72 249.62 P (command. The \324default\325 command allows speci\336cation) 72 237.62 T (of a button within a sunken ring. Figure 4 presents the) 72 225.47 T (improved login screen.) 72 213.47 T -0.01 (Expanding further) 72 189.47 P -0.01 (, a truly useful login screen should be) 144.63 189.47 P (a modal toplevel dialog widget. The [incr W) 72 177.47 T (idgets] Dia-) 249.35 177.47 T (log class supports global, application, and non-modal) 72 165.47 T (dialogs. The dif) 72 153.47 T (ference being the degree of blocking.) 134.87 153.47 T (Global modal dialogs block all applications, whereas) 72 141.47 T (application modal dialogs only block the current appli-) 72 129.47 T -0.24 (cation. This allows processing of the dialog contents fol-) 72 117.47 P (lowing user response and dialog termination. Non-) 72 105.47 T (modal dialogs are non-blocking, enabling the applica-) 72 93.47 T (tion to continue. In this case, the actions attached to the) 72 81.47 T 72 436.29 297 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 470.14 297 720 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 7011 254 115 130.63 59.14 0 121.37 651.86 /red < 72FFFFFFFFFFFFFFFFFFFFFFFFFF66F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700FF5500557FB22EB099FFFFB07AFFCC0087AFB4CD73E6A2 4DBF88F558D7439D50D080C0C080C0808060C000FFA000FFBE8BD28BD9B3FF72 20C0A040C040D060F0E010B499A0FF0019BF2FFF6223852F465F4770FF0000FF > store /green < 9F0000000000000000000000000099DEFFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE700FF1A006B7FB28B3099FFFFB094FFF700CEEEEE0073E6A2 4DBF88F558D74DB38080C0C080C080808060C08000A08040BE5BB477D9B3FF77 2070A0402040D0F0F0E010B489A0E4FF19264F00B641DE4F829E4780FF0000FF > store /blue < FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3BF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BFCC8BEE2F7FB257606BFBB3B015322480FAEEB40073E6A2 4DBF88F558D756CAD050C080C08080C08060C080FF000040BE7A8C65D9B3E085 2070C0802040D06050E010B476A0C40070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7R7F6F76F6F7J" S6F78z8z8z 4F9R6F94F9 ;z" S-F7F6<z"z"z"z 0F6F7R&F6F70F6F70F6=z8z8z8z /F9R%F9/F9/F9 J%J#F' O=FEFEFEFE5FEFEFEFEFEFEF9FEJ"8"J'Js" O=F9F9FFEFEF9F9F9FEP4F6F7J#8#J"Jr P$FEFEF9F94F9P5F9J$:*8'?#8"9$8'8$:$8' OHFEFEFEFEFEFEFEF9F9FEFEFEFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEF9FEFE@s"J1:"8%<"9#8)8"808%J$ F6F7O3FEFEFEF9FEFEFEF9FEFEF9F9FEFEF9F9F9FEF9FEFEF9FEFEFEFEFEF9FEFEF9F9FEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9FEF9FEFEO0F6F6F7ArJ$H"@#9"9%:$9"<"<"J" F9O6F9F9F9F9F9F9FEF9F9F9F9F9F9F9FEFEF9O4F9@sJ"?'I"8#H%9%J# F7O2FEF9FEFEFEFEF9FEF9F9F9F9F9F9F9F9F9F9O8F7F7@tJ":$9&J">%?%9%J$ F9O0FEFEF9FEFEF9F9F9F95FEFEF9FEFEFEF9FEFEFEF9FEFEO8F9F9F9J"8$9(8(8$8"9"<08"808"9" O=FEFEFEFEF9F9FEFEFEF9F9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEFEJs9$9";"x;':$8%:$:$8sJs O=F9F9F9F9F9FEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9O=F7J&Jt P FEF9F9F9F9Q F9J( P F9FEFEFEFEFEF9=z8z8z8z /F7R%F7/F7/F7rF"J"F"F% F7F7R&F7F7F7F7F7F7'z& F6F6F6F6F6F7S,EEF6F6F6F6F68$J% F9F9F9S.F9F9F9F7 J5 OKQ(C3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEJ5 OKQ(FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3J#z" OKC3FEQ%C3FFJ#J# OKFEC3Q$FFC3J#9#J#F$<$J# 4FEFEFEFEO0C3FEFEFEFEFEFEFEP6C3FFJ#F#<%G"J# OKFEC3C3C3FEC3C3C3FEP$FFC3J%9%8)J#J# =FEFEFEFEFEFEFEFEFEFEEEFEFEEEFEFEGC3FEQ$C3FFJ.9"J)8#8#?&9$9&8&9$J# <FEFEEEEEFEFEEEFEFEEEEEFEFEFELFEC3C3FEFEFEC3FEFEFEFEFEFEFEFEFEFEFEFEFEFEC3FEFEFEFEFEFEFEFEFEFEFEOIFFC3J%A&J,9"@&8&8&8&8&J# >FEEEEEEEEEEEEEEEEEGC3FEC3C3FEC3FEC3FEC3C3C3C3FEC3C3C3FEC3C3C3FEC3FEC3C3C3C3FEC3C3C3FEC3C3C3FEOHC3FFJ&:#;"J#J$G&J# <EEEEFEFEFEFEFEEELFEC3?FEFEFEC3FEFEFEC3OHFFC3J"8"9%J#J%G%J# >EEFEEEEEEEEEO"C3FE?C3C3C3C3C3C3C3FEOHC3FFJ-=#=#J#J"D$J# 4EEFEFEEEFEFEEEEEFEFEEEEEFEFEFEFEGFEC3BFEFEC3FEOLFFC3J":.J%;59&8%:,J# 7FEEEFEFEFEFEEEEEEEFEFEFEFEEEO"C3FEC3FE4FEC3C3FEFEFEC3FEC3FEFEFEFEFEFEC3FEFEFEFEC3FEFEFEC3FEFEFEFEC3FEFEFEC3C3C3FEFEFEC3OHC3FFJ&9%9%8#:#J"t8z:$9%;$9$J# 5EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEGFEC31C3C3C3C3C3C3C3C3C3C3C3C3C3C3OIFFC3J#J# OKC3FEQ$C3FFJ#J# OKFEC3Q$FFC3J#J# OKC3FEQ$C3FFJ5 OKQ(FEC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3J5 OKQ(C3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFJz OKQ(EE Jz OIQ,FE J5 OKQ'C3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3J5 OKQ(FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3J#z" OKC3FEQ%C3FFJ#J#J# OKFEC3CFEFEP-FFC3J'J#B#J# 4FEFEFEFEFEFEO#FEFEC3FEQ$C3FFJ&J#J# 6EEEEEEFEFEO0FEC3Q$FFC3J%9%9%8#8#8#8%8);#>#J# <FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEFEFEEEFEFEFEFEC3FEQ$C3FFJ5B'9"8%D#J# ;4FEFEEEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEFEFEEEEEFEFEFEFEFEEEFEFEC3Q$FFC3J(=%9):$A#9":#>#J# 6FEFEFEFEEEEEEEFEEEEEEEFEEEEEEEEEEEFEFEFEFEEEEEEEEEEEEEC3FEQ$C3FFJ%8$9&8&J"J#:"<"<"<"<"J# 6EEEEEEEEFEFEFEEEEEFEFEFEEEEEFEFEFE6EE4FEC3FEFEFEFEFEP1FFC3J%;"8"9"8"J#:"<"<"<"<"J# ;FEFEEEEEEEFEEEFEJC3FEC3C3C3C3C3P1C3FFJ%9%:)G":#>#J# BFEFEEEEEFEFEEEEEEEFEFEEEEEFEFEEEFEFEFEFEC3Q$FFC3J5B'<%D#J# ;4EEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEEEFEFEFEFEEEEEFEFEEEC3FEQ$C3FFJ#<v9%:#8#:%8#:&8#>#J# 4EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEC3Q$FFC3J#J# OKC3FEQ$C3FFJ#J# OKFEC3Q$FFC3J#J#J# OKC3FECC3C3P-C3FFJ5 OKQ(FEC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3&J5C% F7F7F7F7F7OFQ(C3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFF7F7F7F7&JzC& F6F6F6F6F6OFQ(FEF6F6F6F6F68$J% F9F9F9S.F9F9F9F7Jz OIQ,EE <z"z"z 0F6F7R7F6F71F6;z8z8z 1F9R6F91F9 7z8z8z 5F7R6F74F7"J"J" F76F7R7F7 ENDBITMAP %%EndBinary 81 477 288 645.14 R 7 X V 4 8 Q 0 X (option add *textBackground \322GhostWhite\323) 81 639.81 T (frame .login) 81 619.81 T (entryf) 81 609.81 T (ield .login.user -labeltext \322User:\323 \134) 109.8 609.81 T ( -width 10 -f) 81 599.81 T (ixed 10 \134) 157.8 599.81 T ( -validate alphabetic -invalid bell) 81 589.81 T (entryf) 81 569.81 T (ield .login.passwd) 109.8 569.81 T ( -labeltext \322Password:\323 \134) 81 559.81 T ( -show \134267 -command LoginProc) 81 549.81 T (Labeledwidget::alignlabels \134) 81 529.81 T (.login.user .login.passwd) 100.2 519.81 T (pack .login -padx 10 -pady 10) 81 499.81 T (pack .login.user -f) 81 489.81 T (ill x -pady 5) 172.2 489.81 T (pack .login.passwd -f) 81 479.81 T (ill x -pady 5) 181.8 479.81 T 0 10 Q (FIGURE 3) 94.3 452.18 T 1 F ( - Login screen with aligned labels) 140.69 452.18 T 0 0 612 792 C 1 10 Q 0 X 0 0 0 1 0 0 0 K (buttons should perform all processing of the dialog con-) 315 326.33 T (tents.) 315 314.33 T (The Dialog mega-widget class also contains a pre-) 315 296.33 T (de\336ned extensible location called a \322child site\323. This is) 315 284.33 T (an internally packed standard Tk frame which may be) 315 272.33 T (used as a parent for whole combinations of user speci-) 315 260.33 T -0.36 (\336ed widgets. Figure 5 illustrates the position of the child) 315 248.33 P -0.25 (site frame in an instance of the Dialog class. In the login) 315 236.33 P (screen example, this frame can be \336lled with the user) 315 224.33 T (name and password Entry\336eld mega-widgets.) 315 212.33 T 315 333 540 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 362.14 540 720 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 4964 254 173 130.63 88.97 0 355.37 622.03 /red < 72FFFFFFFFFFFFFFFFFFFFFFFFFF66F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700FF5500557FB22EB099FFFFB07AFFCC0087AFB4CD73E6A2 4DBF88F558D7439D50D080C0C080C0808060C000FFA000FFBE8BD28BD9B3FF72 20C0A040C040D060F0E010B499A0FF0019BF2FFF6223852F465F4770FF0000FF > store /green < 9F0000000000000000000000000099DEFFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE700FF1A006B7FB28B3099FFFFB094FFF700CEEEEE0073E6A2 4DBF88F558D74DB38080C0C080C080808060C08000A08040BE5BB477D9B3FF77 2070A0402040D0F0F0E010B489A0E4FF19264F00B641DE4F829E4780FF0000FF > store /blue < FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3BF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BFCC8BEE2F7FB257606BFBB3B015322480FAEEB40073E6A2 4DBF88F558D756CAD050C080C08080C08060C080FF000040BE7A8C65D9B3E085 2070C0802040D06050E010B476A0C40070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7R7F6F76F6F7J" S6F78z8z8z 4F9R6F94F9 ;z" S-F7F6<z"z"z"z 0F6F7R&F6F70F6F70F6=z8z8z8z /F9R%F9/F9/F9 J%J#F' O=FEFEFEFE5FEFEFEFEFEFEF9FEJ"8"J'Js" O=F9F9FFEFEF9F9F9FEP4F6F7J#8#J"Jr P$FEFEF9F94F9P5F9J$:*8'?#8"9$8'8$:$8' OHFEFEFEFEFEFEFEF9F9FEFEFEFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEF9FEFE@s"J1:"8%<"9#8)8"808%J$ F6F7O3FEFEFEF9FEFEFEF9FEFEF9F9FEFEF9F9F9FEF9FEFEF9FEFEFEFEFEF9FEFEF9F9FEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9FEF9FEFEO0F6F6F7ArJ$H"@#9"9%:$9"<"<"J" F9O6F9F9F9F9F9F9FEF9F9F9F9F9F9F9FEFEF9O4F9@sJ"?'I"8#H%9%J# F7O2FEF9FEFEFEFEF9FEF9F9F9F9F9F9F9F9F9F9O8F7F7@tJ":$9&J">%?%9%J$ F9O0FEFEF9FEFEF9F9F9F95FEFEF9FEFEFEF9FEFEFEF9FEFEO8F9F9F9J"8$9(8(8$8"9"<08"808"9" O=FEFEFEFEF9F9FEFEFEF9F9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEFEJs9$9";"x;':$8%:$:$8sJs O=F9F9F9F9F9FEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9O=F7J&Jt P FEF9F9F9F9Q F9J( P F9FEFEFEFEFEF9=z8z8z8z /F7R%F7/F7/F7rF"J"F"F% F7F7R&F7F7F7F7F7F7'z& F6F6F6F6F6F7S,EEF6F6F6F6F68$J% F9F9F9S.F9F9F9F7 Jz OKQ(A2J" S$FFJz" OMQ$C3FF J#9#J$<$ 4FEFEFEFEOBFEFEFEFEFEFEJ#<%G" P/C3C3FEC3C3C3FEJ%9%8) =FEFEFEFEFEFEFEFEFEFEEEFEFEEEFEFEJ.9"J&8#8#?&9$9&8&9$ <FEFEEEEEFEFEEEFEFEEEEEFEFEFEO!FEFEFEC3FEFEFEFEFEFEFEFEFEFEFEFEFEFEC3FEFEFEFEFEFEFEFEFEFEFEJ%A&J)9"@&8&8&8&8& >FEEEEEEEEEEEEEEEEEJC3FEC3FEC3FEC3C3C3C3FEC3C3C3FEC3C3C3FEC3FEC3C3C3C3FEC3C3C3FEC3C3C3FEJ&:#;"J$G& <EEEEFEFEFEFEFEEEO?FEFEFEC3FEFEFEC3J"8"9%J%G% >EEFEEEEEEEEEOCC3C3C3C3C3C3C3FEJ-=#=#J"D$ 4EEFEFEEEFEFEEEEEFEFEEEEEFEFEFEFEO=FEFEC3FEJ":.J";59&8%:, 7FEEEFEFEFEFEEEEEEEFEFEFEFEEEO%FE4FEC3C3FEFEFEC3FEC3FEFEFEFEFEFEC3FEFEFEFEC3FEFEFEC3FEFEFEFEC3FEFEFEC3C3C3FEFEFEC3J&9%9%8#:#Jr8z:$9%;$9$ 5EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEJC31C3C3C3C3C3C3C3C3C3C3C3C3C3C3 JZ OMQ$J" OLFFJz OKQ(EE Jz OIQ,FE Jz OKQ(A2J" S$FFJz" OMQ$C3FFJ# PBFEFEJ'J# 4FEFEFEFEFEFEO#FEFEJ& 6EEEEEEFEFEJ%9%9%8#8#8#8%8);# <FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEFEFEEEFEFEFEFEJ5B'9"8% ;4FEFEEEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEFEFEEEEEFEFEFEFEFEEEFEJ(=%9):$A#9":# 6FEFEFEFEEEEEEEFEEEEEEEFEEEEEEEEEEEFEFEFEFEEEEEEEEEEEEEJ%8$9&8&J"J"<"<"<"<" 6EEEEEEEEFEFEFEEEEEFEFEFEEEEEFEFEFE6EE:FEFEFEFEFEJ%;"8"9"8"J"<"<"<"<" ;FEFEEEEEEEFEEEFEO"C3C3C3C3C3J%9%:)G":# BFEFEEEEEFEFEEEEEEEFEFEEEEEFEFEEEFEFEFEJ5B'<% ;4EEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEEEFEFEFEFEEEEEFEFEEEJ#<v9%:#8#:%8#:&8# 4EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE J# PBC3C3JZ OMQ$J" OLFFJz OKQ(FE Jz OIQ,EE Jz EOAECJ" P7FFJz" GO=EEFF JZJZ KO5AO5J"J" P1ECP'ECJz"Jz" MO1EEECDO1EEEC J%:#9#J%J# O7FEFEFEFEFEFEFEFEO=FEFEFEFE=FEFEJ'=$J' O6FEFEEEEEFEFEFEFEEEO<FEFEEEEEFEFEJ$8$;$J$8(8&9%9% O5FEFEEEEEFEFEFEFEEEO<FEFEEEEEEEEEFEFEFEFEFEFEEEFEFEFEFEFEFEFEFEFEFEJ$J'93 OAFEFEEEODFEFEEEEEFEFEFEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEJ#="># Q:EEEEEEEEEEJ$J$I# OAEEFEFEOEFEFEFEFEFEJ$J%I% OBEEFEFEOCFEFEEEEEEEEEEEEEJ$8$<$J$8#H#;# O5EEFEFEFEFEEEEEFEFEO;EEFEFEFEFEFEFEFEFEJ'>$J.=. O6EEFEFEFEFEEEEEFEFEO;EEFEFEFEFEEEEEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEJ%:#:#J%8s8#8%9%8# O7EEEEEEEEEEEEEEEEO<EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE JzJz MO1ECEO1ECJ"J" LECP'ECJzJz KO5EEAO5EE JZ GO=J" FFFJz EOAEE&J% F7F7F7F7F7S-F7F7F7F7&J& F6F6F6F6F6S-F6F6F6F6F68$J% F9F9F9S.F9F9F9F7 <z"z"z 0F6F7R7F6F71F6;z8z8z 1F9R6F91F9 7z8z8z 5F7R6F74F7"J"J" F76F7R7F7 ENDBITMAP %%EndBinary 323.29 369 530.29 616.29 R 7 X V 4 8 Q 0 X (option add *textBackground \322GhostWhite\323) 323.29 610.95 T (frame .login) 323.29 590.95 T (entryf) 323.29 580.95 T (ield .login.user -labeltext \322User:\323 \134) 352.09 580.95 T ( -width 10 -f) 323.29 570.95 T (ixed 10 \134) 400.09 570.95 T ( -validate alphabetic -invalid bell \134) 323.29 560.95 T ( -command {.login.bbox invoke}) 323.29 550.95 T (entryf) 323.29 540.95 T (ield .login.passwd \134) 352.09 540.95 T ( -labeltext \322Password:\323 -show \134267 \134) 323.29 530.95 T ( -command {.login.bbox invoke}) 323.29 520.95 T (Labeledwidget::alignlabels \134) 323.29 500.95 T ( .login.user .login.passwd) 323.29 490.95 T (buttonbox .login.bbox -orient horizontal) 323.29 470.95 T (.login.bbox add OK -text OK \134) 323.29 460.95 T ( -command LoginProc) 323.29 450.95 T (.login.bbox add Cancel -text Cancel \134) 323.29 440.95 T ( -command exit) 323.29 430.95 T (.login.bbox default OK) 323.29 420.95 T (pack .login -padx 10 -pady 10) 323.29 400.95 T (pack .login.user -f) 323.29 390.95 T (ill x -pady 5) 414.48 390.95 T (pack .login.passwd -f) 323.29 380.95 T (ill x -pady 5) 424.08 380.95 T (pack .login.bbox -f) 323.29 370.95 T (ill x) 414.48 370.95 T 0 10 Q (FIGURE 4) 347.35 348.02 T 1 F ( - Login screen with buttons) 393.74 348.02 T 0 0 612 792 C 315 72 540 189 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 90.72 540 180 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 4028 196 140 100.8 72 0 376.2 99 /red < 72FFFFFFFFFFFFFFFFFFFFFFFFFF66F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700FF5500557FB22EB099FFFFB07AFFCC0087AFB4CD73E6A2 4DBF88F558D7439D50D080C0C080C0808060C000FFA000FFBE8BD28BD9B3FF72 20C0A040C040D060F0E010B499A0FF0019BF2FFF6223852F465F4770FF0000FF > store /green < 9F0000000000000000000000000099DEFFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE700FF1A006B7FB28B3099FFFFB094FFF700CEEEEE0073E6A2 4DBF88F558D74DB38080C0C080C080808060C08000A08040BE5BB477D9B3FF77 2070A0402040D0F0F0E010B489A0E4FF19264F00B641DE4F829E4780FF0000FF > store /blue < FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3BF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BFCC8BEE2F7FB257606BFBB3B015322480FAEEB40073E6A2 4DBF88F558D756CAD050C080C08080C08060C080FF000040BE7A8C65D9B3E085 2070C0802040D06050E010B476A0C40070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7Q+F6F76F6F7J" R*F78z8z8z 4F9Q*F94F9 ;z" R!F7F6<z"z 0F6F7Q<F6=z8z /F9Q;F9 Jr:#@$ OGFEFEFEFEFEFEJ"8&E" OGF9F9F9F9FEFEF9J$8#J# OMF9FEFEF9F9;FEFEJ$9%@$:& P#FEFEFEFEFEFEFEFEFEFEFEFEFEFEF9@s"J"<%=/ F6F7O>F9F9F9FEFEFEFEFEF9FEFEFEF9FEFEF9F9FEFEArJ$A$ F9OEF9FEFEF9F9F9@sJ%G' F7ODFEFEF9F9F9FEFEFEFEF9@tJ$?"A$9& F9O:FEFEF9FEFEF9FEFEF9F9F9F9J"8&8"8'8$8*8& OGFEFEFEFEFEF9FEFEF9F9FEFEF9FEF9FEFEF9F9F9FEFEFEF9F9FEFEFEFEFEJr9%8v9$9";" OGF9F9F9F9F9F9F9F9F9F9FEJ& P=FEF9F9F9F9J( P=F9FEFEFEFEFEF9=z8z /F7Q;F7rF"J% F7F7Q<F7F7F7F7'z& F6F6F6F6F6F7R EEF6F6F6F6F68$J% F9F9F9R"F9F9F9F7 Jz CPBFE J$8"8#B$@#D#G%8";$?# KFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFJ(8"J#D#G) IFFFFFEFEFEFFFFFF9FFFFFFFFFFFFFEFEFEFEFFFFJ$9"9"J#D#F$:" HFFFFFEFEFE9FEFEFEFEFFFFFEFEJ"G$J"<$ O!FEFEFEFEO$FEFEFEFEJ$<"J" GFFFFFEFEO8FE J%<%J$I"A%<$8%=$ O(FFFFFFFFFFFFFFFF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFJ';#J'F"8"@#>$8%;( O'FFFEFEFEFFFFFEFE6FFFFFEFEFEFFFEFFFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFFJ"9$J$9"G"8$J$9$ O'FEFEFFFF;FFFFFEFEFEFFFFFF>FFFFFEFEFFFFJ#9#J" P4FEFEFFFFEFFJ$J$8"J$;" OHFFFFFE9FEFEFEFF:FFFFFEFEJ"8"JR P9FEFF;J"Jt P:FE=FE J$<"J$J"J& GFEFFFFFFEFEFFFF5FFAFFFEFEFFFFJ"<$J" P3FFFFFFFECFFJ$9$J$9"H":$G$9#8$:$ HFEFFFFFFFFFEFFEFFFFFFFFFFFFFEFEFFFFFFFEFEFFFFFFFFFEJ(8"8"9"8"9#8#<#8#<'8"D);#8#>':) IFEFEFFFFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFFFEFFFEFEFFFFFFFFFEFEFFFFFFFFFEFFFFFFFFFEFEFEFFFFFFFFFEFEJ$:%9%9'<'>rC"8%='?%=% KFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE Jz CPBEE <z R EC=z" QLEEFF=Z QL<z R EE Ez OAECJ" P!FFGz" O=EEFF JZJZ 5O54O5J"J" OIECOHECJz"Jz" 7O1EEEC7O1EEEC J%:#9#J%J# O!FEFEFEFEFEFEFEFEO0FEFEFEFE=FEFEJ'=$J' O FEFEEEEEFEFEFEFEEEO/FEFEEEEEFEFEJ$8$;$J$8(8&9%9% MFEFEEEEEFEFEFEFEEEO/FEFEEEEEEEEEFEFEFEFEFEFEEEFEFEFEFEFEFEFEFEFEFEJ$J'93 O+FEFEEEO7FEFEEEEEFEFEFEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEJ#="># PEEEEEEEEEEEJ$J$I# O+EEFEFEO8FEFEFEFEFEJ$J%I% O,EEFEFEO6FEFEEEEEEEEEEEEEJ$8$<$J$8#H#;# MEEFEFEFEFEEEEEFEFEO.EEFEFEFEFEFEFEFEFEJ'>$J.=. O EEFEFEFEFEEEEEFEFEO.EEFEFEFEFEEEEEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEJ%:#:#J%8s8#8%9%8# O!EEEEEEEEEEEEEEEEO/EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE &J% F7F7F7F7F7R!F7F7F7F7&HzJzG& F6F6F6F6F6O1EC8O1ECF6F6F6F6F68$G"J"J% F9F9F9ECOHECOCF9F9F9F7JzJz 5O5EE4O5EE GZ O=F" FFEz OAEE <z"z"z 0F6F7Q+F6F71F6;z8z8z 1F9Q*F91F9 7z8z8z 5F7Q*F74F7"J"J" F76F7Q+F7 ENDBITMAP %%EndBinary 0 10 Q (FIGURE 5) 369 74.89 T 1 F ( - Dialog child site) 415.39 74.89 T 0 0 612 792 C FMENDPAGE %%EndPage: "3" 3 %%Page: "4" 4 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.02 (Once a dialog is created, it is displayed based on modal-) 72 713.33 P (ity via the \324activate\325 command. For application and glo-) 72 701.33 T (bal modal dialogs, control is not immediately returned.) 72 689.33 T -0.06 (Instead, it is delayed until invocation of the \324deactivate\325) 72 677.33 P (command which accepts an optional ar) 72 665.33 T (gument that is) 227.62 665.33 T (returned as a result of the \324activate\325 command. This) 72 653.33 T -0.08 (allows user control of dialog unmapping, status noti\336ca-) 72 641.33 P (tion, and determination.) 72 629.33 T (For example, two buttons could be added to a global) 72 607.33 T -0.17 (modal dialog, each button specifying a command which) 72 595.33 P (executes the \324deactivate\325 command with a unique ar) 72 583.33 T (gu-) 279.82 583.33 T (ment. The application could then activate the dialog,) 72 571.33 T (wait for deactivation, and perform actions based on the) 72 559.33 T (return value. This could all be placed in an \322if\323 state-) 72 547.33 T (ment. The Dialog class uses this optional deactivation) 72 535.33 T (ar) 72 523.33 T (gument to provide default return values of zero and) 79.59 523.33 T (one for the \322OK\323 and \322Cancel\323 buttons as indicators of) 72 511.33 T -0.06 (the dialog exit status. This ability proves useful for stan-) 72 499.33 P (dard dialog management.) 72 487.33 T -0.34 (Figure 6 illustrates the new login screen implemented as) 72 463.33 P (an application modal Dialog composed of the two) 72 451.33 T (Entry\336elds. The need for explicit default button bind-) 72 439.33 T 72 76 297 436 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 98.29 297 436 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 7633 254 176 130.63 90.51 0 123.86 339.34 /red < 3EC472FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700FF5500B2557F2EAFB4CD73E6A24DBF008799FFFFF5B0B0 7AFFCC88BE8BD28BD9B3FF72439D58D750D080C0C080C0808060C000FFA000FF 20C0A040C040D060F0E010B4A099FF0019BF2FFF6223852F465F4770FF0000FF > store /green < 57D79F00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE700FF1A00B26B7F8BEEEE0073E6A24DBF00CE99FFFFF530B0 94FFF788BE5BB477D9B3FF774DB358D78080C0C080C080808060C08000A08040 2070A0402040D0F0F0E010B4A089E4FF19264F00B641DE4F829E4780FF0000FF > store /blue < 8CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BFCC8BEEB22F7F57EEB40073E6A24DBF80FA6BFBB3F560B0 15322488BE7A8C65D9B3E08556CA58D7D050C080C08080C08060C080FF000040 2070C0802040D06050E010B4A076C40070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7R7F6F76F6F7J" S6F78z8z8z 4F9R6F94F9 ;z" S-F7F6<z"z 0F6F7RHF6=z8z /F9RGF9 J%J#F' P FEFEFEFE5FEFEFEFEFEFEF9FEJ"8"J' P F9F9FFEFEF9F9F9FEJ#8#J" P5FEFEF9F94F9J$:*8'?#8"9$8'8$:$8' P+FEFEFEFEFEFEFEF9F9FEFEFEFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEF9FEFE@s"J1:"8%<"9#8)8"808% F6F7ODFEFEFEF9FEFEFEF9FEFEF9F9FEFEF9F9F9FEF9FEFEF9FEFEFEFEFEF9FEFEF9F9FEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9FEF9FEFEArJ$H"@#9"9%:$9"<"<" F9OGF9F9F9F9F9F9FEF9F9F9F9F9F9F9FEFEF9@sJ"?'I"8#H%9% F7OCFEF9FEFEFEFEF9FEF9F9F9F9F9F9F9F9F9F9@tJ":$9&J">%?%9% F9OAFEFEF9FEFEF9F9F9F95FEFEF9FEFEFEF9FEFEFEF9FEFEJ"8$9(8(8$8"9"<08"808"9" P FEFEFEFEF9F9FEFEFEF9F9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEFEJs9$9";"x;':$8%:$:$8s P F9F9F9F9F9FEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9J& P1FEF9F9F9F9J( P1F9FEFEFEFEFEF9=z8z /F7RGF7rF"J% F7F7RHF7F7F7F7'z& F6F6F6F6F6F7S,EEF6F6F6F6F68$J% F9F9F9S.F9F9F9F7 J5 OKQ(BDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEJ5 OKQ(FEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDJ#z" OKBDFEQ%BDFFJ#J# OKFEBDQ$FFBDJ#9#J#F$<$J# 4FEFEFEFEO0BDFEFEFEFEFEFEFEP6BDFFJ#F#<%G"J# OKFEBDBDBDFEBDBDBDFEP$FFBDJ%9%8)J#J# =FEFEFEFEFEFEFEFEFEFEEEFEFEEEFEFEGBDFEQ$BDFFJ.9"J)8#8#?&9$9&8&9$J# <FEFEEEEEFEFEEEFEFEEEEEFEFEFELFEBDBDFEFEFEBDFEFEFEFEFEFEFEFEFEFEFEFEFEFEBDFEFEFEFEFEFEFEFEFEFEFEOIFFBDJ%A&J,9"@&8&8&8&8&J# >FEEEEEEEEEEEEEEEEEGBDFEBDBDFEBDFEBDFEBDBDBDBDFEBDBDBDFEBDBDBDFEBDFEBDBDBDBDFEBDBDBDFEBDBDBDFEOHBDFFJ&:#;"J#J$G&J# <EEEEFEFEFEFEFEEELFEBD?FEFEFEBDFEFEFEBDOHFFBDJ"8"9%J#J%G%J# >EEFEEEEEEEEEO"BDFE?BDBDBDBDBDBDBDFEOHBDFFJ-=#=#J#J"D$J# 4EEFEFEEEFEFEEEEEFEFEEEEEFEFEFEFEGFEBDBFEFEBDFEOLFFBDJ":.J%;59&8%:,J# 7FEEEFEFEFEFEEEEEEEFEFEFEFEEEO"BDFEBDFE4FEBDBDFEFEFEBDFEBDFEFEFEFEFEFEBDFEFEFEFEBDFEFEFEBDFEFEFEFEBDFEFEFEBDBDBDFEFEFEBDOHBDFFJ&9%9%8#:#J"t8z:$9%;$9$J# 5EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEGFEBD1BDBDBDBDBDBDBDBDBDBDBDBDBDBDOIFFBDJ#J# OKBDFEQ$BDFFJ#J# OKFEBDQ$FFBDJ#J# OKBDFEQ$BDFFJ5 OKQ(FEBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDJ5 OKQ(BDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFJz OKQ(EE Jz OIQ,FE J5 OKQ'BDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDJ5 OKQ(FEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDJ#z" OKBDFEQ%BDFFJ#J#J# OKFEBDCFEFEP-FFBDJ'J#B#J# 4FEFEFEFEFEFEO#FEFEBDFEQ$BDFFJ&J#J# 6EEEEEEFEFEO0FEBDQ$FFBDJ%9%9%8#8#8#8%8);#>#J# <FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEFEFEEEFEFEFEFEBDFEQ$BDFFJ5B'9"8%D#J# ;4FEFEEEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEFEFEEEEEFEFEFEFEFEEEFEFEBDQ$FFBDJ(=%9):$A#9":#>#J# 6FEFEFEFEEEEEEEFEEEEEEEFEEEEEEEEEEEFEFEFEFEEEEEEEEEEEEEBDFEQ$BDFFJ%8$9&8&J"J#:"<"<"<"<"J# 6EEEEEEEEFEFEFEEEEEFEFEFEEEEEFEFEFE6EE4FEBDFEFEFEFEFEP1FFBDJ%;"8"9"8"J#:"<"<"<"<"J# ;FEFEEEEEEEFEEEFEJBDFEBDBDBDBDBDP1BDFFJ%9%:)G":#>#J# BFEFEEEEEFEFEEEEEEEFEFEEEEEFEFEEEFEFEFEFEBDQ$FFBDJ5B'<%D#J# ;4EEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEEEFEFEFEFEEEEEFEFEEEBDFEQ$BDFFJ#<v9%:#8#:%8#:&8#>#J# 4EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEBDQ$FFBDJ#J# OKBDFEQ$BDFFJ#J# OKFEBDQ$FFBDJ#J#J# OKBDFECBDBDP-BDFFJ5 OKQ(FEBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDJ5 OKQ(BDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFJz OKQ(FE Jz OIQ,EE <z S,ED=z" S*EEFF=Z S*<z S,EE Jz BOAEDJ" P4FFJz" DO=EEFF JZJZ HO5GO5J"J" P.EDP-EDJz"Jz" JO1EEEDJO1EEED J%:#9#J%J# O4FEFEFEFEFEFEFEFEOCFEFEFEFE=FEFEJ'=$J' O3FEFEEEEEFEFEFEFEEEOBFEFEEEEEFEFEJ$8$;$J$8(8&9%9% O2FEFEEEEEFEFEFEFEEEOBFEFEEEEEEEEEFEFEFEFEFEFEEEFEFEFEFEFEFEFEFEFEFEJ$J'93 O>FEFEEEOJFEFEEEEEFEFEFEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEJ#="># Q=EEEEEEEEEEJ$J$I# O>EEFEFEOKFEFEFEFEFEJ$J%I% O?EEFEFEOIFEFEEEEEEEEEEEEEJ$8$<$J$8#H#;# O2EEFEFEFEFEEEEEFEFEOAEEFEFEFEFEFEFEFEFEJ'>$J.=. O3EEFEFEFEFEEEEEFEFEOAEEFEFEFEFEEEEEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEJ%:#:#J%8s8#8%9%8# O4EEEEEEEEEEEEEEEEOBEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE &J% F7F7F7F7F7S-F7F7F7F7&JzJzJ& F6F6F6F6F6EO1EDKO1EDEF6F6F6F6F68$J"J"J% F9F9F9DEDP-EDP)F9F9F9F7JzJz HO5EEGO5EE JZ DO=J" CFFJz BOAEE <z"z"z 0F6F7R7F6F71F6;z8z8z 1F9R6F91F9 7z8z8z 5F7R6F74F7"J"J" F76F7R7F7 ENDBITMAP %%EndBinary 81.71 104.71 288.71 333.71 R 7 X V 4 8 Q 0 X (option add *textBackground \322GhostWhite\323) 81.71 328.38 T (dialog .login -modality application) 81.71 308.38 T (.login hide Apply) 81.71 298.38 T (.login hide Help) 81.71 288.38 T (set cs [.login childsite]) 81.71 268.38 T (entryf) 81.71 248.38 T (ield $cs.user -labeltext \322User:\323 \134) 110.51 248.38 T ( -width 10 -f) 81.71 238.38 T (ixed 10 \134) 158.51 238.38 T ( -validate alphabetic) 81.71 228.38 T (entryf) 81.71 218.38 T (ield $cs.passwd \134) 110.51 218.38 T ( -labeltext \322Password:\323 -show \134267) 81.71 208.38 T (pack $cs.user -f) 81.71 188.38 T (ill x -pady 5) 158.51 188.38 T (pack $cs.passwd -f) 81.71 178.38 T (ill x -pady 5) 168.11 178.38 T (Labeledwidget::alignlabels \134) 81.71 158.38 T ( $cs.user $cs.passwd) 81.71 148.38 T (if {[.login activate]} {) 81.71 128.38 T ( LoginProc [$cs.user get] [$cs.passwd get]) 81.71 118.38 T (}) 81.71 108.38 T 0 10 Q (FIGURE 6) 135 83.61 T 1 F ( - Login dialog) 181.39 83.61 T 0 0 612 792 C 1 10 Q 0 X 0 0 0 1 0 0 0 K (ings has been left to the Dialog class, making the appli-) 315 713.33 T (cation even cleaner) 315 701.33 T (.The comparative amount of T) 391.64 701.33 T (cl/Tk) 512.86 701.33 T (code required to provide the same \337exible functionality) 315 689.33 T (would be quite substantial.) 315 677.33 T (Since [incr W) 315 653.33 T (idgets] was designed to be a means rather) 370.14 653.33 T -0.03 (than an end, each mega-widget is itself extensible. [incr) 315 641.33 P (Tk] provides the mechanism and framework to build) 315 629.33 T (new mega-widgets based upon existing ones using) 315 617.33 T (object-oriented techniques such as inheritance and com-) 315 605.33 T (position. [incr W) 315 593.33 T (idgets] provides \322child sites\323 which) 382.65 593.33 T (enable the visual aspects of a mega-widget to be aug-) 315 581.33 T (mented.) 315 569.33 T (The login screen example could bene\336t from this capa-) 315 545.33 T (bility) 315 533.33 T (. A new \322Login\323 mega-widget derived from the) 335.47 533.33 T (Dialog class can be created, encapsulating the combina-) 315 521.33 T -0.14 (tion of widgets required to implement login screen func-) 315 509.33 P -0.18 (tionality and enable reuse across many new projects. As) 315 497.33 P (a mega-widget, the Login class should maintain the) 315 485.33 T (standard options such as background and cursor) 315 473.33 T (. It) 506.08 473.33 T (should also provide unique options for specifying the) 315 461.33 T (labels of the entry widgets so they may be easily modi-) 315 449.33 T -0.4 (\336ed. Figure 7 shows the [incr T) 315 437.33 P -0.4 (cl]/[incr Tk] code needed) 437.74 437.33 P (to implement the \322Login\323 mega-widget class.) 315 425.33 T (The Login mega-widget can now be reused in new) 315 401.33 T -0.39 (applications. It can be used as the front end to a database) 315 389.33 P (or a system administration tool. Since the labels were) 315 377.33 T (made public, the Login class can even be international-) 315 365.33 T (ized. For example, the \322-userlabel\323, \322-passwdlabel\323) 315 353.33 T (options could be given in a foreign dialect or read from) 315 341.33 T (a language speci\336c con\336guration \336le. Since the Login) 315 329.33 T (class was derived from the Dialog class, the button) 315 317.33 T (labels may be modi\336ed as well. T) 315 305.33 T (o illustrate, Figure 8) 449.01 305.33 T (depicts an instance of the Login mega-widget in Span-) 315 293.33 T (ish.) 315 281.33 T (One \336nal point. It should be noted that the lack of an) 315 257.33 T -0.12 (option being made public does not make it inaccessible.) 315 245.33 P (The dilemma is that keeping all options tends to cause) 315 233.33 T -0.1 (option explosion, yet only providing a few limits useful-) 315 221.33 P (ness. As a general rule, standard options should be kept) 315 209.33 T (as well as frequently used options. In the Login mega-) 315 197.33 T (widget, standard options were kept and each label was) 315 185.33 T (provided a unique option due to a high degree of antici-) 315 173.33 T -0.36 (pated usage. Other options such as \322-foreground\323 can be) 315 161.33 P (accessed on an as needed basis via the [incr Tk] \324com-) 315 149.33 T -0.37 (ponent\325 command or using the option database. Figure 9) 315 137.33 P (illustrates both of these methods of component access.) 315 125.33 T FMENDPAGE %%EndPage: "4" 4 %%Page: "5" 5 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 225 540 729 R 7 X 0 0 0 1 0 0 0 K V 4 8 Q 0 X ( itcl::class Login {) 72 713.67 T ( inherit) 72 703.67 T 5 F (iwidgets::Dialog) 139.2 703.67 T 4 F ( constructor {args} {) 72 683.67 T ( itk_component add user {) 72 673.67 T ( Entryf) 72 663.67 T (ield $itk_interior.user -labeltext \322User:\323 -width 10 \134) 168 663.67 T ( -f) 72 653.67 T (ixed 10 -validate alphabetic) 268.8 653.67 T ( } {) 72 643.67 T ( keep -cursor -background) 72 633.67 T ( }) 72 623.67 T ( pack $itk_component\050user\051 -f) 72 613.67 T (ill x -pady 5) 254.4 613.67 T ( itk_component add passwd {) 72 593.67 T ( Entryf) 72 583.67 T (ield $itk_interior.passwd -labeltext \322Password:\323 -show \134267) 163.2 583.67 T ( } {) 72 573.67 T ( keep -cursor -background) 72 563.67 T ( }) 72 553.67 T ( pack $itk_component\050passwd\051 -f) 72 543.67 T (ill x -pady 5) 264 543.67 T ( hide Help) 72 523.67 T ( hide Apply) 72 513.67 T ( eval itk_initialize $args) 72 493.67 T ( }) 72 483.67 T ( itk_option def) 72 463.67 T (ine -userlabel userLabel Text \322User:\323 {) 168 463.67 T ( $itk_component\050user\051 conf) 72 453.67 T (igure -labeltext $itk_option\050-userlabel\051) 240 453.67 T ( Labeledwidget::alignlabels $itk_component\050user\051 $itk_component\050passwd\051) 72 443.67 T ( }) 72 433.67 T ( itk_option def) 72 413.67 T (ine -passwdlabel passwdLabel Text \322Password:\323 {) 168 413.67 T ( $itk_component\050passwd\051 conf) 72 403.67 T (igure -labeltext $itk_option\050-passwdlabel\051) 249.6 403.67 T ( Labeledwidget::alignlabels $itk_component\050user\051 $itk_component\050passwd\051) 72 393.67 T ( }) 72 383.67 T ( method name {} {) 72 363.67 T ( return [$itk_component\050user\051 get]) 72 353.67 T ( }) 72 343.67 T ( method passwd {} {) 72 323.67 T ( return [$itk_component\050passwd\051 get]) 72 313.67 T ( }) 72 303.67 T ( }) 72 293.67 T ( Login .login -title \322Login Screen\323 -modality application) 72 273.67 T ( if {[.login activate]} {) 72 253.67 T ( LoginProc [.login name] [.login passwd]) 72 243.67 T ( }) 72 233.67 T 72 225 540 729 R 0.5 H 2 Z N 72 207 540 216 R 7 X V 0 10 Q 0 X (FIGURE 7) 189.15 209.33 T 1 F ( - [incr T) 235.54 209.33 T (cl]/[incr Tk] Login mega-widget class) 270.66 209.33 T 72 90 540 198 R 7 X V 4 8 Q 0 X ( Login .login -title \322Spanish Login Screen\323 \134) 72 182.67 T ( -userlabel \322Nombre:\323 \134) 72 172.67 T ( -passwdlabel \322Contrasena:\323 \134) 72 162.67 T ( -modality application) 72 152.67 T ( .login buttonconf) 72 142.67 T (igure OK -text \322Bien\323) 187.2 142.67 T ( .login buttonconf) 72 132.67 T (igure Cancel -text \322Cancelar\323) 187.2 132.67 T ( if {[.login activate]} {) 72 112.67 T ( LoginProc [.login name] [.login passwd]) 72 102.67 T ( }) 72 92.67 T 72 90 540 198 R N %%BeginBinary: 8344 280 176 144 90.51 0 360 98.49 /red < 72FFFFFFFFFFFFFFFFFFFFFFFFFF66F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD3557F9765E1A36FE700FF5500B22EB099FFFFB07AFFCC0087AFB48858D7CD 73E6A24DBFF5439D50D080C0C080C0808060C000FFA000FF20C0A040C040D060 F0E010B4BE8BD28BD9B3FF72A099FF00192FBFFF6223852F465F4770FF0000FF > store /green < 9F0000000000000000000000000099DEFFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B56B7F9765E1A36FE700FF1A00B28B3099FFFFB094FFF700CEEEEE8858D700 73E6A24DBFF54DB38080C0C080C080808060C08000A080402070A0402040D0F0 F0E010B4BE5BB477D9B3FF77A089E4FF194F2600B641DE4F829E4780FF0000FF > store /blue < FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3BF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B52F7F9765E1A36FE7BFCC8BEEB257606BFBB3B015322480FAEEB48858D700 73E6A24DBFF556CAD050C080C08080C08060C080FF0000402070C0802040D060 50E010B4BE7A8C65D9B3E085A076C400704F2600FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7S#F6F76F6F7J" T"F78z8z8z 4F9S"F94F9 ;z" SGF7F6<z"z 0F6F7S4F6=z8z /F9S3F9 J'J#>$@%J#F' O@FEFEFEFEF9FE;FEFEFEFEFEFEFEFEFE5FEFEFEFEFEFEF9FEJ'J"B"8"J' O?FEFEF9F9F9FEFF9F9F9FFEFEF9F9F9FEJ"J#J#8#J" ODF9<F9F9JFEFEF9F94F9J#8(:%9'9$9%;#H$:*8'?#8"9$8'8$:$8' OAFEFEF9FEFEFEF9FEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9F9FEFEFEFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEF9FEFE@s"J"9%8&9%8"8%8":%;%E1:"8%<"9#8)8"808% F6F7O,F9FEFEF9F9FEF9FEFEFEF9F9FEFEF9FEF9FEFEF9FEF9F9F9FEF9FEFEFEFEFEF9FEFEFEF9FEFEF9F9FEFEF9F9F9FEF9FEFEF9FEFEFEFEFEF9FEFEF9F9FEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9FEF9FEFEArJ#9"9$:$="A%:"J$H"@#9"9%:$9"<"<" F9O.F9F9FEF9F9F9F9FEFEF9FEFEFEF9F94F9F9F9F9F9F9FEF9F9F9F9F9F9F9FEFEF9@sJ"8#A%H"9"J"?'I"8#H%9% F7O-FEF9F9FEFEF9F9F9FE5FEF9FEFEFEFEF9FEF9F9F9F9F9F9F9F9F9F9@tJ">$<"H%J":$9&J">%?%9% F9O-FEFEF9FEFEFEF9F9F95FEFEF9FEFEF9F9F9F95FEFEF9FEFEFEF9FEFEFEF9FEFEJ'9+8$8"9$8"8'8"9";"8$9(8(8$8"9"<08"808"9" O@F9FEFEFEFEF9F9FEFEF9F9F9F9FEFEF9FEF9FEFEFEF9FEFEFEFEFEF9F9FEFEFEFEFEFEFEF9F9FEFEFEF9F9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEFEJ';#:z8s;s9$9";"x;':$8%:$:$8s O?F9F9F9F9F9F9F9F99F9F9F9F9F9F9F9FEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9J& Q-FEF9F9F9F9J"8"J( OFFEFEO1F9FEFEFEFEFEF9=z8z /F7S3F7rF"J% F7F7S4F7F7F7F7'z& F6F6F6F6F6F7SFEEF6F6F6F6F68$J% F9F9F9SHF9F9F9F7 J5 P7Q(C5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEJ5 P7Q(FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5J#z" P7C5FEQ%C5FFJ#J# P7FEC5Q$FFC5J#9#I#J#F$<$J# 4FEFEFEFEFEFEO5C5FEFEFEFEFEFEFEP6C5FFJ"J#F#<%G"J# 6FEP FEC5C5C5FEC5C5C5FEP$FFC5J%8*;#8+9#J#J# =FEFEFEFEFEEEFEFEFEEEFEFEFEFEFEFEFEEEFEFEEEFEFEFEFEFEFEO!C5FEQ$C5FFJ#:'8*9%9"8'J)8#8#?&9$9&8&9$J# 6EEFEFEFEEEEEFEFEFEEEEEFEFEEEEEFEFEFEEEFEFEFEFEFEEEEEFEFEO%FEC5C5FEFEFEC5FEFEFEFEFEFEFEFEFEFEFEFEFEFEC5FEFEFEFEFEFEFEFEFEFEFEOIFFC5J"=#>#J,9"@&8&8&8&8&J# O"EEEEEEEEEEO!C5FEC5C5FEC5FEC5FEC5C5C5C5FEC5C5C5FEC5C5C5FEC5FEC5C5C5C5FEC5C5C5FEC5C5C5FEOHC5FFJ#J":#J#J$G&J# 7EEFE>EEFEFEO'FEC5?FEFEFEC5FEFEFEC5OHFFC5J%J#J%G%J# O.EEEEEEEEO%C5FE?C5C5C5C5C5C5C5FEOHC5FFJ"J"C#8#J#J"D$J# 8EE7FEFEFEFEFEO!FEC5BFEFEC5FEOLFFC5J'D%<'J%;59&8%:,J# <EEFEFEFEFEEEEEFEFEEEEEFEFEFEFEEEO%C5FEC5FE4FEC5C5FEFEFEC5FEC5FEFEFEFEFEFEC5FEFEFEFEC5FEFEFEC5FEFEFEFEC5FEFEFEC5C5C5FEFEFEC5OHC5FFJ#9#8%8#8#8s8#:%9#J"t8z:$9%;$9$J# 4EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEO!FEC51C5C5C5C5C5C5C5C5C5C5C5C5C5C5OIFFC5J#J# P7C5FEQ$C5FFJ#J# P7FEC5Q$FFC5J#J# P7C5FEQ$C5FFJ5 P7Q(FEC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5J5 P7Q(C5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFJz P7Q(EE Jz P5Q,FE J5 P7Q'C5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5J5 P7Q(FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5FEC5J#z" P7C5FEQ%C5FFJ#J#J# P7FEC5CFEFEP-FFC5J%F#J#J# 6FEFEFEFEFEFEO9C5FEQ$C5FFJ'J#J# 5FEFEEEEEFEFEOJFEC5Q$FFC5J$8(8&8"8-9%9%8&9%9#J#J# 4FEFEEEEEEEEEFEFEFEFEFEFEEEFEFEFEFEEEFEFEEEFEFEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEFEFEFEFEFEFEFEFE:C5FEQ$C5FFJ'9'8"9"859,J#J# ;FEFEEEEEFEFEFEEEFEFEEEEEEEFE4FEFEEEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEFEEEFEFEEEFEFEEEEEFEFE>FEC5Q$FFC5J"B%=%@":#<#J#J# DEEEEEEEEEEFEEEEEEEEEEEEEEEEE:C5FEQ$C5FFJ"9$9&:#A$J#:"<"<"<"<"J# O"EEFEFEFEEEEEFEFEFEFEFEFEFEFE@FEC5FEFEFEFEFEP1FFC5J%;"8"9%>%J#:"<"<"<"<"J# O%FEFEEEEEEEFEEEEEEEEEFEFEEEEE@C5FEC5C5C5C5C5P1C5FFJ$8#H"B%=#F#J#J# 4EEFEFEFEFEFEFEFEEEEEFEFEFEFE:FEC5Q$FFC5J-?%;5>(J#J# 5EEFEFEFEFEEEEEFEFEFEFEEEEEFEFEEE4EEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEEEFEFEFEEEFEFE=C5FEQ$C5FFJ%8%8#8#9&:v9%8#8#8tJ#J# 6EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE:FEC5Q$FFC5J#J# P7C5FEQ$C5FFJ#J# P7FEC5Q$FFC5J#J#J# P7C5FECC5C5P-C5FFJ5 P7Q(FEC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5J5 P7Q(C5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFC5FFJz P7Q(FE Jz P5Q,EE <z SFED=z" SDEEFF=Z SD<z SFEE Jz KOAEDJ" P=FFJz" MO=EEFF JZJZ O#O5O"O5J"J" P7EDP6EDJz"Jz" O%O1EEEDO%O1EEED J'8#J%J# O7FEFEFEFEFEFEFEFEP#FEFEFEFE=FEFEJ)J' O9EEEEEEFEFEEEEEEEP"FEFEEEEEFEFEJ#8%8&J$8(8&9%9%<%8& O?FEFEFEFEFEFEFEFEEEFEFEOBFEFEEEEEEEEEFEFEFEFEFEFEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEFEFEJ'9%J'93:'9" OBFEFEEEEEFEFEFEEEFEFEOHFEFEEEEEFEFEFEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEFEFEEEEEFEFEFEJ&C"J#=">#A#># O9FEFEFEFEEEEEOKEEEEEEEEEEEEEEEEEEJ&<#J$I#=$;" O9EEEEEEFEFEFEFEP$FEFEFEFEFEFEFEFEEEJ%J%I%:% ODEEEEEEEEP!FEFEEEEEEEEEEEEEFEFEEEEEJ#J$8#H#;# OFFEFEOHEEFEFEFEFEFEFEFEFEJ&:'J.=.:( O9FEFEFEFEEEEEFEFEFEFEEEOIEEFEFEFEFEEEEEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEEEFEFEFEEEFEFEJ'8#8%8#8#J%8s8#8%9%8#8s O7EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEOCEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE &J% F7F7F7F7F7SGF7F7F7F7&JzJzJ& F6F6F6F6F6O O1EDO&O1EDMF6F6F6F6F68$J"J"J% F9F9F9MEDP6EDP1F9F9F9F7JzJz O#O5EEO"O5EE JZ MO=J" LFFJz KOAEE <z"z"z 0F6F7S#F6F71F6;z8z8z 1F9S"F91F9 7z8z8z 5F7S"F74F7"J"J" F76F7S#F7 ENDBITMAP %%EndBinary 72 72 540 81 R 7 X V 0 10 Q 0 X (FIGURE 8) 237.26 74.33 T 1 F ( - Spanish login screen) 283.64 74.33 T FMENDPAGE %%EndPage: "5" 5 %%Page: "6" 6 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 12 Q 0 X 0 0 0 1 0 0 0 K (Bene\336ts) 164.17 572 T 1 10 Q (The bene\336ts of mega-widget usage increase proportion-) 72 547.33 T (ally with the complexity of the application. This was) 72 535.33 T (readily apparent in the login screen example. Replace-) 72 523.33 T -0.44 (ment of the more elemental patterns was mostly a matter) 72 511.33 P (of convenience. Y) 72 499.33 T (et as requirements were added, the) 144.03 499.33 T (code savings became substantial. As the example) 72 487.33 T (reached a medium level of complexity) 72 475.33 T (, the bene\336ts) 224.93 475.33 T -0.24 (extended to consistent usage of style. Productivity gains) 72 463.33 P (also became quite noticeable.) 72 451.33 T (As applications increase in size, invariably requiring a) 72 427.33 T (main window and numerous dialogs, mega-widget) 72 415.33 T -0.33 (usage of) 72 403.33 P -0.33 (fers signi\336cant productivity gains and increased) 105.09 403.33 P (reliability) 72 391.33 T (. This could also be seen in the example as) 110.24 391.33 T (well. A savings of a sizable amount of straight T) 72 379.33 T (cl/Tk) 265.72 379.33 T -0.46 (code was achieved and implementation of such things as) 72 367.33 P (modality was abstracted into the Dialog mega-widget) 72 355.33 T (and it\325) 72 343.33 T (s base classes. Since the Dialog class is encapsu-) 97.28 343.33 T (lated and tested, the Login mega-widget was built on a) 72 331.33 T -0.24 (sound foundation. Errors typical of \322cut and paste\323 built) 72 319.33 P (applications, such as for) 72 307.33 T (getting to release a grab, have) 168.47 307.33 T (been eliminated. Developers are free to concentrate on) 72 295.33 T (the application and not low level problems.) 72 283.33 T (T) 72 259.33 T (o draw an analogy to current building construction) 77.41 259.33 T -0.24 (techniques, Tk widgets are bricks and mega-widgets are) 72 247.33 P -0.19 (pre-formed walls built with bricks. It is much quicker to) 72 235.33 P (construct a lar) 72 223.33 T (ge building using walls than bricks.) 128.47 223.33 T (Although in the construction industry) 72 211.33 T (, this creates a lot) 221.35 211.33 T (of cookie cutter) 72 199.33 T (, identical, and boring buildings, appli-) 134.36 199.33 T -0.46 (cation users appreciate this consistency) 72 187.33 P -0.46 (, especially when) 226.72 187.33 P (it increases usability) 72 175.33 T (. A user shouldn\325) 153.01 175.33 T (t be confused dur-) 221.71 175.33 T (ing the operation of an application by being presented) 72 163.33 T (variant combinations of the same widget patterns. Each) 72 151.33 T (one having a unique behavior which users must learn) 72 139.33 T (during operation, rather than from prior experiences) 72 127.33 T (with other more standard interfaces.) 72 115.33 T (The signi\336cance of a consistent style should not be) 72 91.33 T (overlooked. It doesn\325) 72 79.33 T (t always appear in typical T) 157.08 79.33 T (cl/Tk) 267.19 79.33 T 72 598 297 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 626 297 707 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 81 635 288 698 R 7 X V 4 8 Q 0 X (option add *Login*user.foreground Red) 81 692.67 T 1 10 Q ( Or) 81 669.33 T 4 8 Q (.login component user conf) 81 650.67 T (igure \134) 205.8 650.67 T ( -foreground Red) 81 640.67 T 0 10 Q (FIGURE 9) 109.91 610.17 T 1 F ( -Login component access) 156.3 610.17 T 0 0 612 792 C 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.28 (applications. This stems from Tk itself. Its greatest asset) 315 713.33 P -0.38 (is also a liability: a simple and easy to use widget set. Tk) 315 701.33 P (can make it easy for novice programmers to construct) 315 689.33 T (interfaces which conform to random personal styles) 315 677.33 T (rather than any known industry standards. Many) 315 665.33 T -0.34 (unusual applications have been produced with Tk which) 315 653.33 P (have sunken buttons, raised entries, or are packed with) 315 641.33 T (such a lack of padding as to create \322brick walls\323 of wid-) 315 629.33 T (gets. Applications which exhibit these qualities can be) 315 617.33 T (found at the T) 315 605.33 T (cl/Tk archive site. Mega-widgets can) 370.68 605.33 T (lessen the occurrence of these visual works of art while) 315 593.33 T (maintaining simplicity and ease of use. For example,) 315 581.33 T (use of the [incr W) 315 569.33 T (idgets] Buttonbox mega-widget can) 386.8 569.33 T (stop the button \322brick wall\323 ef) 315 557.33 T (fect.) 436.19 557.33 T 0 12 Q (Look-and-Feel) 389.83 526 T 1 10 Q (It is visually evident from the example that the look-) 315 501.33 T (and-feel of [incr W) 315 489.33 T (idgets] is Motif. Adherence to the) 391.51 489.33 T (style guide is close. Little ef) 315 477.33 T (fort has been spent attempt-) 427.59 477.33 T (ing to make minor improvements. This is even more) 315 465.33 T (clear in some of the lar) 315 453.33 T (ger [incr W) 406.74 453.33 T (idget] dialog mega-) 452.43 453.33 T (widget classes such as the FileSelectionDialog. The) 315 441.33 T (Motif likeness is also evident in the initial selection of) 315 429.33 T (classes which comprise the mega-widget set, including) 315 417.33 T (most of the Motif favorites. It even extends beyond) 315 405.33 T (appearance to behavior and options.) 315 393.33 T (The Motif look-and-feel was chosen because of its) 315 369.33 T -0.17 (strength in the industry and customer requirements. The) 315 357.33 P -0.12 (demand of the current [incr W) 315 345.33 P -0.12 (idgets] customer base is a) 435.35 345.33 P (Motif appearance and behavior) 315 333.33 T (, regardless of the under-) 439.28 333.33 T (lying implementation. Thus, very few liberties were) 315 321.33 T (taken in the visual style and behavioral aspects of [incr) 315 309.33 T (W) 315 297.33 T (idgets]. Instead, concepts such as extensible child) 324.04 297.33 T (sites and \337exible component con\336guration option sets) 315 285.33 T (have been implemented which allow developer diver-) 315 273.33 T (gence from the Motif style on an as needed basis.) 315 261.33 T 0 12 Q (Extensibility) 395.16 230 T 1 10 Q -0.01 (The extensibility of [incr W) 315 211.33 P -0.01 (idgets] is based on a similar) 426.2 211.33 P (concept found in Motif called \322child sites\323 which allow) 315 199.33 T (the basic functionality and visual appearance of an) 315 187.33 T (existing mega-widget to be augmented. The idea is sim-) 315 175.33 T (ple, yet it yields a powerful mechanism by which mega-) 315 163.33 T -0.1 (widgets become malleable and reusable. They allow for) 315 151.33 P (the possibility of unanticipated future requirements,) 315 139.33 T (making for a much less restrictive widget set.) 315 127.33 T (Consider an application which requires a icon selection) 315 103.33 T (dialog, visually displaying the icon as the textual name) 315 91.33 T -0.08 (is selected from the list. Also, suppose we would like to) 315 79.33 P FMENDPAGE %%EndPage: "6" 6 %%Page: "7" 7 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (see this canvas on which the icon is presented lie) 72 713.33 T (between the listbox and entry widget. This could easily) 72 701.33 T (be implemented using the [incr W) 72 689.33 T (idgets] Selectiondia-) 207.97 689.33 T (log mega-widget which maintains a child site, as) 72 677.33 T (depicted in Figure 10.) 72 665.18 T (The advantages of child sites can be seen by examining) 72 641.18 T (the opposite situation. Had the SelectionDialog been) 72 629.18 T (designed minus a child site, the user would have been) 72 617.18 T 72 72 297 603 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 90 297 594 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 12737 222 379 114.17 194.91 0 128.83 387 /red < 3EC472FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700FF5500B2557F2EAFB4CD73E6A24DBF008799FFFFF5B0B0 7AFFCC88BE8BD28BD9B3FF72439D58D750D080C0C080C0808060C000FFA000FF 20C0A040C040D060F0E010B4A099FF0019BF2FFF6223852F465F4770FF0000FF > store /green < 57D79F00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE700FF1A00B26B7F8BEEEE0073E6A24DBF00CE99FFFFF530B0 94FFF788BE5BB477D9B3FF774DB358D78080C0C080C080808060C08000A08040 2070A0402040D0F0F0E010B4A089E4FF19264F00B641DE4F829E4780FF0000FF > store /blue < 8CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BFCC8BEEB22F7F57EEB40073E6A24DBF80FA6BFBB3F560B0 15322488BE7A8C65D9B3E08556CA58D7D050C080C08080C08060C080FF000040 2070C0802040D06050E010B4A076C40070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7QEF6F76F6F7J" RDF78z8z8z 4F9QDF94F9 ;z" R;F7F6<z"z 0F6F7R(F6=z8z /F9R'F9 J%J'>$H" O>FEFEFEFE>FEFEFEFEF9FEFEFEFEFEJ"8"J'?"I" O>F9F9=FEFEF9F9F9FEF9FEJ" P6F9J$:$9'?#8"9$?$:$8"8#8$9' OEFEFEFEFEFEFEFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFE@s"J18%<"9#8'<08,8" F6F7O0FEFEFEF9FEFEF9FEFEFEF9FEFEFEF9F9FEF9FEFEF9FEFEFEFEFEF9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9F9F9FEFEFEF9FEFEFEF9F9FEArJ%9$<"@#9":"A";%>$<$ F9O3F9F9F9F9F9F9F9F9F9F9FEFEFEF9F9F9F9F9F9F9F9F9F9@sJ"8#;%>% F7OMFEF9F9F9F9F9F9F9F9F9F9@tJ%9$G">%>%9%>$ F9O2FEF9FEFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FEJ"838"9"<0808.8" O>FEFEF9F9F9FEFEFEF9F9F9F9FEFEFEF9F9F9FEFEFEF9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9F9FEFEFEF9F9F9FEFEJ%9$:$9s;':$8%9$:$:#9$9% O>F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 =z8z /F7R'F7rF"J% F7F7R(F7F7F7F7'z& F6F6F6F6F6F7R:EEF6F6F6F6F68$J% F9F9F9R<F9F9F9F7 J# 4FEFE J%9%8&9% 8FEFEFEFEFEFEFEFEFEFEEEFEFEFEFEFEFEJ.9, 7FEFEEEEEFEFEEEFEFEEEEEFEFEFEEEFEFEEEFEFEEEEEFEFEJ#@"<% ;EEEEEEFEEEEEEEJ& LEEEEFEFEFEJ"8" O EEFEJ#E% ;FEFEFEFEEEEEJ.>' 7EEFEFEFEFEEEEEEEFEFEFEFEEEEEFEFEFEFEEEJ#8%9%8#8#8% 4EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE H5=z Q6BDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFE3EDH5J" Q6FEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBD9FFH#z"?r"r" BDFEQ3BDFFE6EDE6FFH#J#E" FEBDQ2FFBDFFH&I#J#G" BDFEBDFEFEFEFEPHBDFFEDH%J"J#D" FEBDBDBD4BDPIFFBDFFH#J#F$ BDFEQ2BDFFEEEDEDH#9$:$8&:$J#C$ FEBDFEFEFEFEFEFEFEFEFEBDFEFEFEFEPEFFBDFFFFEEH#9%8-9%J#G$ BDFEBDBDBDFEFEBDBDBDFEBDBDFEBDFEBDFEBDBDBDFEPDBDFFEEEDEDH#J#B$ FEBDQ2FFBDFFFFEEH#J#H$ BDFEQ2BDFFEEEDEDH#J#A$ FEBDQ2FFBDFFFFEEH*8(;(J#I$ BDFEBDFEBDFEFEFEBDBDFEFEFEBDBDFEFEFEBDFEFEFEBDPDBDFFEEEDEDH"r:$8wJ#@$ FEBDBDBDBDBDPEFFBDFFFFEEH#J#J$ BDFEQ2BDFF4EEEDEDH#J#?#u FEBDQ2FFBDFFFFEDH#J#@"B" BDFEQ2BDFFEDEDH#J#?z FEBDQ2FFBD/E6H#J#?Z BDFEQ2BDFF/H#J#J" FEBDQ2FFBD7EDH#J#Av" BDFEQ2BDFFEEEDH#J# FEBDQ2FFBDH#J# BDFEQ2BDFFH#8$:$8&8&9&9$:$:$J# FEBDFEFEFEFEFEFEFEFEFEBDFEFEBDFEFEFEFEBDFEFEFEFEFEFEFEFEFEFEFEFEP*FFBDH)848&8&8&8&J# BDFEBDFEBDBDBDFEFEBDBDBDFEBDBDFEBDFEBDFEBDBDFEBDBDBDFEBDFEBDBDBDFEBDBDBDFEFEBDBDBDFEFEBDBDBDFEP)BDFFH#;"J$9&8&J# FEBDBD?FEFEFEBDFEFEFEBDBDFEFEFEBDP)FFBDH#J%9%9%J# BDFEEBDBDBDBDBDBDBDFEBDBDBDFEP)BDFFH#;"J"8"<"J# FEBDFEBFEFEFEP-FFBDH)8(;"8%8%9&8&8&J# BDFEBDBDFEFEFEBDBDFEFEFEBDBDFEFEFEFEFEBDFEFEFEFEBDFEFEFEBDBDFEFEFEBDBDFEFEFEBDP)BDFFH#8$:$8r8$9%:$:$:$J# FEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDP*FFBDH#J# BDFEQ2BDFFH#J$J# FEBD5FEFEFEPHFFBDH#J$J# BDFE5BDBDBDPHBDFFH#J# FEBDQ2FFBDH5 Q6BDFEE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFE6FFBDFFH$z# FEBDFFQ1E6FFBDH$J$ BDFEE6Q0FEBDFFH$J$ FEBDFFQ0E6FFBDH$J$ BDFEE6Q0FEBDFFH(:$9&9$J$ FEBDFFE6FEFEFEFEFEFEFEE6FEFEFEFEFEFEPEE6FFBDH)8&8&8&J$ BDFEE6FEE6E6E6FEFEE6E6E6FEE6FEE6E6E6FEE6E6E6FEPDFEBDFFH$:"G$J$ FEBDFFE6FEFEFEPEE6FFBDH$J%J$ BDFEE66E6E6E6E6PDFEBDFFH$:"J"J$ FEBDFFFE4FEPDE6FFBDH)8&8%9&J$ BDFEE6E6FEFEFEE6E6FEFEFEE6FEFEFEFEE6FEFEFEE6PDFEBDFFH(:$9%:$J$ FEBDFFE6E6E6E6E6E6E6E6E6E6E6E6E6E6PEE6FFBDH$J$ BDFEE6Q0FEBDFFH$J$ FEBDFFQ0E6FFBDH$J$ BDFEE6Q0FEBDFFH5 Q6FEBDFFE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FEE6FFBDH#z" BDFEQ3BDFFH#J# FEBDQ2FFBDH#:#J# BDFEFEFEQ,BDFFH#:"J# FEBDBDQ-FFBDH#J# BDFEQ2BDFFH#8$:$:$J# FEBDFEFEFEFEFEFEFEFEFEPMFFBDH(9&8&J# BDFEBDFEBDBDBDFEBDBDBDFEFEBDBDBDFEPLBDFFH#>&<"J# FEBDBDFEFEFEBDBDPLFFBDH#?%J# BDFEBDBDBDFEQ%BDFFH#>"@"J# FEBDFEFEPLFFBDH08&J# BDFEBDBDFEFEFEBDFEBDBDFEFEFEBDBDFEFEFEBDPLBDFFH#8&8$:$J# FEBDBDBDBDBDBDBDBDBDBDBDBDPMFFBDH#J# BDFEQ2BDFFH#J# FEBDQ2FFBDH#J# BDFEQ2BDFFH#J# FEBDQ2FFBDH#J# BDFEQ2BDFFH#J# FEBDQ2FFBDH#J# BDFEQ2BDFFH#J# FEBDQ2FFBDH#J# BDFEQ2BDFFH#8$8&9%:$:$J# FEBDFEFEFEFEFEFEBDFEFEFEFEFEFEFEFEFEFEFEP?FFBDH08&8&8&J# BDFEBDFEBDBDBDFEBDBDFEBDFEBDFEBDBDBDBDFEFEBDBDBDFEFEBDBDBDFEP>BDFFH#8$A$="8&J# FEBDFEFEFEFEFEFEBDBDFEFEFEBDP>FFBDH#8%?%A%J# BDFEBDBDBDBDFEBDBDBDBDBDBDFEP>BDFFH#;"J"8"J# FEBDFE4FEFEPBFFBDH+;/8&J# BDFEBDBDFEFEFEBDBDFEFEBDBDFEFEFEBDFEBDBDFEFEFEBDBDFEFEFEBDP>BDFFH#8$8r8&8$:$J# FEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDP?FFBDH#J# BDFEQ2BDFFH#J# FEBDQ2FFBDH#J# BDFEQ2BDFFH#J# FEBDQ2FFBDH#J# BDFEQ2BDFFH#J# FEBDQ2FFBDH&I#J#J# BDFEBDFEFEFEFE>FEFEP(BDFFH%J"J"J# FEBDBDBD4BD?BDP)FFBDH#J# BDFEQ2BDFFH#;#9$8(8$:$9%9&9$J# FEBDFEFEFEFEFEFEFEFEBDFEFEFEFEFEFEFEFEFEFEFEFEFEFEBDFEFEFEFEFEFEP)FFBDH#:$8.8%8&8&8&8%J# BDFEFEBDBDFEBDBDBDFEBDBDFEBDBDBDFEBDBDBDBDFEFEBDBDBDFEBDBDBDBDFEBDFEBDBDBDFEBDBDBDP)BDFFH#9#;$J$J# FEBDFEBDFEFEFE9FEFEFEP7FFBDH#9#;%8&F%J# BDFEBDFEBDBDBDBDBDFEBDFEBDFEBDBDBDP7BDFFH#:#=":"J# FEBDBDFEFEFEPMFFBDH%9*9$8'8&8,9'J#Av BDFEBDFEBDFEFEBDBDFEFEFEBDBDFEBDFEBDFEFEFEBDBDFEFEFEBDBDFEFEFEBDFEBDFEFEFEFEBDFEFEFEBDFEP'BDFFEDH&9#8$?&:$:u:&J#@" FEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDP'FFBDEDH#J#?z BDFEQ2BDFF/E6H#F$J# FEBDFEFEBDPMFFBDH#F#J# BDFEBDBDQ BDFFH#J# FEBDQ2FFBDH#J# BDFEQ2BDFFH#J# FEBDQ2FFBDH#E$G#J# BDFEFEFEFEFEFEP;BDFFH#8"B#H"J# FEBDFEBDBDBDP<FFBDH#J# BDFEQ2BDFFH)9$A$8&;#:$8&:$J# FEBDBDFEFEFEFEFEFEFEFEFEFEFEFEBDFEFEFEFEFEFEFEFEFEBDFEFEFEFEFEFEP#FFBDH)8&?-9%8-8&J# BDFEBDBDFEBDBDBDFEBDBDBDFEFEBDBDBDFEBDBDFEBDBDBDFEFEBDBDFEFEBDBDBDFEBDBDFEFEBDBDFEFEBDBDBDFEP"BDFFH#?$A$A"C"<$J#?Z FEBDFEFEFEFEFEFEBDBDFEFEFEP#FFBD/H#?%@%J%J#?"C" BDFEBDBDBDBDBDBDBDBD?BDBDBDBDP"BDFFE6EDH#<";"C"J"J#Bt$ FEBDFEFEFEBFEP"FFBDEEEDEDE6H#8,8-959(J#@$ BDFEBDFEFEFEBDBDBDFEFEFEBDFEFEFEFEFEFEBDBDFEFEFEBD6FEFEFEBDBDFEFEFEBDFEFEFEBDBDFEFEFEBDBDFEFEFEFEBDBDFEFEFEBDP"BDFFE6FFFFH#9$9$9'8$:$8r8$8$8#8$J#J$ FEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDP#FFBD4EDEDE6H#J#A$ BDFEQ2BDFFE6FFFFH#J$J#I$ FEBD<FEFEFEPAFFBDEDEDE6H#J$J#B$ BDFE<BDBDBDPABDFFE6FFFFH#J#H$ FEBDQ2FFBDEDEDE6H#J#C$ BDFEQ2BDFFE6FFFFH#J#G$ FEBDQ2FFBDEDEDE6H#J#J#D$ BDFE<FEFEPBBDFFE6FFEDH#8"J"J#H" FEBDFE9BDPCFFBDE6H#J#E" BDFEQ2BDFFE6H)8&8%:$;#J#G" FEBDBDFEFEFEFEFEFEBDFEFEFEFEFEFEFEFEFEFEFEFEP?FFBDE6H5?Z Q6BDFEBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFF/H5>" Q6FEBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFHz=z Q6EE3EE HZ R"J" R3EDJz" 4QLEEED J# P6FEFEJ"8" P5FEFEJ" P;FEJ& P8EEEEFEFEFEJ":" P8FEFEJ" P5EEJ"8":" P6EEFEFEJ">#:# P1FEEEEEFEFEJ$:"="8" P0FEFEFEEEFEFEJ"9" P7FEFEJ"<" P3FEFEJ";"<"9# P0EEFEEEEEEEJ"8" P>EEFEJ"?"8" P5FEEEFEJ"8#8# P0FEEEFEEEEEJ"C" P/FEFEJ"9#;";" P.FEEEFEEEFEJ#9"=" P1EEFEEEFEJ"=" P:EEEEJ"8"@$ P-FEEEEEEEEEJ#?" P6FEFEEEJ" P2EEJ"8# P0FEEEEEJ"=$ P-EEEEEEEEJ$ P8FEFEFEJ$<"9" P.EEEEEEFEFE J#=$ P5FEFEEEEEEEJ$ P2FEFEFEJ$ P/FEFEFEJ# P-FEFEJ" P;EEJ" P,FEJ" P:EEJ#D# P*FEFEFEFEJ#H" P(FEFEFEJ" P=FE J# P&FEFEJ#J$ P$FEFE8FEFEFEJ"J" P#FE=FE J" PBFE J#J" P#EEEE=EEJz P%=EE Jz 4QLEDI" EDHz R"EE J# 4FEFE J%9%8& 8FEFEFEFEFEFEFEFEFEFEEEFEFEJ.9% 7FEFEEEEEFEFEEEFEFEEEEEFEFEFEEEFEFEJ#@" ;EEEEEE J# ;FEFEJ. 7EEFEFEFEFEEEEEEEFEFEFEFEEEJ#8%9%8#8# 4EEEEEEEEEEEEEEEEEEEEEEEEEEEE H5 R!BDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDH5 R!FEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFEBDFFH#z# BDFEQKBDFFBDH#J# FEBDQKBDFFH#J# BDFEQKFFBDH#J# FEBDQKBDFFH#J# BDFEQKFFBDH#9$:$9&9$J# FEBDFEFEFEFEFEFEFEBDFEFEFEFEFEFEQ0BDFFH#8&8&8&8&J# BDFEFEBDBDBDFEFEBDBDBDFEBDFEBDBDBDFEBDBDBDFEQ/FFBDH#<"G$J# FEBDBDFEFEFEQ0BDFFH#J%J# BDFE8BDBDBDBDQ/FFBDH#<"J"J# FEBDFE4FEQ/BDFFH#8&8&8%9&J# BDFEBDFEFEFEBDBDFEFEFEBDFEFEFEFEBDFEFEFEBDQ/FFBDH#9$:$9%:$J# FEBDBDBDBDBDBDBDBDBDBDBDBDBDBDQ0BDFFH#J# BDFEQKFFBDH#J# FEBDQKBDFFH#J# BDFEQKFFBDH5 R!FEBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFH5 R!BDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDFFBDHz R!EE <z R:ED=z" R8EEFF=Z R8<z R:EE Jz 9O?EDJ" P)FFJz" ;O;EEFF JZJZ ?O3>O3J"J" P#EDP"EDJz"Jz" AO/EEEDAO/EEED J%:#9#J%J# O+FEFEFEFEFEFEFEFEO8FEFEFEFE=FEFEJ'=$J' O*FEFEEEEEFEFEFEFEEEO7FEFEEEEEFEFEJ$8$;$J$8(8&9%9% O)FEFEEEEEFEFEFEFEEEO7FEFEEEEEEEEEFEFEFEFEFEFEEEFEFEFEFEFEFEFEFEFEFEJ$J'93 O5FEFEEEO?FEFEEEEEFEFEFEEEFEFEEEFEFEEEEEFEFEEEFEFEEEEEFEFEJ#="># Q)EEEEEEEEEEJ$J$I# O5EEFEFEO@FEFEFEFEFEJ$J%I% O6EEFEFEO>FEFEEEEEEEEEEEEEJ$8$<$J$8#H#;# O)EEFEFEFEFEEEEEFEFEO6EEFEFEFEFEFEFEFEFEJ'>$J.=. O*EEFEFEFEFEEEEEFEFEO6EEFEFEFEFEEEEEFEFEFEEEFEFEEEFEFEFEFEEEEEEEFEFEFEFEEEJ%:#:#J%8s8#8%9%8# O+EEEEEEEEEEEEEEEEO7EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE &J% F7F7F7F7F7R;F7F7F7F7&JzJzJ& F6F6F6F6F6<O/EDBO/ED;F6F6F6F6F68$J"J"J% F9F9F9;EDP"EDOKF9F9F9F7JzJz ?O3EE>O3EE JZ ;O;J" :FFJz 9O?EE <z"z"z 0F6F7QEF6F71F6;z8z8z 1F9QDF91F9 7z8z8z 5F7QDF74F7"J"J" F76F7QEF7 ENDBITMAP %%EndBinary 81 99 288 378 R 7 X V 4 8 Q 0 X (selectiondialog .iconSel \134) 81 372.67 T ( -title \322Icon Selector\323 \134) 81 362.67 T ( -itemslabel Icons \134) 81 352.67 T ( -selectionlabel Icon \134) 81 342.67 T ( -itemscommand SelectProc) 81 332.67 T (.iconSel hide Help) 81 322.67 T (.iconSel hide Apply) 81 312.67 T (set cs [.iconSel childsite]) 81 292.67 T (canvas $cs.canvas -height 70 \134) 81 282.67 T ( -relief raised -borderwidth 2) 81 272.67 T (pack $cs.canvas -f) 81 262.67 T (ill x -expand yes) 167.4 262.67 T (proc SelectProc {} {) 81 242.67 T ( .iconSel selectitem) 81 232.67 T ( set c [.iconSel childsite].canvas) 81 222.67 T ( $c delete all) 81 212.67 T ( $c create bitmap \134) 81 202.67 T ( [expr [winfo width $c] / 2] \134) 81 192.67 T ( [expr [winfo height $c] / 2] \134) 81 182.67 T ( -bitmap @~/xbm/[.iconSel get].xbm) 81 172.67 T (}) 81 162.67 T (.iconSel insert items end bomb compress \134) 81 142.67 T ( core dsc emacs keyboard telephone \134) 81 132.67 T ( trash workstation) 81 122.67 T (.iconSel activate) 81 102.67 T 0 10 Q (FIGURE 10) 113.41 74.17 T 1 F ( - Icon selector dialog) 164.8 74.17 T 0 0 612 792 C 1 10 Q 0 X 0 0 0 1 0 0 0 K (forced to create the icon selector from scratch or) 315 713.33 T (become aware of its internal packing and attempt to) 315 701.33 T (repack around the canvas. A take-it-or) 315 689.33 T (-leave-it design) 468.08 689.33 T (such as this would be limiting, sacri\336cing possibilities) 315 677.33 T (of reuse.) 315 665.33 T (The means by which a child site may be \336lled is not a) 315 641.33 T -0.05 (limiting factor in the [incr W) 315 629.33 P -0.05 (idgets] set. Either composi-) 430.16 629.33 P (tion or inheritance may be used. In the login screen) 315 617.33 T -0.11 (example, both of these mechanisms were demonstrated.) 315 605.33 P (First composition was used. Later) 315 593.33 T (, as the Login mega-) 449.87 593.33 T -0.47 (widget class was produced, the same child site was \336lled) 315 581.33 P (by means of [incr T) 315 569.33 T (cl]\325) 393.17 569.33 T (s inheritance feature. The imple-) 406.5 569.33 T (mentation of child sites and the means by which they) 315 557.33 T (may be accessed in [incr W) 315 545.33 T (idgets] deserves closer) 424.84 545.33 T (inspection.) 315 533.33 T ([incr Tk] has several base classes from which the [incr) 315 509.33 T -0.44 (W) 315 497.33 P -0.44 (idgets] class hierarchy is derived. As base classes they) 324.04 497.33 P (provide option management, standard methods, and a) 315 485.33 T (parent for components called the \322hull\323 widget. The) 315 473.33 T (path to this widget is contained in a protected class vari-) 315 461.33 T (able named \322itk_interior\323. Many mega-widgets within) 315 449.33 T -0.22 ([incr W) 315 437.33 P -0.22 (idgets] successively maintain this variable in the) 345.2 437.33 P (hierarchy) 315 425.33 T (. As a mega-widget is constructed, new com-) 352.11 425.33 T -0.09 (ponents are built of) 315 413.33 P -0.09 (f the path stored in the \322itk_interior\323) 392.04 413.33 P (variable. The mega-widget may also construct a new) 315 401.33 T (hull and store its path in \322itk_interior\323 for a future) 315 389.33 T -0.47 (derived class to use. A \324childsite\325 method is provided for) 315 377.33 P (composition support.) 315 365.33 T 0 12 Q (Flexibility) 401.5 334 T 1 10 Q (Frequently) 315 309.33 T (, a mega-widget straight out of the box) 357.68 309.33 T -0.28 (doesn\325) 315 297.33 P -0.28 (t exactly \336t the bill. Developers need to tweak the) 341.48 297.33 P (visual layout here and there to meet their application) 315 285.33 T (requirements. [incr W) 315 273.33 T (idgets] provides this capability) 402.63 273.33 T (with the viewpoint that \337exibility yields reuse. Each) 315 261.33 T (mega-widget was designed to allow modi\336cation of the) 315 249.33 T (visual aspects of the components through a rich option) 315 237.33 T (suite. As with standard Tk widgets, options may be) 315 225.33 T (speci\336ed at construction time and subsequently there) 315 213.33 T (after with the \324con\336gure\325 command.) 315 201.33 T (This is a very useful feature. For example, all the mega-) 315 177.33 T -0.03 (widgets which support scrollbar attachment do so at the) 315 165.33 P (developer) 315 153.33 T (\325) 354.8 153.33 T (s discretion. One may choose to have each) 357.58 153.33 T (scrollbar independently displayed either statically) 315 141.33 T (,) 513.21 141.33 T (dynamically) 315 129.33 T (, or never) 363.79 129.33 T (. A dynamic scrollbar would) 401.28 129.33 T (appear as needed based on the number of elements in) 315 117.33 T (the widget and their ability to \336t in the allotted space,) 315 105.33 T (whereas a static one is always displayed. Thus, scroll-) 315 93.33 T (bars have built-in intelligence.) 315 81.33 T FMENDPAGE %%EndPage: "7" 7 %%Page: "8" 8 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (Similarly) 72 713.33 T (, Buttonbox usage is not limited to horizontal) 108.58 713.33 T (button display management. Instead, buttons may be) 72 701.33 T (oriented vertically as well as horizontally) 72 689.33 T (. Also, each) 236.6 689.33 T (button may be referred to by its associated tag in com-) 72 677.33 T (mands which allow them to be hidden, shown, con\336g-) 72 665.33 T (ured, or made the default.) 72 653.33 T (Flexibility is built into the lar) 72 629.33 T (ger scale mega-widgets as) 189.34 629.33 T (well. The Selectionbox class allows speci\336cation of) 72 617.33 T (labels, their position relative to their associated widget,) 72 605.33 T (and control over the display of the each element. The) 72 593.33 T (Fileselectionbox provides this same ability) 72 581.33 T (. Thus, the) 242.46 581.33 T (\336lter or selection labeled entries can be unmanaged as) 72 569.33 T (well as the \336le and directory lists.) 72 557.33 T (Lar) 72 533.33 T (ge scale \337exibility presents signi\336cant advantages.) 85.7 533.33 T (Applications may be designed in a more interactive) 72 521.33 T (manner) 72 509.33 T (. Consider the icon selector dialog example) 101.44 509.33 T (again. Suppose an alternate presentation of the dialog) 72 497.33 T (was to be considered. One in which the icon canvas) 72 485.33 T (appears above the list, the selection entry widget is) 72 473.33 T (removed, and an apply button is added. This could be) 72 461.33 T (quickly examined by con\336guring the components as) 72 449.33 T (given in Figure 1) 72 437.33 T (1.) 140.24 437.33 T (The ability to recon\336gure components also allows pro-) 72 413.33 T (grams to be built which change appearance on the \337y) 72 401.33 T (.) 284.36 401.33 T (An application which demands multiple \337avors of a) 72 389.33 T (mega-widget with dif) 72 377.33 T (ferent looks can create one) 157.92 377.33 T (instance and change the options between uses. This can) 72 365.33 T -0.16 (be much more ef) 72 353.33 P -0.16 (\336cient, since construction time is much) 138.81 353.33 P -0.22 (more costly than the time required to con\336gure and map) 72 341.33 P (the widget.) 72 329.33 T 72 72 297 324 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 90.42 297 313.99 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 12524 260 357 133.71 183.6 0 116.86 127.83 /red < 3EC472FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD3557F9765E1A36FE700FF5500B22EAFB4CD73E6A24DBF0087F599FFFFB07A FFCCB088439D58D750D080C0C080C0808060C000FFA000FF20C0A040C040D060 F0E010B4BE8BD28BD9B3FF7299FFA00019BF2FFF6223852F465F4770FF0000FF > store /green < 57D79F00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B56B7F9765E1A36FE700FF1A00B28BEEEE0073E6A24DBF00CEF599FFFFB094 FFF730884DB358D78080C0C080C080808060C08000A080402070A0402040D0F0 F0E010B4BE5BB477D9B3FF7789E4A0FF19264F00B641DE4F829E4780FF0000FF > store /blue < 8CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B52F7F9765E1A36FE7BFCC8BEEB257EEB40073E6A24DBF80FAF56BFBB3B015 3224608856CA58D7D050C080C08080C08060C080FF0000402070C0802040D060 50E010B4BE7A8C65D9B3E08576C4A00070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7R=F6F76F6F7J" S<F78z8z8z 4F9R<F94F9 ;z" S3F7F6<z"z 0F6F7S F6=z8z /F9RMF9 J%J'>$H" P#FEFEFEFE>FEFEFEFEF9FEFEFEFEFEJ"8"J'?"I" P#F9F9=FEFEF9F9F9FEF9FEJ" PIF9J$:$9'?#8"9$?$:$8"8#8$9' P*FEFEFEFEFEFEFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFE@s"J18%<"9#8'<08,8" F6F7OCFEFEFEF9FEFEF9FEFEFEF9FEFEFEF9F9FEF9FEFEF9FEFEFEFEFEF9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9F9F9FEFEFEF9FEFEFEF9F9FEArJ%9$<"@#9":"A";%>$<$ F9OFF9F9F9F9F9F9F9F9F9F9FEFEFEF9F9F9F9F9F9F9F9F9F9@sJ"8#;%>% F7P2FEF9F9F9F9F9F9F9F9F9F9@tJ%9$G">%>%9%>$ F9OEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FEJ"838"9"<0808.8" P#FEFEF9F9F9FEFEFEF9F9F9F9FEFEFEF9F9F9FEFEFEF9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9F9FEFEFEF9F9F9FEFEJ%9$:$9s;':$8%9$:$:#9$9% P#F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 =z8z /F7RMF7rF"J% F7F7S F7F7F7F7'z& F6F6F6F6F6F7S2EDF6F6F6F6F68$J% F9F9F9S4F9F9F9F7 HZ RHJ" S+ECJz" 4RDEDEC J# PJFEFEJ"8" PIFEFEJ" Q!FEJ& PLEDEDFEFEFEJ":" PLFEFEJ" PIEDJ"8":" PJEDFEFEJ">#:# PEFEEDEDFEFEJ$:"="8" PDFEFEFEEDFEFEJ"9" PKFEFEJ"<" PGFEFEJ";"<"9# PDEDFEEDEDEDJ"8" Q$EDFEJ"?"8" PIFEEDFEJ"8#8# PDFEEDFEEDEDJ"C" PCFEFEJ"9#;";" PBFEEDFEEDFEJ#9"=" PEEDFEEDFEJ"=" Q EDEDJ"8"@$ PAFEEDEDEDEDJ#?" PJFEFEEDJ" PFEDJ"8# PDFEEDEDJ"=$ PAEDEDEDEDJ$ PLFEFEFEJ$<"9" PBEDEDEDFEFE J#=$ PIFEFEEDEDEDJ$ PFFEFEFEJ$ PCFEFEFEJ# PAFEFEJ" Q!EDJ" P@FEJ" Q EDJ#D# P>FEFEFEFEJ#H" P<FEFEFEJ" Q#FE J# P:FEFEJ#J$ P8FEFE8FEFEFEJ"J" P7FE=FE J" Q(FE J#J" P7EDED=EDJz P9=ED Jz 4RDECI" ECHz RHED J# 4FEFE J%9%8&9% 8FEFEFEFEFEFEFEFEFEFEEDFEFEFEFEFEFEJ.9, 7FEFEEDEDFEFEEDFEFEEDEDFEFEFEEDFEFEEDFEFEEDEDFEFEJ#@"<% ;EDEDEDFEEDEDEDJ& LEDEDFEFEFEJ"8" O EDFEJ#E% ;FEFEFEFEEDEDJ.>' 7EDFEFEFEFEEDEDEDFEFEFEFEEDEDFEFEFEFEEDJ#8%9%8#8#8% 4EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED H5=z R.BAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFE3ECH5J" R.FEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBAFEBA9FFH#z"?r"r" BAFER+BAFFDEECDEFFH#J#E" FEBAR*FFBAFFH&I#J#G" BAFEBAFEFEFEFEQ@BAFFECH%J"J#D" FEBABABA4BAQAFFBAFFH#J#F$ BAFER*BAFFEDECECH#9$:$8&:$J#C$ FEBAFEFEFEFEFEFEFEFEFEBAFEFEFEFEQ=FFBAFFFFEDH#9%8-9%J#G$ BAFEBABABAFEFEBABABAFEBABAFEBAFEBAFEBABABAFEQ<BAFFEDECECH#J#B$ FEBAR*FFBAFFFFEDH#J#H$ BAFER*BAFFEDECECH#J#A$ FEBAR*FFBAFFFFEDH*8(;(J#I$ BAFEBAFEBAFEFEFEBABAFEFEFEBABAFEFEFEBAFEFEFEBAQ<BAFFEDECECH"r:$8wJ#@$ FEBABABABABAQ=FFBAFFFFEDH#J#J$ BAFER*BAFF4EDECECH#J#?#u FEBAR*FFBAFFFFECH#J#@"B" BAFER*BAFFECECH#J#?z FEBAR*FFBA/DEH#J#?Z BAFER*BAFF/H#J#J" FEBAR*FFBA7ECH#J#Av" BAFER*BAFFEDECH#J# FEBAR*FFBAH#J# BAFER*BAFFH#8$:$8&8&9&9$:$:$J# FEBAFEFEFEFEFEFEFEFEFEBAFEFEBAFEFEFEFEBAFEFEFEFEFEFEFEFEFEFEFEFEQ"FFBAH)848&8&8&8&J# BAFEBAFEBABABAFEFEBABABAFEBABAFEBAFEBAFEBABAFEBABABAFEBAFEBABABAFEBABABAFEFEBABABAFEFEBABABAFEQ!BAFFH#;"J$9&8&J# FEBABA?FEFEFEBAFEFEFEBABAFEFEFEBAQ!FFBAH#J%9%9%J# BAFEEBABABABABABABAFEBABABAFEQ!BAFFH#;"J"8"<"J# FEBAFEBFEFEFEQ%FFBAH)8(;"8%8%9&8&8&J# BAFEBABAFEFEFEBABAFEFEFEBABAFEFEFEFEFEBAFEFEFEFEBAFEFEFEBABAFEFEFEBABAFEFEFEBAQ!BAFFH#8$:$8r8$9%:$:$:$J# FEBABABABABABABABABABABABABABABABABABABABABABABABAQ"FFBAH#J# BAFER*BAFFH#J$J# FEBA5FEFEFEQ@FFBAH#J$J# BAFE5BABABAQ@BAFFH#J# FEBAR*FFBAH5 R.BAFEDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFBAFFH$z# FEBAFFR)DEFFBAH$J$ BAFEDER(FEBAFFH$J$ FEBAFFR(DEFFBAH$J$ BAFEDER(FEBAFFH(:$9&9$J$ FEBAFFDEFEFEFEFEFEFEFEDEFEFEFEFEFEFEQ=DEFFBAH)8&8&8&J$ BAFEDEFEDEDEDEFEFEDEDEDEFEDEFEDEDEDEFEDEDEDEFEQ<FEBAFFH$:"G$J$ FEBAFFDEFEFEFEQ=DEFFBAH$J%J$ BAFEDE6DEDEDEDEQ<FEBAFFH$:"J"J$ FEBAFFFE4FEQ<DEFFBAH)8&8%9&J$ BAFEDEDEFEFEFEDEDEFEFEFEDEFEFEFEFEDEFEFEFEDEQ<FEBAFFH(:$9%:$J$ FEBAFFDEDEDEDEDEDEDEDEDEDEDEDEDEDEQ=DEFFBAH$J$ BAFEDER(FEBAFFH$J$ FEBAFFR(DEFFBAH$J$ BAFEDER(FEBAFFH5 R.FEBAFFDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFFBAH#z" BAFER+BAFFH#J# FEBAR*FFBAH#:#J# BAFEFEFER$BAFFH#:"J# FEBABAR%FFBAH#J# BAFER*BAFFH#8$:$:$J# FEBAFEFEFEFEFEFEFEFEFEQEFFBAH(9&8&J# BAFEBAFEBABABAFEBABABAFEFEBABABAFEQDBAFFH#>&<"J# FEBABAFEFEFEBABAQDFFBAH#?%J# BAFEBABABAFEQKBAFFH#>"@"J# FEBAFEFEQDFFBAH08&J# BAFEBABAFEFEFEBAFEBABAFEFEFEBABAFEFEFEBAQDBAFFH#8&8$:$J# FEBABABABABABABABABABABABAQEFFBAH#J# BAFER*BAFFH#J# FEBAR*FFBAH#J# BAFER*BAFFH#J# FEBAR*FFBAH#J# BAFER*BAFFH#J# FEBAR*FFBAH#J# BAFER*BAFFH#J# FEBAR*FFBAH#J# BAFER*BAFFH#8$8&9%:$:$J# FEBAFEFEFEFEFEFEBAFEFEFEFEFEFEFEFEFEFEFEQ7FFBAH08&8&8&J# BAFEBAFEBABABAFEBABAFEBAFEBAFEBABABABAFEFEBABABAFEFEBABABAFEQ6BAFFH#8$A$="8&J# FEBAFEFEFEFEFEFEBABAFEFEFEBAQ6FFBAH#8%?%A%J# BAFEBABABABAFEBABABABABABAFEQ6BAFFH#;"J"8"J# FEBAFE4FEFEQ:FFBAH+;/8&J# BAFEBABAFEFEFEBABAFEFEBABAFEFEFEBAFEBABAFEFEFEBABAFEFEFEBAQ6BAFFH#8$8r8&8$:$J# FEBABABABABABABABABABABABABABABABAQ7FFBAH#J# BAFER*BAFFH#J# FEBAR*FFBAH#J# BAFER*BAFFH#J# FEBAR*FFBAH#J# BAFER*BAFFH#J# FEBAR*FFBAH&I#J#J# BAFEBAFEFEFEFE>FEFEQ BAFFH%J"J"J# FEBABABA4BA?BAQ!FFBAH#J# BAFER*BAFFH#;#9$8(8$:$9%9&9$J# FEBAFEFEFEFEFEFEFEFEBAFEFEFEFEFEFEFEFEFEFEFEFEFEFEBAFEFEFEFEFEFEQ!FFBAH#:$8.8%8&8&8&8%J# BAFEFEBABAFEBABABAFEBABAFEBABABAFEBABABABAFEFEBABABAFEBABABABAFEBAFEBABABAFEBABABAQ!BAFFH#9#;$J$J# FEBAFEBAFEFEFE9FEFEFEQ/FFBAH#9#;%8&F%J# BAFEBAFEBABABABABAFEBAFEBAFEBABABAQ/BAFFH#:#=":"J# FEBABAFEFEFEQEFFBAH%9*9$8'8&8,9'J# BAFEBAFEBAFEFEBABAFEFEFEBABAFEBAFEBAFEFEFEBABAFEFEFEBABAFEFEFEBAFEBAFEFEFEFEBAFEFEFEBAFEPMBAFFH&9#8$?&:$:u:&J# FEBABABABABABABABABABABABABABABABABABABABABABABAPMFFBAH#J# BAFER*BAFFH#F$J# FEBAFEFEBAQEFFBAH#F#J# BAFEBABAQFBAFFH#J# FEBAR*FFBAH#J# BAFER*BAFFH#J# FEBAR*FFBAH#E$G#J# BAFEFEFEFEFEFEQ3BAFFH#8"B#H"J# FEBAFEBABABAQ4FFBAH#J# BAFER*BAFFH)9$A$8&;#:$8&:$J# FEBABAFEFEFEFEFEFEFEFEFEFEFEFEBAFEFEFEFEFEFEFEFEFEBAFEFEFEFEFEFEPIFFBAH)8&?-9%8-8&J# BAFEBABAFEBABABAFEBABABAFEFEBABABAFEBABAFEBABABAFEFEBABAFEFEBABABAFEBABAFEFEBABAFEFEBABABAFEPHBAFFH#?$A$A"C"<$J# FEBAFEFEFEFEFEFEBABAFEFEFEPIFFBAH#?%@%J%J# BAFEBABABABABABABABA?BABABABAPHBAFFH#<";"C"J"J# FEBAFEFEFEBFEPHFFBAH#8,8-959(J# BAFEBAFEFEFEBABABAFEFEFEBAFEFEFEFEFEFEBABAFEFEFEBA6FEFEFEBABAFEFEFEBAFEFEFEBABAFEFEFEBABAFEFEFEFEBABAFEFEFEBAPHBAFFH#9$9$9'8$:$8r8$8$8#8$J# FEBABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAPIFFBAH#J# BAFER*BAFFH#J$J# FEBA<FEFEFEQ9FFBAH#J$J# BAFE<BABABAQ9BAFFH#J# FEBAR*FFBAH#J# BAFER*BAFFH#J# FEBAR*FFBAH#J#J# BAFE<FEFEQ:BAFFH#8"J"J# FEBAFE9BAQ;FFBAH#J# BAFER*BAFFH)8&8%:$;#J# FEBABAFEFEFEFEFEFEBAFEFEFEFEFEFEFEFEFEFEFEFEQ7FFBAH)8&8&8&9%J# BAFEBABAFEBABABABAFEBABABABABABABAFEFEBABABAFEFEBABAFEQ6BAFFH#F$9&9"J# FEBAFEFEFEBAFEFEFEBABAQ9FFBAH#E%:%J# BAFEFEBABABABABABAFEQ=BAFFH#<"E"J# FEBAFEFEQAFFBAH#8+95J# BAFEBAFEFEFEBABAFEFEFEFE4BAFEFEFEBAFEBABAFEFEFEBABAFEFEFEBAFEFEFEQ5BAFFH#9$8%:&8$8rJ#Av FEBABABABABABABABABABABABABABABABABAQ5FFBAECH#J#@" BAFER*BAFFECH#J#?z FEBAR*FFBA/DEH#J#?Z BAFER*BAFF/H#J#?"C" FEBAR*FFBADEECH#J#Bt$ BAFER*BAFFEDECECDEH#J#@$ FEBAR*FFBADEFFFFH#J#J"J#J$ BAFE6FEFEDFEPIBAFF4ECECDEH#J"E"C"="J#A$ FEBA6BAFEFEBAPIFFBADEFFFFH#J#I$ BAFER*BAFFECECDEH+8$9&;#9$9&8%9&8$;$8&J#B$ FEBABAFEFEFEBAFEFEFEFEFEFEFEBAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBAFEFEFEP:FFBADEFFFFH18&:$8&8&8&8&8#;-J#H$ BAFEBABAFEBABABAFEBABAFEBABABAFEBAFEBABABAFEBABAFEBABABAFEBAFEBABABABABABABAFEBAFEBABABABABAFEBABABAFEBABAFEFEBABAFEP9BAFFECECDEH#:"I#:&@$J"J#C$ FEBAFEFEBABAFEFEFEBAFEFEFE9BAP<FFBADEFFFFH#J#;%?%J#G$ BAFE8BAFEBABABAFEFEBABABAQ(BAFFECECDEH#8&H#9"A"C"J#D$ FEBABAFEBAFEBABAFEFEFEFEPMFFBADEFFECH#?&8%8"9*9-8,8*9"J#H" BAFEBAFEFEFEBAFEFEFEFEFEBAFEFEBABAFEFEFEBABAFEFEFEBABABAFEFEFEBAFEBAFEFEFEBABAFEFEFEFEFEBAFEFEFEBABAFEFEFEFEP8BAFFDEH#9$:$9%8#9#8$;$9&9$8&9$8$8#J#E" FEBABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAP8FFBADEH#J#G" BAFER*BAFFDEH5?Z R.FEBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBA/H5>" R.BAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFBAFFFFHz=z R.ED3ED <z S2EC=z" S0EDFF=Z S0<z S2ED Ez O9ECJ" OGFFGz" O5EDFF JZJZJZ 5O-4O-4O-J"J"J" OAECO@ECO@ECJz"Jz"Jz" 7O)EDEC7O)EDEC7O)EDEC J%:#9#J#G#J%J# LFEFEFEFEFEFEFEFEO+FEFEFEFEO)FEFEFEFE=FEFEJ'=$J"8"J' KFEFEEDEDFEFEFEFEEDO*FEFEO:FEFEEDEDFEFEJ$8$;$J#9&8&;#9#J$8(8&9%9% JFEFEEDEDFEFEFEFEEDO,EDEDFEFEEDFEFEFEFEEDFEFEFEFEFEFEMFEFEEDEDEDEDFEFEFEFEFEFEEDFEFEFEFEFEFEFEFEFEFEJ$J":"9%9%J'93 O(FEFEEDO+FEFEFEEDFEFEFEEDFEFEO1FEFEEDEDFEFEFEEDFEFEEDFEFEEDEDFEFEEDFEFEEDEDFEFEJ"<"=(J#="># P?EDEDEDFEFEEDFEFEEDO&EDEDEDEDEDJ$J#J$I# O(EDFEFEO-FEFEOBFEFEFEFEFEJ$J)H&J%I% O)EDFEFEO)FEFEEDEDEDEDFEFEEDFEFEFEEDO'FEFEEDEDEDEDEDEDJ$8$<$J"<"J$8#H#;# JEDFEFEFEFEEDEDFEFEO2FEFEO-EDFEFEFEFEFEFEFEFEJ'>$J%9%<"J.=. KEDFEFEFEFEEDEDFEFEO1EDFEFEEDEDFEFEEDEDO$EDFEFEFEFEEDEDFEFEFEEDFEFEEDFEFEFEFEEDEDEDFEFEFEFEEDJ%:#:#J#:#9#;#8#;"J%8s8#8%9%8# LEDEDEDEDEDEDEDEDO'EDEDEDEDEDEDEDEDEDEDEDO#EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDJ" Q"FEJ$ Q!FEFEEDJ#;#?# P=EDEDEDEDEDED &J% F7F7F7F7F7S3F7F7F7F7&HzJzJzH& F6F6F6F6F6O)EC8O)EC8O)ECF6F6F6F6F68$G"J"J"J% F9F9F9ECO@ECO@ECO<F9F9F9F7JzJzJz 5O-ED4O-ED4O-ED GZ O5F" FFEz O9ED <z"z"z 0F6F7R=F6F71F6;z8z8z 1F9R<F91F9 7z8z8z 5F7R<F74F7"J"J" F76F7R=F7 ENDBITMAP %%EndBinary 87.14 96.14 285.14 123.14 R 7 X V 4 8 Q 0 X (.iconSel conf) 87.14 117.81 T (igure -childsitepos n \134) 149.54 117.81 T ( -selectionon no) 87.14 107.81 T (.iconSel show Apply) 87.14 97.81 T 0 10 Q (FIGURE 1) 98.29 76.02 T (1) 144.13 76.02 T 1 F ( - Alternate icon selector dialog) 149.13 76.02 T 0 0 612 792 C 1 10 Q 0 X 0 0 0 1 0 0 0 K (For example, consider an application which must con-) 315 560.33 T (\336rm a user request prior to performing the operation. In) 315 548.33 T (addition, due to the serious nature of the operation, the) 315 536.33 T (user must con\336rm positively twice. The following code) 315 524.33 T (segment creates the initial message dialog and con\336g-) 315 512.33 T (ures the message to ask \322Are you sure ?\323. The dialog is) 315 500.33 T (then mapped with the \324activate\325 command. If the user) 315 488.33 T (responds positively) 315 476.33 T (, then the message is changed to) 391.85 476.33 T (\322Are you really sure ?\323 and redisplayed. Only with two) 315 464.33 T -0.35 (af) 315 452.33 P -0.35 (\336rmative replies does the script perform the operation.) 322.59 452.33 P -0.18 (Figure 12 depicts the dialog presentations with dif) 315 440.33 P -0.18 (ferent) 514.36 440.33 P (messages and the associated code.) 315 428.33 T (This same instance of the message dialog can be recon-) 315 132.33 T (\336gured into a error dialog. All the options can be) 315 120.33 T (dynamically changed. It is possible to not only change) 315 108.33 T -0.05 (the bitmap but its location as well. Furthermore, we can) 315 96.33 P (modify the text of the buttons and make the dialog non-) 315 84.33 T 315 153 540 425 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 182 540 416 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 0 0 0 1 0 0 0 K %%BeginBinary: 4520 217 162 86.8 64.8 0 327.2 342.2 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000008EEF9AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000082D78AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000006DB675C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7Q>F6F77F6F7J" R?F78z8z8z 5F9Q=F95F9 <z" R4F7F6=z"z 0F6F7R!F6>z8z /F9R F9 J'J'J"9# O<FEFEFEFEF9FE4FEFEFEF9FEFE?FEFEFEJ'J$J" O;FEFEF9F9F9FE4FEFEF9BFEJ$9"J%J# O:FEFEF9F97F9F9F9F9CF9F9J$9'9"8&8-8#:%9"8&:$9' OEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFEAs"J,8%8"8$:"8"8"8):%8"8$:*8% F6F7O-F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEF9F9F9F9F9FEF9FEF9FEFEFEF9FEFEF9F9FEFEF9F9F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEBrJ$<"H$9"9"<$F$<" F9O2F9F9F9F9F9F9F9F9F9F9FEFEF9F9F9F9AsJ"J% F7O.FEO!FEFEF9F9AtJ$9":$J"F$ F9O&F9FEFEFEFEF9FELFEFEF9FEJ28"9$8$8$8"8"8"9"9'8"8&8,8"9" O;F9FEFEFEFEFEF9F9F9F9FEFEFEF9F9F9FEFEFEF9FEFEF9FEFEF9FEFEFEFEFEFEF9F9FEFEF9FEF9FEFEF9FEFEF9F9F9FEFEFEF9F9F9FEFEFEJ&:$9z8w8'9r9$9s O<F9F9F9F9F9F9F9F97F9F9F9F9F9F9F9F9F9F9F9F9F9 >z8z /F7R F7sF"J& F7F7R!F7F7F7F7F7(z' F6F6F6F6F6F6F7R3D9F6F6F6F6F6F68%J& F9F9F9F9R5F9F9F9F9F7 Ju BFEJ- AFEFED9FED9FED9FED9FED9FEJ/ @FEFED9FED9FED9FED9FED9FED9FEJ&r% ?FEFED9FED9FED9FED9FEJ%=& @D9FED9FEFED9FED9FEJ$?% @FED9FEFED9FED9J$9$9%J#J% @D9FED9D9FED9D9FED9FEBFEFEO?FEFEFEFEJ$9$9&J"8"J' @FED9FEFED9FEFED9FED9FE@FEFEO=FEFED9D9FEFEJ$9$9'J#9+<#9#8%8#8#<%8#8. @D9FED9D9FED9D9FED9FED9FE@D9D9FEFED9FEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9FEFED9FEFED9FEFEFEFEJ*9(J":"9"8'C'B'@"8'<' @FED9FED9FED9FED9FEFED9FED9FED9FE=FEFEFEFEFED9D9FEFEFEFED9D9FEFEFEFED9D9FEFEFEFEFED9D9FEFED9D9D9FEFED9J):(J#A(J%A#D$ @D9FED9FED9FED9FED9FED9FEFEFED9GD9D9D9FEFED9FEFED95FED9D9D9D9D9FEFED9J(:(J#;":#J&A":# @FED9FED9FED9FED9FED9FED9D9D9@FEFED9FEFEAD9D9FEFEFED9FEFEJ(:'J)=%<&J"8"E%># ?D9FEFED9FED9FED9FED9FED9FE?FEFED9D9D9D9FEFED9D9D9D9D9FEFEFED96D9FED9D9D9D9D9D9J'9(J#J"=%<"B#># @D9FEFED9FED9D9FED9FED9FED9O"FEFE7FEFEFED9D9FEFEFEFEFEJ&9'J'=";,=,>' AD9FEFED9FEFED9FED9FED9MD9FEFEFEFED9D9D9FEFEFEFED9D9D9FEFED9D9FEFEFEFED9D9D9FEFED9D9FEFEFEFED9J.J#:%:%@":%9&<%9s:%?# BD9FEFED9FED9FED9FED9FED9FE@D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9J,J" DD9FED9FED9FED9FED9FED9O,FEJ+J$ DFED9FEFEFED9FED9D9D9O,FEFED9J#9$J# DD9FEFED9FEO.D9D9J#9$ DFED9D9FED9J+ BFEFED9FED9FED9FED9FEJ+ CD9FED9FED9FED9FED9FEJv BD9 =z R3D8>z" R1D9FF>Z R1=z R3D9 Jz BO1FE Jz DO-D9 Jz FO)D8J" P FFJz" HO%D9FF JZJZ LKJKJ"J" OHD8OFD8Jz"Jz" O GD9D8MGD9D8 J#:#J#9# O(FEFEFEFEOBFEFEFEFEJ" Q&FEJ$8)9%J% O(D9FEFEFEFED9D9FEFEFEFEFEFEFEFEO?FEFEFEFEJ.J#:' O0FEFED9D9FEFED9FEFED9D9FEFEO7D9FEFEFED9D9FEFEJ'@% O)D9FEFEFEFED9FED9D9D9J"8":#9&J# O*D9D9FEFED9D9FEFEFEO9D9FEJ%9"8" O2D9D9D9D9D9FEJ(J" O4FEFED9FEFED9D9O;D9J.J' O0D9FEFEFEFED9D9D9FEFEFEFED9O=D9FEFEFEFED9J#:%9%J#9#8% O+D9D9D9D9D9D9D9D9D9D9O6D9D9D9D9D9D9D9D9 'J& F7F7F7F7F7F7R4F7F7F7F7F7'JzJzJ' F6F6F6F6F6F6HGD8O GD8HF6F6F6F6F6F68%J"J"J& F9F9F9F9GD8OFD8OBF9F9F9F9F7JzJz LKD9JKD9 JZ HO%J" GFFJz FO)D9 Jz DO-FE Jz BO1D9 =z"z"z 0F6F7Q>F6F71F6<z8z8z 1F9Q=F91F9 7z8z8z 6F7Q=F75F7"J"J" F77F7Q>F7 ENDBITMAP %%EndBinary %%BeginBinary: 4795 254 162 101.6 64.8 0 420.4 342.2 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000008EEF9AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF0055F7DB7DB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000082D78AE78AEFEF0071E7 A24DF70055BE827530B6FFFF69DFDB7DB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000006DB675C755EFB60071E7 A24DF77D55BE9265618EE3002CB2DB7DB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7R5F6F77F6F7J" S6F78z8z8z 5F9R4F95F9 <z" S+F7F6=z"z 0F6F7RFF6>z8z /F9REF9 J'J'J"9# P FEFEFEFEF9FE4FEFEFEF9FEFE?FEFEFEJ'J$J" OMFEFEF9F9F9FE4FEFEF9BFEJ$9"J%J# OLFEFEF9F97F9F9F9F9CF9F9J$9'9"8&8-8#:%9"8&:$9' P)FEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFEAs"J,8%8"8$:"8"8"8):%8"8$:*8% F6F7O?F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEF9F9F9F9F9FEF9FEF9FEFEFEF9FEFEF9F9FEFEF9F9F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEBrJ$<"H$9"9"<$F$<" F9ODF9F9F9F9F9F9F9F9F9F9FEFEF9F9F9F9AsJ"J% F7O@FEO!FEFEF9F9AtJ$9":$J"F$ F9O8F9FEFEFEFEF9FELFEFEF9FEJ28"9$8$8$8"8"8"9"9'8"8&8,8"9" OMF9FEFEFEFEFEF9F9F9F9FEFEFEF9F9F9FEFEFEF9FEFEF9FEFEF9FEFEFEFEFEFEF9F9FEFEF9FEF9FEFEF9FEFEF9F9F9FEFEFEF9F9F9FEFEFEJ&:$9z8w8'9r9$9s P F9F9F9F9F9F9F9F97F9F9F9F9F9F9F9F9F9F9F9F9F9 >z8z /F7REF7sF"J& F7F7RFF7F7F7F7F7(z' F6F6F6F6F6F6F7S*D9F6F6F6F6F6F68%J& F9F9F9F9S,F9F9F9F9F7 Ju BFEJ- AFEFED9FED9FED9FED9FED9FEJ/ @FEFED9FED9FED9FED9FED9FED9FEJ&r% ?FEFED9FED9FED9FED9FEJ%=& @D9FED9FEFED9FED9FEJ$?% @FED9FEFED9FED9J$9$9%J#J&J% @D9FED9D9FED9D9FED9FEBFEFEO2FEFED9FEFEMFEFEFEFEJ$9$9&J"8"J' @FED9FEFED9FEFED9FED9FE@FEFEP4FEFED9D9FEFEJ$9$9'J#9+<#9#8%8#8#;+9%>#9#<%8#8. @D9FED9D9FED9D9FED9FED9FE@D9D9FEFED9FEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9FEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9FEFED9FEFED9FEFEFEFEJ*9(J":"9"8'C'D"8.I'@"8'<' @FED9FED9FED9FED9FEFED9FED9FED9FE=FEFEFEFEFED9D9FEFEFEFED9D9FEFEFEFEFED9D9FEFED9FEFED9D9FEFEFEFED9D9FEFEFEFEFED9D9FEFED9D9D9FEFED9J):(J#A(J#=#A(=%A#D$ @D9FED9FED9FED9FED9FED9FEFEFED9GD9D9D9FEFED9FEFED96D9D9D9D9D9FEFED9FEFED9FED9D9D9D9D9FEFED9J(:(J#;":#J":#:$J&A":# @FED9FED9FED9FED9FED9FED9D9D9@FEFED9FEFECD9FEFEFEFEFE5D9D9FEFEFED9FEFEJ(:'J)=%<&J*@&>"8"E%># ?D9FEFED9FED9FED9FED9FED9FE?FEFED9D9D9D9FEFED9D9D9D9D9FEFEFED9;D9D9D9D9D9FEFED9D9D9FEFEFED9D9FED9D9D9D9D9D9J'9(J#J"F#J%<"B#># @D9FEFED9FED9D9FED9FED9FED9O"FEFE7FEFEFE:FEFED9D9FEFEFEFEFEJ&9'J'=";,B/>"?,>' AD9FEFED9FEFED9FED9FED9MD9FEFEFEFED9D9D9FEFEFEFED9D9D9FEFED9D9FEFEFEFED9D9D9FEFEFED9FEFED9D9FEFEFEFED9D9D9FEFED9D9FEFEFEFED9J.J#:%:%@":%9&;#:%9v;">%9s:%?# BD9FEFED9FED9FED9FED9FED9FE@D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9J,J"J" DD9FED9FED9FED9FED9FED9O,FEO$FEJ+J$J$ DFED9FEFEFED9FED9D9D9O,FEFED9O"FEFED9J#9$J#J# DD9FEFED9FEO.D9D9O#D9D9J#9$ DFED9D9FED9J+ BFEFED9FED9FED9FED9FEJ+ CD9FED9FED9FED9FED9FEJv BD9 =z S*D8>z" S(D9FF>Z S(=z S*D9 Jz O O1FE Jz O"O-D9 Jz O$O)D8J" P,FFJz" O&O%D9FF JZJZ O*KO)KJ"J" P&D8P%D8Jz"Jz" O,GD9D8O,GD9D8 J#:#J#9# O4FEFEFEFEP!FEFEFEFEJ" Q?FEJ$8)9%J% O4D9FEFEFEFED9D9FEFEFEFEFEFEFEFEOLFEFEFEFEJ.J#:' O<FEFED9D9FEFED9FEFED9D9FEFEODD9FEFEFED9D9FEFEJ'@% O5D9FEFEFEFED9FED9D9D9J"8":#9&J# O6D9D9FEFED9D9FEFEFEOFD9FEJ%9"8" O>D9D9D9D9D9FEJ(J" O@FEFED9FEFED9D9OHD9J.J' O<D9FEFEFEFED9D9D9FEFEFEFED9OJD9FEFEFEFED9J#:%9%J#9#8% O7D9D9D9D9D9D9D9D9D9D9OCD9D9D9D9D9D9D9D9 'J& F7F7F7F7F7F7S+F7F7F7F7F7'JzJzJ' F6F6F6F6F6F6O&GD8O-GD8O&F6F6F6F6F6F68%J"J"J& F9F9F9F9O%D8P%D8P F9F9F9F9F7JzJz O*KD9O)KD9 JZ O&O%J" O%FFJz O$O)D9 Jz O"O-FE Jz O O1D9 =z"z"z 0F6F7R5F6F71F6<z8z8z 1F9R4F91F9 7z8z8z 6F7R4F75F7"J"J" F77F7R5F7 ENDBITMAP %%EndBinary 0 0 0 1 0 0 0 K 324 191 531 335 R 7 X V 4 8 Q 0 X (messagedialog .md -modality application \134) 324 329.67 T ( -title Conf) 324 319.67 T (irmation -bitmap questhead \134) 391.2 319.67 T ( -text \322Are you sure ?\323) 324 309.67 T (.md buttonconf) 324 299.67 T (igure OK -text \322Yes\323) 391.2 299.67 T (.md buttonconf) 324 289.67 T (igure Cancel -text \322No\323) 391.2 289.67 T (.md hide Help) 324 279.67 T (if {[.md activate]} {) 324 259.67 T ( .md conf) 324 249.67 T (igure \134) 381.6 249.67 T ( -text \322Are you really sure ?\323) 324 239.67 T ( if {[.md activate]} {) 324 229.67 T ( # Perform operation) 324 219.67 T ( }) 324 209.67 T (}) 324 199.67 T 0 10 Q (FIGURE 12) 354.44 166.17 T 1 F ( - Con\336rmation dialog) 405.83 166.17 T 0 0 612 792 C 315 567 540 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 585 540 720 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 0 0 0 1 0 0 0 K %%BeginBinary: 4792 337 137 121.32 49.32 0 364.68 661.68 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000868EEF9AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000DF82D78AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000E36DB675C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7T,F6F77F6F7J" U-F78z8z8z 5F9T+F95F9 <z" U"F7F6=z"z 0F6F7T=F6>z8z /F9T<F9 Js Q5FEJ"8$ Q5F9F9F9F9J" Q;F9J18$9' Q:FEF9F9F9FEFEFEF9FEFEFEFEFEF9FEFEFEFEFEFEFEFEF9FEFEAs"J#:"8"8"8"8*8" F6F7Q$FEFEF9FEF9FEFEFEFEF9FEFEFEF9F9FEBrJ#=$9$8$<$ F9Q%F9F9F9F9F9F9F9F9F9F9F9F9F9F9AsJ$ F7Q'F9F9FEAtJ"F$ F9Q'FEFEF9FEJ"8$9"8"8"8"8*8" Q5FEFEFEFEFEFEFEFEF9F9FEFEFEF9F9F9FEFEJx8%:$9% Q5F9F9F9F9F9F9F9F9F9F9F9F9 >z8z /F7T<F7sF"J& F7F7T=F7F7F7F7F7(z$z' F6F6F6F6F6F6F7S!D9D8D8D8OKD9F6F6F6F6F6F68%J#J& F9F9F9F9S#D9FFOLF9F9F9F9F7 Jz S1O@FE Jz S3O=D9 Jz S5O9D8J" TMFFJz" S7O5D9FF JZ S;O-J" TGD8Jz" S=O)D9D8 J'@# SGFEFEFEFEFEFEFEFEJ& SID9D9D9FEFEJ%8"8*9# T"FEFEFEFEFEFED9FEFED9FEFEFEFEFEFEJ)8"9" T!FEFED9D9FEFED9D9D9FEJ&F* SIFEFEFEFED9D9D9D9FEFED9FEFED9J#<#@" SID9D9FEFED9J$9%B& SKD9FEFED9D9D9D9D9FEFEFED9J#;" T%FEFEFEJ'8%=" T!D9FEFEFEFED9D9FEFED9D9J#9#8%:&=" SGD9D9D9D9D9D9D9D9D9D9D9D9D9D9JsJ" P:FEQ@FEJ+J$ P9FEFED9FED9FED9FED9FEQ>FEFED9J-J# P8FEFED9FED9FED9FED9FED9FEQ=D9D9J%r$ P7FEFED9FED9FED9FEJ'<% P6FEFED9FED9FED9FED9FEJ'<% P7D9FED9FED9FED9FED9FEJ(=# P7FED9D9D9FED9FEFED9J#8%<# P7D9FED9FED9FED9FEJ#9%;#Jz P7FED9D9FED9FEFED9PDO)D8J#:%:#J" P7D9FED9FED9FED9FEPCD8J#;%9#Jz P7FED9D9FED9FEFED9PBO-D9J#<) P7D9FED9FED9FEFEFED9FEJ%<( P6D9FED9FED9FED9FED9FED9J%=% P7D9FED9FEFED9FED9J$r$JZ P8D9FED9FED9FED9P@O5J,J" P9D9FED9FED9FED9FED9FED9P@FFJ*Jz P:D9FED9FED9FED9FED9P@O9D9Jr P;D9Jz S3O=FE Jz S1O@D9 J#9#E#;#C#J#F# O%FEFEFEFEFEFEFEFEFEFEO1FEFEFEFEJ# QHD9D9J&9%;#<%<"8"8%=%9%9%9%9%9%=#;%8#9&8%9% O-FEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9FEFEFEFEFEFEFEFEFEFEJ,9%:';"8);5;%9'B.JZ O/FED9FEFED9FEFED9D9FEFEFED9FEFEFEFED9D9FEFED9D9D9FEFED9D9FEFEIFEFED9D9FEFED9FEFED9D9FEFED9FEFED9D9FEFED9FEFED9D9FEFED9FEFED9D9FEFED9FEFED9D9FEFEFEFED9FEFEFED9D9FEFEFEFED9D9FEFED9FEFED9D9FEFEO1O-J":#="J#?#;#@%9%>"@(>#J" O/D9D9D9D9BD9D9D9D9D9D9FED9D9D9FED9D9D9D9D9FEFED9FEFED9D9D9PDD8J$E#J$I#9&8&E#J#Jz" O5FEFEFEFEFE8FEFEFEFEFED9D9FEFEFED9D9FEFEFEFEFE7FEFEO5O)D9D8J%E%J%I%9"8"9"8"D%8&D% O4FEFED9D9D9D9D9D95FEFED9D9D9D9D9D9D9FED9FED9D9D9D9D9FEFEFED9D9D9D9D9J(G"A#?"J#;#;(9%@"=#F#;# O%D9FEFED9FEFED9FEFEFEFE6FEFEFEFEFEFED9FEFED9D9FEFED9D9FEFEFEFEFEFEFEJ"A(8%:'<+;5;%9'9$<. O(FED9FEFEFED9FEFED9FEFED9D9FEFEFEFED9D9FEFED9D9FEFEFEFED9ID9FEFEFED9FEFED9FEFEFEFED9D9D9FEFEFEFED9D9D9FEFEFEFED9D9D9FEFEFEFED9D9D9FEFEFEFED9D9FEFED9D9FEFEFEFED9D9FED9D9FEFEFEFED9D9D9FEFEFEFED9J&8#8#8v8#8%>#8%=v9%9%9%9%=&8%;":#8%9% O&D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 J%J# SGFEFEFEFE=FEFEJ' SFFEFED9D9FEFEJ$8(8&9%9% SEFEFED9D9D9D9FEFEFEFEFEFED9FEFEFEFEFEFEFEFEFEFEJ'93 SLFEFED9D9FEFEFED9FEFED9FEFED9D9FEFED9FEFED9D9FEFEJ#="># SLD9D9D9D9D9J$I# SMFEFEFEFEFEJ%I% SLFEFED9D9D9D9D9D9J$8#H#;# SED9FEFEFEFEFEFEFEFEJ.=. SFD9FEFEFEFED9D9FEFEFED9FEFED9FEFEFEFED9D9D9FEFEFEFED9J%8s8#8%9%8# SGD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 'J& F7F7F7F7F7F7U"F7F7F7F7F7'JzF' F6F6F6F6F6F6S7O)D8F6F6F6F6F6F68%J"J& F9F9F9F9S6D8O:F9F9F9F9F7Jz S;O-D9 J" S)FF=z"z"z 0F6F7T,F6F71F6<z8z8z 1F9T+F91F9 7z8z8z 6F7T+F75F7"J"J" F77F7T,F7 ENDBITMAP %%EndBinary 0 0 0 1 0 0 0 K 324 594 531 657 R 7 X V 4 8 Q 0 X (.md conf) 324 651.67 T (igure -bitmap error -imagepos n \134) 362.4 651.67 T ( -text \322Unable to access device\323 \134) 324 641.67 T ( -modality none -buttonboxpos e) 324 631.67 T (.md buttonconf) 324 621.67 T (igure OK -text \322Retry\323) 391.2 621.67 T (.md buttonconf) 324 611.67 T (igure Cancel -text \322Cancel\323) 391.2 611.67 T (.md activate) 324 601.67 T 0 10 Q (FIGURE 13) 377.68 569.18 T 1 F ( - Error dialog) 429.07 569.18 T 0 0 612 792 C FMENDPAGE %%EndPage: "8" 8 %%Page: "9" 9 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.22 (modal. W) 72 713.33 P -0.22 (e\325ll also change the orientation and position of) 110.42 713.33 P (the buttons to be vertical along the right hand side. Fig-) 72 701.33 T (ure 13 shows the \336nal product. It is important to note,) 72 689.33 T -0.47 (that no new message dialog has been created, instead the) 72 677.33 P (existing one has been recon\336gured.) 72 665.33 T 0 12 Q (Lessons Learned) 141.33 634 T 1 10 Q (One element which is essential to any successful devel-) 72 609.33 T (opment ef) 72 597.33 T (fort is the establishment of \336rm objectives.) 112.09 597.33 T -0.29 ([incr W) 72 585.33 P -0.29 (idgets] was short on neither aggressive goals nor) 102.13 585.33 P (talented developers willing to contribute in a team envi-) 72 573.33 T (ronment. Many lessons were learned during this ef) 72 561.33 T (fort) 274.56 561.33 T (as the team achieved a truly reusable, \337exible, and) 72 549.33 T (extensible mega-widget set. The lessons centered on) 72 537.33 T (inheritance, con\336gurability) 72 525.33 T (, testability) 179.67 525.33 T (, and reusability) 223.47 525.33 T (.) 286.98 525.33 T (Inheritance proved to be a valuable tool during [incr) 72 501.33 T (W) 72 489.33 T (idgets] development. The impact of changes due to) 81.04 489.33 T (Tk 4.0 were signi\336cantly lessened. For example, as) 72 477.33 T (image support was added to Tk, a single option was) 72 465.33 T (added to the Labeledwidget class which was then inher-) 72 453.33 T -0.26 (ited by derived classes in the hierarchy) 72 441.33 P -0.26 (. Also, bugs \336xed) 225.28 441.33 P -0.45 (in base classes applied to all derived ones. This made for) 72 429.33 P (quick and easy maintenance. On a similar note, errors) 72 417.33 T (introduced in lower level classes had broader ef) 72 405.33 T (fects.) 262.6 405.33 T (Fortunately) 72 393.33 T (, this was rare and easily detected due to the) 117.46 393.33 T (magni\336ed repercussions.) 72 381.33 T (Maximum recon\336gurability comes at the price of) 72 357.33 T (quickly multiplying options in an inheritance hierarchy) 72 345.33 T (.) 291.89 345.33 T (In an ef) 72 333.33 T (fort to avoid the usability problems associated) 102.36 333.33 T -0.26 (with Motif) 72 321.33 P -0.26 (\325) 115.35 321.33 P -0.26 (s bulky resource set, [incr W) 118.13 321.33 P -0.26 (idgets] imposed) 231.41 321.33 P (an 80/20 rule. If 80% of the user community could be) 72 309.33 T (viewed as having no interest in an option, it was) 72 297.33 T (excluded. Users could always use the built-in [incr Tk]) 72 285.33 T (\324component\325 command to con\336gure an option.) 72 273.33 T -0.16 (The incorporation of a regression test suit was a de\336nite) 72 249.33 P (plus. The [incr W) 72 237.33 T (idgets] test suite is a blatant rip-of) 142.14 237.33 T (f of) 278.06 237.33 T (the work done by Ousterhout and May-Pumphrey for) 72 225.33 T (T) 72 213.33 T (cl/Tk [6]. The test suite consistently exposed \337aws) 77.41 213.33 T (which hand testing left hidden. Especially those bugs) 72 201.33 T (dealing with lar) 72 189.33 T (ge scale component con\336guration. The) 134.59 189.33 T (test suite also doubles as a good visual demo.) 72 177.33 T (Absolutely no reuse of any kind occurs until a widget) 72 155.33 T -0.41 (set becomes well documented. This includes man pages,) 72 143.33 P -0.41 (user) 72 131.33 P -0.41 (\325) 89.03 131.33 P -0.41 (s guides, and demos. Unless documented, reuse is a) 91.81 131.33 P (localized event at best. There is no such thing as self-) 72 119.33 T -0.03 (documenting code. Instead, the demand is for self-docu-) 72 107.33 P (menting engineers.) 72 95.33 T 0 12 Q (Pr) 397.95 712 T (ospective) 410.39 712 T 1 10 Q ([incr W) 315 687.33 T (idgets] is an ongoing development ef) 345.42 687.33 T (fort. The) 493.28 687.33 T (mega-widgets presented in this paper represent those) 315 675.33 T (ready for release. Each has a man page, demo, and) 315 663.33 T (regression test script. Many other mega-widgets are) 315 651.33 T (under construction which have not reached release sta-) 315 639.33 T (tus. They include classes such as T) 315 627.33 T (oolbar) 454 627.33 T (, Combobox,) 479.15 627.33 T (T) 315 615.33 T (able, Calendar) 320.41 615.33 T (, Gage, Menubar) 377.77 615.33 T (, and Mainwindow) 444.57 615.33 T (.) 519.19 615.33 T -0.36 (Once complete, each new class will be incorporated into) 315 603.33 P (the [incr W) 315 591.33 T (idgets] distribution.) 360.14 591.33 T (Public contributions to the [incr W) 315 567.33 T (idgets] mega-widget) 453.76 567.33 T (set are welcome and encouraged. Those mega-widgets) 315 555.33 T -0.08 (which currently compose [incr W) 315 543.33 P -0.08 (idgets] should be used) 448.67 543.33 P (as a model. Contributed mega-widgets should meet or) 315 531.33 T (exceed the objectives set forth in this paper such as) 315 519.33 T (extensible child sites, \337exible component con\336gura-) 315 507.33 T (tions, and style consistency) 315 495.33 T (. The coding and comment) 423.79 495.33 T (style must also be maintained. Man pages, demos, and) 315 483.33 T (test scripts are mandatory) 315 471.33 T (.) 416.83 471.33 T 0 12 Q (Conclusion) 398.83 440 T 1 10 Q ([incr W) 315 415.33 T (idgets] of) 345.42 415.33 T (fers a strong object-oriented founda-) 383.29 415.33 T (tion which addresses the need for a \337exible and extensi-) 315 403.33 T -0.1 (ble mega-widget set. Its usage replaces common widget) 315 391.33 P -0.51 (combinations with higher level abstractions, simplifying) 315 379.33 P (code, reducing errors, increasing readability) 315 367.33 T (, adding) 490.41 367.33 T (productivity) 315 355.33 T (, and promoting a singular look-and-feel.) 363.24 355.33 T (The ability to extend [incr W) 315 343.33 T (idgets] enables developers) 430.97 343.33 T (to create new mega-widgets based on previous work.) 315 331.33 T (In short, [incr W) 315 309.33 T (idgets] is a library of reusable mega-) 381.25 309.33 T (widgets that can be easily extended, allowing quicker) 315 297.33 T -0.08 (development of lar) 315 285.33 P -0.08 (ge scale applications. It has been suc-) 390.21 285.33 P (cessfully used in several projects, including mission-) 315 273.33 T (critical telecommunication applications delivered to) 315 261.33 T (Japan, Great Britain, and Australia. As development) 315 249.33 T (continues, existing classes are being extended and new) 315 237.33 T (classes are being added. Development time has been) 315 225.33 T (drastically reduced. New dialogs can be created in) 315 213.33 T (hours. Whole applications in days. Reuse is a reality) 315 201.33 T (.) 523.77 201.33 T (New projects are bene\336tting from the work of others.) 315 189.33 T ([incr W) 315 177.33 T (idgets] is an [incr Tk] success story) 345.42 177.33 T (.) 486.41 177.33 T 0 12 Q (Acknowledgments) 380.5 146 T 1 10 Q ([incr W) 315 123.33 T (idgets] was produced by a dedicated team com-) 345.42 123.33 T (prised of Mark Ulferts, Sue Y) 315 111.33 T (ockey) 433.42 111.33 T (, Alfredo Jahn, John) 456.65 111.33 T (Sigler) 315 99.33 T (, and Bret Schuhmacher at DSC Communications) 338.49 99.33 T (Corp. Signi\336cant advice and counselling was adminis-) 315 87.33 T (tered by Mark Harrison, also employed by DSC.) 315 75.33 T FMENDPAGE %%EndPage: "9" 9 %%Page: "10" 10 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (Michael J. McLennan, A) 72 713.33 T (T&T Bell Labs, allowed the) 170.59 713.33 T (team to beta test [incr Tk] and supported the ef) 72 701.33 T (fort) 259.28 701.33 T (through the infusion of innovative ideas.) 72 689.33 T 0 12 Q (Refer) 156.62 658 T (ences) 185.05 658 T 1 10 Q ([1] Michael J. McLennan, \322[incr T) 72 635.33 T (cl] - Object-Oriented) 209.87 635.33 T (Programming in T) 86 623.33 T (cl\323, Proceedings of the T) 159.19 623.33 T (cl/Tk) 258.19 623.33 T (W) 86 611.33 T (orkshop 1993, Berkeley Ca.) 94.64 611.33 T (http://www) 86 599.33 T (.wn.com/biz/itcl) 130.91 599.33 T ([2] Michael J. McLennan, \322[incr Tk] Building Extensi-) 72 577.33 T (ble W) 86 565.33 T (idgets with [incr T) 109.76 565.33 T (cl]\323, Proceedings of the T) 183.22 565.33 T (cl/) 285.55 565.33 T (Tk W) 86 553.33 T (orkshop 1994, New Orleans La.) 108.25 553.33 T (http://www) 86 541.33 T (.wn.com/biz/itk) 130.91 541.33 T ([3] Ioi K. Lam, T) 72 519.33 T (ix,) 141.08 519.33 T (http://www) 86.67 507.33 T (.cis.upenn.edu/~ioi/tix/tix.html) 131.58 507.33 T ([4] Nat Pryce, itcl-widgets,) 72 485.33 T (http://www-dse.doc.ic.ac.uk:80/~np2/itcl_widgets/) 86.67 473.33 T -0.03 ([5] John Ousterhout, \322T) 72 451.33 P -0.03 (cl and the Tk T) 166.75 451.33 P -0.03 (oolkit\323, Addison-) 227.03 451.33 P (W) 86 439.33 T (esley) 94.64 439.33 T (, 1994. http://playground.sun.com/~ouster/) 114.54 439.33 T 0 12 Q (Appendix) 159.49 408 T ([incr W) 133.83 394 T (idgets] T) 173.27 394 T (our) 217.17 394 T 1 10 Q -0.02 ([incr Tk] provides the base classes for all the mega-wid-) 72 371.33 P (get classes of [incr W) 72 359.33 T (idgets]. The dialog classes are) 158.24 359.33 T -0.41 (derived from itk::T) 72 347.33 P -0.41 (oplevel, all other classes are based on) 147.14 347.33 P (itk::W) 72 335.33 T (idget. The [incr Tk] classes provide for compo-) 97.16 335.33 T (nent, option, and method de\336nition and management.) 315 713.33 T (The [incr W) 315 701.33 T (idget] classes are the specialization of the) 363.47 701.33 T ([incr Tk] base classes, where each level re\336nes and aug-) 315 689.33 T -0.25 (ments the methods and options of the base classes. Each) 315 677.18 P -0.29 ([incr W) 315 665.18 P -0.29 (idgets] class will be brie\337y discussed and a short) 345.13 665.18 P (example presented. Figure 14 depicts the class hierar-) 315 653.18 T (chy) 315 641.18 T (.) 328.79 641.18 T 0 12 Q (Labeledwidget) 389.83 609.85 T 1 10 Q (The Labeledwidget is the most primitive mega-widget) 315 591.18 T (in the set, providing label support in the other classes.) 315 579.18 T (The class contains a label, a mar) 315 567.18 T (gin, and a child site) 444.51 567.18 T (which can be \336lled with other widgets. The options pro-) 315 555.18 T (vide the ability to position the label around the child) 315 543.18 T (site, modify the font, adjust the mar) 315 531.18 T (gin distance, and) 457.59 531.18 T (enable/disable label display) 315 519.18 T (.) 424.89 519.18 T (The following example creates a Labeledwidget with a) 315 495.18 T (canvas widget in the child site. The label is set to \322Can-) 315 483.18 T (vas\323 and initially located south of the child site. Next,) 315 471.18 T (the label is moved around the child site and mar) 315 459.18 T (gin set) 506.74 459.18 T (to various distances.) 315 447.18 T 0 12 Q (Entry\336eld) 401.5 415.85 T 1 10 Q (The Entry\336eld class associates a label with an entry) 315 397.18 T -0.18 (widget, providing text entry) 315 385.18 P -0.18 (, length, validation, and edit-) 425.46 385.18 P (ing enhancements. Since the class is based on the) 315 373.18 T (Labeledwidget class, all the options and methods for) 315 361.18 T 72 72 540 315 R 7 X V 99.66 87.38 512.34 305 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 234.66 98 505.03 297.5 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 9 X N 106.88 109.75 228.38 250.75 R 7 X V 8 X N 112.03 179.75 164.53 189.5 R 7 X V 0 X N 1 7 Q (itk::Archetype) 117.63 181.01 T 178.28 126.75 226.28 136.5 R 7 X V 0 X N (itk::T) 183.4 128.01 T (oplevel) 198.47 128.01 T 176.78 232.5 224.78 242.25 R 7 X V 0 X N (itk::W) 181.9 233.76 T (idget) 199.51 233.76 T 248.19 200.84 289.44 210.59 R 7 X V 0 X N (Buttonbox) 252.58 202.09 T 248.19 265.17 299.19 274.92 R 7 X V 0 X N (Selectionbox) 253.62 266.43 T 248.19 184.76 292.44 194.51 R 7 X V 0 X N (Pushbutton) 252.9 186.01 T 248.19 249.09 310.14 258.84 R 7 X V 0 X N (Fileselectionbox) 254.79 250.34 T 248.19 216.92 300.69 226.67 R 7 X V 0 X N (Panedwindow) 253.78 218.18 T 248.19 233.01 300.69 242.76 R 7 X V 0 X N (Labeledwidget) 253.78 234.26 T 251.28 126.75 294.03 136.5 R 7 X V 0 X N (Dialogshell) 255.84 128.01 T 320.78 126.75 357.53 136.5 R 7 X V 0 X N (Dialog) 324.7 128.01 T 382.78 151.25 441.28 161 R 7 X V 0 X N (Messagedialog) 389.02 152.51 T 382.78 118.58 443.53 128.33 R 7 X V 0 X N (Selectiondialog) 389.26 119.84 T 382.78 102.25 453.84 112 R 7 X V 0 X N (Fileselectiondialog) 390.36 103.51 T 382.78 134.92 435.28 144.67 R 7 X V 0 X N (Promptdialog) 388.38 136.17 T 338.07 254.84 390.57 264.59 R 7 X V 0 X N (Scrolledlistbox) 343.67 256.09 T 338.07 239.59 390.57 249.34 R 7 X V 0 X N (Optionmenu) 343.67 240.84 T 338.07 224.34 390.57 234.09 R 7 X V 0 X N (Entry\336eld) 343.67 225.59 T 338.07 209.09 390.57 218.84 R 7 X V 0 X N (Scrolledtext) 343.67 210.34 T 415.1 224.46 448.85 234.21 R 7 X V 0 X N (Spinner) 418.7 225.72 T 458.72 224.07 497.72 233.82 R 7 X V 0 X N (Spinint) 462.88 225.32 T 165.38 184.25 171.38 184.25 2 L N 171.38 236.75 171.38 131 2 L N 171.88 132 177.88 132 2 L N 171.63 236.5 177.63 236.5 2 L N 226.88 131 251.63 131 2 L N 294.38 131.75 320.63 131.75 2 L N 357.38 131 373.13 131 2 L N 373.13 155.75 373.13 107 2 L N 373.13 155.75 382.88 155.75 2 L N 373.63 107.25 383.38 107.25 2 L N 372.88 123.75 382.63 123.75 2 L N 373.38 139 383.13 139 2 L N 237.28 284.77 237.28 156.44 2 L N 237.53 270.01 249.53 270.01 2 L N 237.28 253.76 249.28 253.76 2 L N 237.03 238.26 249.03 238.26 2 L N 237.53 221.26 249.53 221.26 2 L N 237.28 205.01 249.28 205.01 2 L N 237.03 189.51 249.03 189.51 2 L N 237.27 237.93 224.95 237.93 2 L N 325.66 259.89 325.66 183.62 2 L N 326.2 259.89 337.98 259.89 2 L N 326.16 243.86 337.95 243.86 2 L N 326.13 228.89 337.91 228.89 2 L N 325.56 213.39 337.34 213.39 2 L N 301.02 236.86 325.13 236.86 2 L N 390.48 229.36 415.13 229.36 2 L N 449.41 228.82 460.13 228.82 2 L N 102.94 91.81 507.95 300.87 R N 0 10 Q ([incr Tk]) 111.38 114.25 T ([incr W) 237.38 102.25 T (idgets]) 270.25 102.25 T 338.78 194.14 391.28 203.89 R 7 X V 0 X N 326.06 198.52 337.84 198.52 2 L N 339.04 179.26 391.54 189.01 R 7 X V 0 X N 1 7 Q (Scrolledframe) 344.64 180.52 T 326.53 183.57 338.32 183.57 2 L N (Scrolledcanvas) 341.88 195.5 T 248.66 168.36 287.99 178.11 R 7 X V 0 X N (Spindate) 254.09 169.61 T 249.43 152.58 286.55 162.33 R 7 X V 0 X N (Spintime) 254.87 153.84 T 248.54 280.7 299.54 290.45 R 7 X V 0 X N (Combobox) 253.98 281.95 T 248.34 284.77 237.22 284.77 2 L N 248.34 172.55 237.22 172.55 2 L N 249.45 157 237.78 157 2 L N 0 0 612 792 C 0 10 Q 0 X 0 0 0 1 0 0 0 K (FIGURE 14) 207.44 74.18 T 1 F ( - [incr W) 258.83 74.18 T (idgets] class hierarchy) 297.58 74.18 T FMENDPAGE %%EndPage: "10" 10 %%Page: "11" 11 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.35 (Labeledwidgets are supported in Entry\336elds. Also, most) 72 470.33 P (of the methods for the standard Tk entry widget are pro-) 72 458.33 T (vided such as insert, delete, get, and scan.) 72 446.33 T 0 12 Q (Pushbutton) 154.82 118 T 1 10 Q (The Pushbutton class of) 72 99.33 T (fers the standard Tk button wid-) 167.65 99.33 T (get with the ability to display as a default button with a) 72 87.33 T -0.35 (recessed ring. The primary use for the Pushbutton is as a) 72 75.33 P 72 477 297 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 504 297 720 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 2913 134 174 40.2 52.2 0 81 657 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000069FBB29AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000086FFDF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000008EFFEF75C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F4F5OGF4F57F4F5J" PHF58z8z8z 5F8OFF85F8 <z" P=F5F4=z"z"z"z 0F4F5O6F4F50F4F50F4>z8z8z8z /F8O5F8/F8/F8 J#>$ O)FEFEFEFEFEJ"Js" O3F8O"F4F5J#Jr O)F8F8O,F8J09%;# JFEFEFEF8FEFEFEFEF8FEFEFEFEFEFEFEFEFEFEFEFEAs"J"9"8':%;%J$ F4F56F8F8F8F8F8FEF8F8FEF8F8F8FEF8FEFE<F4F4F5BrJ$9%=%:"J" F88F8FEFEFEF8FEF8FEFEFEF8F8@F8AsJ"9"J# F5HF8FEDF5F5AtJ)=%J$ F88F8FEFEF8F8FEFEF8FEF8F8F8EF8F8F8J"8"8'8"9" O(FEFEFEFEFEF8F8FEFEFEJ#8#9t8sJs MF8F8F8F8F8F8IF5Jt P6F8 >z8z8z8z /F5O5F5/F5/F5sF"J"F"F& F5F5O6F5F5F5F5F5F5F5(z' F4F4F4F4F4F4F5P<D9F4F4F4F4F4F48%J& F8F8F8F8P>F8F8F8F8F5 Gz P(FE Gz P(D9 J% O"FEFEFEFEJ' O!FEFED9D9FEFEJ$8(8&8#9#8%9% O FEFED9D9D9D9FEFEFEFEFEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEJ'9%?. O'FEFED9D9FEFEFED9FEFEFEFED9D9FEFED9FEFED9D9FEFEJ#=":+=% O'D9D9D9D9FEFED9FEFED9D9D9D9FED9D9D9J$I$9& O(FEFEFEFEFEFED9D9FEFEFEJ%A&8%;"8" O'FEFED9D9D9FEFEFED9FEFED9D9D9FEJ$8#J% O D9FEFEFEFE=FEFED9D9'J.?$9.J& F5F5F5F5F5F5ID9FEFEFEFED9D9FEFEFED9FEFED9FED9D9FEFEFED9FEFED9FEFEFEFED9GF5F5F5F5F5'J%8s8#:";vJ' F4F4F4F4F4F4JD9D9D9D9D9D9D9D9D9HF4F4F4F4F4F48%J& F8F8F8F8P>F8F8F8F8F5 =z"z"z 0F4F5OGF4F51F4<z8z8z 1F8OFF81F8 7z8z8z 6F5OFF55F5"J"J" F57F5OGF5 ENDBITMAP %%EndBinary %%BeginBinary: 2909 189 151 56.7 45.3 0 125.83 657 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000069FBB29AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000086FFDF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000008EFFEF75C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F4F5Q"F4F57F4F5J" R#F58z8z8z 5F8Q!F85F8 <z" QFF5F4=z"z"z"z 0F4F5P?F4F50F4F50F4>z8z8z8z /F8P>F8/F8/F8 J#>$ ODFEFEFEFEFEJ"Js" P F8O>F4F5J#Jr ODF8F8OHF8J09%;# O7FEFEFEF8FEFEFEFEF8FEFEFEFEFEFEFEFEFEFEFEFEAs"J"9"8':%;%J$ F4F5O#F8F8F8F8F8FEF8F8FEF8F8F8FEF8FEFEO*F4F4F5BrJ$9%=%:"J" F8O%F8FEFEFEF8FEF8FEFEFEF8F8O.F8AsJ"9"J# F5O5F8FEO2F5F5AtJ)=%J$ F8O%F8FEFEF8F8FEFEF8FEF8F8F8O3F8F8F8J"8"8'8"9" OCFEFEFEFEFEF8F8FEFEFEJ#8#9t8sJs O:F8F8F8F8F8F8O7F5Jt Q?F8 >z8z8z8z /F5P>F5/F5/F5sF"J"F"F& F5F5P?F5F5F5F5F5F5F5(z' F4F4F4F4F4F4F5QED9F4F4F4F4F4F48%J& F8F8F8F8QGF8F8F8F8F5 Gz P(FE J% PDFEFEFEFEJ' PCFEFED9D9FEFEJ$8(8&8#9#8%9% PBFEFED9D9D9D9FEFEFEFEFEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEJ'9%?. PIFEFED9D9FEFEFED9FEFEFEFED9D9FEFED9FEFED9D9FEFEJ#=":+=% PID9D9D9D9FEFED9FEFED9D9D9D9FED9D9D9J$I$9& PJFEFEFEFEFEFED9D9FEFEFEJ%A&8%;"8" PIFEFED9D9D9FEFEFED9FEFED9D9D9FEJ$8#J% PBD9FEFEFEFE=FEFED9D9J.?$9. PCD9FEFEFEFED9D9FEFEFED9FEFED9FED9D9FEFEFED9FEFED9FEFEFEFED9J%8s8#:";v PDD9D9D9D9D9D9D9D9D9 'J& F5F5F5F5F5F5QFF5F5F5F5F5'J' F4F4F4F4F4F4QFF4F4F4F4F4F48%J& F8F8F8F8QGF8F8F8F8F5 Gz P(D9 =z"z"z 0F4F5Q"F4F51F4<z8z8z 1F8Q!F81F8 7z8z8z 6F5Q!F55F5"J"J" F57F5Q"F5 ENDBITMAP %%EndBinary %%BeginBinary: 2925 134 180 40.2 54 0 188.67 657 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000069FBB29AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000086FFDF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000008EFFEF75C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7OGF6F77F6F7J" PHF78z8z8z 5F9OFF95F9 <z" P=F7F6=z"z"z"z 0F6F7O6F6F70F6F70F6>z8z8z8z /F9O5F9/F9/F9 J#>$ O)FEFEFEFEFEJ"Js" O3F9O"F6F7J#Jr O)F9F9O,F9J09%;# JFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEAs"J"9"8':%;%J$ F6F76F9F9F9F9F9FEF9F9FEF9F9F9FEF9FEFE<F6F6F7BrJ$9%=%:"J" F98F9FEFEFEF9FEF9FEFEFEF9F9@F9AsJ"9"J# F7HF9FEDF7F7AtJ)=%J$ F98F9FEFEF9F9FEFEF9FEF9F9F9EF9F9F9J"8"8'8"9" O(FEFEFEFEFEF9F9FEFEFEJ#8#9t8sJs MF9F9F9F9F9F9IF7Jt P6F9 >z8z8z8z /F7O5F7/F7/F7sF"J"F"F& F7F7O6F7F7F7F7F7F7F7(z' F6F6F6F6F6F6F7P<D9F6F6F6F6F6F68%J& F9F9F9F9P>F9F9F9F9F7 J% O"FEFEFEFEJ' O!FEFED9D9FEFEJ$8(8&8#9#8%9% O FEFED9D9D9D9FEFEFEFEFEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEJ'9%?. O'FEFED9D9FEFEFED9FEFEFEFED9D9FEFED9FEFED9D9FEFEJ#=":+=% O'D9D9D9D9FEFED9FEFED9D9D9D9FED9D9D9J$I$9& O(FEFEFEFEFEFED9D9FEFEFEJ%A&8%;"8" O'FEFED9D9D9FEFEFED9FEFED9D9D9FEJ$8#J% O D9FEFEFEFE=FEFED9D9J.?$9. O!D9FEFEFEFED9D9FEFEFED9FEFED9FED9D9FEFEFED9FEFED9FEFEFEFED9J%8s8#:";v O"D9D9D9D9D9D9D9D9D9 Gz P(FE 'J& F7F7F7F7F7F7P=F7F7F7F7F7'J' F6F6F6F6F6F6P=F6F6F6F6F6F68%J& F9F9F9F9P>F9F9F9F9F7 Gz P(D9 =z"z"z 0F6F7OGF6F71F6<z8z8z 1F9OFF91F9 7z8z8z 6F7OFF75F7"J"J" F77F7OGF7 ENDBITMAP %%EndBinary %%BeginBinary: 2903 194 151 58.2 45.3 0 233.27 657 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000069FBB29AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000086FFDF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000008EFFEF75C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F4F5Q'F4F57F4F5J" R(F58z8z8z 5F8Q&F85F8 <z" QKF5F4=z"z"z"z 0F4F5PDF4F50F4F50F4>z8z8z8z /F8PCF8/F8/F8 J#>$ OGFEFEFEFEFEJ"Js" P#F8O@F4F5J#Jr OGF8F8OJF8J09%;# O:FEFEFEF8FEFEFEFEF8FEFEFEFEFEFEFEFEFEFEFEFEAs"J"9"8':%;%J$ F4F5O&F8F8F8F8F8FEF8F8FEF8F8F8FEF8FEFEO,F4F4F5BrJ$9%=%:"J" F8O(F8FEFEFEF8FEF8FEFEFEF8F8O0F8AsJ"9"J# F5O8F8FEO4F5F5AtJ)=%J$ F8O(F8FEFEF8F8FEFEF8FEF8F8F8O5F8F8F8J"8"8'8"9" OFFEFEFEFEFEF8F8FEFEFEJ#8#9t8sJs O=F8F8F8F8F8F8O9F5Jt QDF8 >z8z8z8z /F5PCF5/F5/F5sF"J"F"F& F5F5PDF5F5F5F5F5F5F5(z' F4F4F4F4F4F4F5QJD9F4F4F4F4F4F48%J& F8F8F8F8QLF8F8F8F8F5 Jz O?P(FE J% 7FEFEFEFEJ' 6FEFED9D9FEFEJ$8(8&8#9#8%9% 5FEFED9D9D9D9FEFEFEFEFEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEJ'9%?. <FEFED9D9FEFEFED9FEFEFEFED9D9FEFED9FEFED9D9FEFEJ#=":+=% <D9D9D9D9FEFED9FEFED9D9D9D9FED9D9D9J$I$9& =FEFEFEFEFEFED9D9FEFEFEJ%A&8%;"8" <FEFED9D9D9FEFEFED9FEFED9D9D9FEJ$8#J% 5D9FEFEFEFE=FEFED9D9J.?$9. 6D9FEFEFEFED9D9FEFEFED9FEFED9FED9D9FEFEFED9FEFED9FEFEFEFED9J%8s8#:";v 7D9D9D9D9D9D9D9D9D9 'J& F5F5F5F5F5F5QKF5F5F5F5F5'J' F4F4F4F4F4F4QKF4F4F4F4F4F48%J& F8F8F8F8QLF8F8F8F8F5 Jz O?P(D9 =z"z"z 0F4F5Q'F4F51F4<z8z8z 1F8Q&F81F8 7z8z8z 6F5Q&F55F5"J"J" F57F5Q'F5 ENDBITMAP %%EndBinary 81 513 285.67 644.15 R 7 X V 4 8 Q 0 X (labeledwidget .lw -labeltext \322Canvas\323 \134) 81 638.82 T ( -labelpos s) 81 628.82 T (set childsite [.lw childsite]) 81 618.82 T (canvas $childsite.c -relief raised \134) 81 608.82 T -0.22 ( -width 100 -height 100 -background black) 81 598.82 P (pack $childsite.c) 81 578.82 T (pack .lw -f) 81 568.82 T (ill both -expand yes \134) 133.8 568.82 T ( -padx 10 -pady 10) 81 558.82 T (.lw conf) 81 538.82 T (igure -labelpos w -labelmargin 10) 119.4 538.82 T (.lw conf) 81 528.82 T (igure -labelpos e -labelmargin 5) 119.4 528.82 T (.lw conf) 81 518.82 T (igure -labelpos n -labelmargin 7) 119.4 518.82 T 0 10 Q (FIGURE 15) 124.93 486.1 T 1 F ( - Labeledwidget) 176.32 486.1 T 0 0 612 792 C 72 146 297 443 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 182 297 443 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 4942 279 127 143.49 65.31 0 108.51 368.69 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000007DFFCF9AFFFF699A69FBB29AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000006DFFB669F7AE869A86FFDF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000005DDF9E71FFBA8E9A8EFFEF75C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7S F6F77F6F7J" T!F78z8z8z 5F9RMF95F9 <z" SDF7F6=z"z"z"z 0F6F7R=F6F70F6F70F6>z8z8z8z /F9R<F9/F9/F9 JsB"Es8#?$<$<%B$C$@#;$9#J" EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEO#FEJ"8$C"F"8$E">">"8"B"E"I"J"Js" EF9F9F9F9FEF9F9F9F9F9F9F9F9F9F9F9O)FEFF6F7J"J"9#J%@#<#Jr KF9CF9F9F9O9FEF9FEFEF9F9FEFEOBF9J+9"80;"9$:$?#I%<#;$J$9-9'8#;$8'9"8# JFEF9F9F9FEFEFEF9FEFEFEFEFEFEFEFEF9FEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEF9F9FEFEFEF9FEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEAs"J#:"8%8"8$8":&9#8$:'<&I%:-B'>":)8%8"8)8)8%8"8#J$ F6F74FEFEF9FEF9FEFEF9F9F9F9FEF9F9F9FEF9FEFEF9F9F9FEFEFEF9FEFEFEFEFEF9FEF9F9FEFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9F9F9FEFEF9FEFEF9F9FEFEF9F9FEF9FEFEF9FEF9FEFEFEF9FEFEFEFEFEF9FEFEF9F9FEF9FEFEF9F9F95F6F6F7BrJ#="C*:#B"@$H$<$<"E$J">"9">"<"J" F95F9F9F9F9F9F9F9FEFEF9FEF9F9F9FEF9F9F9F9FEFEF9F9F9FEFEFEFE9F9F9F9FEF9@F9AsJ$J"@%J'D%A)B'J%J# F77F9F9FEAF9F9F9F9F9:FEF9FEFEF9F9F9F9F9F9FEF9F9F9F9F9FEFEF9FEFEFEFEF99F9F9F9F9DF7F7AtJ"J%H%>$D";">";%J&J%J$ F97FE7F9FEFEF9FEF9FEFEFEF9FEFEFEFEFEF9FEFE?FEF9F9F9F9:FEF9FEFEDF9F9F9J"8$9"8"9"8&8"?"8";"8+8(8";"8$9%8"808";$9"8$8$8"8(8"9$8"9"9+8"9"8$ EFEFEFEFEFEFEFEF9FEFEF9FEFEFEFEFEFEF9F9F9FEFEFEF9F9FEFEF9F9F9FEFEF9FEFEFEFEFEF9FEFEF9FEF9FEFEFEF9F9F9F9F9FEFEFEF9F9FEFEFEFEFEFEFEF9FEFEF9FEFEFEFEFEFEFEF9FEFEFEF9FEFEFEFEF9F9F9FEFEFEF9F9FEFEFEF9FEFEJz9r;"9%;%9$8%9';s8w;$8%;$9z;"z9$8s9#Js E1F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F90F9FE5F9F9F9F9F9F9F9DF7J%J&Jt O3FEFEFEF9P-FEF9F9F9F9OBF9J"J( O5F9P.F9FEFEFEFEFEF9>z8z8z8z /F7R<F7/F7/F7sF"J"F"F& F7F7R=F7F7F7F7F7F7F7(z' F6F6F6F6F6F6F7SCD9F6F6F6F6F6F68%J& F9F9F9F9SEF9F9F9F9F7 Jz P7Q(D4J" S>FFJZ P9Q% J#9# 5FEFEFEFEJ" 7FEJ%8*9%9# >FEFEFEFEFED9FEFEFED9FEFEFEFEFEFEFEFEFEJ#:'81 7D9FEFEFED9D9FEFEFED9D9FEFED9D9FEFED9FEFED9D9FEFEJ#J# =D9D98D9D9J#:$F# 8D9FEFEFEFEFEFEJ%F% =FEFED9D9D9D9D9D9J"J#8# 9D99FEFEFEFEJ(A' =D9FEFEFED9FEFED9FEFEFEFED9J#9#8s8#8#8%9# 5D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 J" P8FFJz P7Q(D9 Jz P7Q(D4J" S>FFJZ P9Q% J#=#;# 8FEFEFEFEFEFEJ"8" 7FEFEJ#:#;#:+9%9%9# 8D9D9FEFEFEFEFEFED9FEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEJ":'9%;"85 6FEFED9FEFED9FEFEFED9FEFE4FEFED9D9FEFED9FEFED9D9FEFED9FEFED9D9FEFEJ"<"<#?%9%8# @D9D9D9D9FED9D9D9FED9D9D9D9D9J#I":#9&8& 8FEFED9FEFED9D9FEFEFED9D9FEFEFEJ)J%9"8"9"8" 5FEFED9D9D9D9FEFE5D9D9D9D9D9FED9FEJ"<"B(9%:# @FEFEFEFED9FEFED9D9FEFED9D9FEFEJ%9%>5 =D9FEFED9D9FEFED94D9FEFEFEFED9D9D9FEFEFEFED9D9D9FEFEFEFED9J#:s8s:%9%9%9# 5D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 J" P8FFJz P7Q(D9 Jz P7Q(D4J" S>FFJZ P9Q% J*J#9#I# 5FEFEFEFEFEFED9FEFE?FEFEFEFEFEFEJ&J" 7D9D9D9FEFECFEJ#9%8&9%E#8-;#9%8) ?FEFEFEFEFEFEFEFED9FEFEFEFEFEFEFEFEFEFED9FED9FEFEFED9FEFEFEFEFEFEFEFEFEFEFED9FEFED9FEFE'J,9,>#B*9,9"J& F7F7F7F7F7F78FED9FEFED9FEFED9D9FEFEFED9FEFED9FEFED9D9FEFED9FEFED9D9FEFED9D9FEFEFED9FEFED9FEFED9D9FEFEFEQ>F7F7F7F7F7'G&8"C"J"D&J' F6F6F6F6F6F6FEFEFEFED9D9D9LD9D9D9D9D9D9Q9F6F6F6F6F6F68%G%J#A#J#;"J& F9F9F9F9D9D9D9D98FEFED9FE>FEFED9Q?F9F9F9F9F7J%J% O%D9D9D9D9ID9D9D9D9J#@"<"F">#=# O'FEFED9FEFEFEFEFEFEJ'>'D%F, CD9FEFEFEFED9D9FEFEFEFED9D9FEFED9D9FEFED9D9D9FEFEFEFED9J#;#8#8%8#8#8%=#9#8s8#8s9%8#:# 5D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 J" P8FFJz P7Q(D9 =z"z"z 0F6F7S F6F71F6<z8z8z 1F9RMF91F9 7z8z8z 6F7RMF75F7"J"J" F77F7S F7 ENDBITMAP %%EndBinary 81 191 288 353 R 7 X V 4 8 Q 0 X (entryf) 81 347.67 T (ield .name -validate alphabetic \134) 109.8 347.67 T ( -labeltext Name:) 81 337.67 T (entryf) 81 317.67 T (ield .address -labeltext Address:) 109.8 317.67 T ( -validate alphanumeric) 81 307.67 T (entryf) 81 287.67 T (ield .phone -validate numeric \134) 109.8 287.67 T ( -labeltext \322Phone Number:\323) 81 277.67 T (Labeledwidget::alignlabels \134) 81 257.67 T ( .name .address .phone) 81 247.67 T (foreach wid [list .name .address .phone] {) 81 227.67 T ( pack $wid -pady 5 -padx 10 \134) 81 217.67 T ( -f) 81 207.67 T (ill x -expand yes) 129 207.67 T (}) 81 197.67 T 0 10 Q (FIGURE 16) 134.64 164.09 T 1 F ( - Entry\336eld) 186.03 164.09 T 0 0 612 792 C 1 10 Q 0 X 0 0 0 1 0 0 0 K (child of the Buttonbox class. In addition to furnishing) 315 713.33 T (the standard methods and options for Tk button, the) 315 701.33 T (Pushbutton provides options for enabling/disabling the) 315 689.33 T (display of the default ring and geometry requirements.) 315 677.33 T 0 12 Q (Optionmenu) 395.16 483 T 1 10 Q -0.46 (The Optionmenu class allows selection of one item from) 315 464.33 P (a set of items. Only the selected item is displayed, until) 315 452.33 T (the user selects the option menu button and a popup) 315 440.33 T (menu appears with all the choices available for selec-) 315 428.33 T (tion. Once a new item is chosen, the currently selected) 315 416.33 T (item is replaced and the popup is removed from the dis-) 315 404.33 T (play) 315 392.33 T (. Commands exist for manipulating the menu list) 331.57 392.33 T (contents as well. These include the ability to insert,) 315 380.33 T (delete, select, disable, enable, and sort items.) 315 368.33 T 0 12 Q (Spinner) 407.16 130 T 1 10 Q (Spinners constitute a set of widgets which provide) 315 111.33 T (EntryField functionality combined with increment and) 315 99.33 T (decrement arrow buttons which may be oriented in a) 315 87.33 T (vertical, top and bottom, fashion or in a horizontal, side) 315 75.33 T 315 511 540 674 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 531.86 540 647 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 3350 147 103 75.6 52.97 0 396 584 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000008EEF9AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000082D78AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000006DB675C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F4F5P&F4F57F4F5J" Q'F58z8z8z 5F8P%F85F8 <z" PJF5F4=z"z"z"z 0F4F5OCF4F50F4F50F4>z8z8z8z /F8OBF8/F8/F8 JrG$<'D":" :FEFEFEFEFEFEFEFEFEFEFEFEJ"8&F">"8%B":"Js" :F8F8F8F8FEFEF8F8F8F8FEFEFEFEKF4F5Jr PDF8J(9%;#B(8"8$8#8$9' CFEFEFEF8FEFEFEFEFEFEFEFEFEFEFEFEF8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF8FEFEAs"A&9":%;%;%8"9":"8$8,8%A$ F4F5FEFEF8F8F8F8FEF8F8F8FEF8FEFEFEFEFEF8F8F8F8F8F8F8F8F8FEFEFEF8FEFEFEF8F8FEF8FEFEF4F4F5Br@%B%:">&J$<"E" F8FEFEFEF8FEFEFEF8F8F8F8F8FEFE6F8F8F8F8F8As@$B"9"J# F5F8F8F8F8FEO2F5F5AtI":%J"F$J$ F8FEFEF8F8F88FEFEF8FE5F8F8F8J"8"<%8"8'8"9$8&8%8"8$8.8"9" :FEFEF8FEFEF8FEFEFEFEF8F8FEFEFEF8FEFEFEFEFEF8F8FEFEF8FEF8FEFEF8FEFEF8F8F8FEFEFEF8F8F8FEFEFEJ%=v8z:'9#9#9$9sJs :F8F8F8F8F80F8F8F8F8F8F8F8F8F8F8F8F8F8F8F88F5Jt PCF8 >z8z8z8z /F5OBF5/F5/F5sF"J"F"F& F5F5OCF5F5F5F5F5F5F5(z' F4F4F4F4F4F4F5PID9F4F4F4F4F4F48%J& F8F8F8F8PKF8F8F8F8F5 Iz P1FE Jz 5P-D9 Jz 7P)D8J" P?FFJz" 9P%D9FF JZ =OKJ" P9D8Jz" ?OGD9D8 J'E#<'@#9# GFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEJ&J& ID9D9D9FEFE8D9D9D9FEFEJ#8#8%;#A#8%8$8"8%8& O FEFEFEFEFEFEFEFEFEFEFEFEFEFED9FEFED9FEFEFEFEFEFEFEFED9FEFEJ'9%G"8$8)9% O'FEFED9D9FEFEFED9FEFED9D9D9D9D9D9FEFED9D9FEFEFED9FEFEJ&?%9"=&J" IFEFEFEFED9FED9D9D9D9FEFEFEFED9;D9J%>&B& ID9D9D9D9D9D9FEFEFED9D9D9FEFEJ"8" O)D9FEJ"9%J"=":" O#FEFEFED9D96FEFEFEJ%9'A+:0 O D9FEFED9D9FEFEFEFED9FEFEFEFED9D9D9FEFED9D9FEFED9D9D9FEFED9D9FEFEFEFED9J#<&8%8#8#8'9&9#9#8%8#8# GD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 Jz ?OGD8J" >D8Jz =OKD9 'IZH& F5F5F5F5F5F5P%F5F5F5F5F5'H"J' F4F4F4F4F4F4FFP7F4F4F4F4F4F48%GzG& F8F8F8F8P)D9F8F8F8F8F5 Jz 5P-FE Iz P1D9 =z"z"z 0F4F5P&F4F51F4<z8z8z 1F8P%F81F8 7z8z8z 6F5P%F55F5"J"J" F57F5P&F5 ENDBITMAP %%EndBinary 324 539 531 575 R 7 X V 4 8 Q 0 X (pushbutton .pb -text PushButton \134) 324 569.67 T ( -defaultring yes) 324 559.67 T (pack .pb -padx 12 -pady 12) 324 549.67 T 0 10 Q (FIGURE 17) 380.43 514.17 T 1 F ( - Pushbutton) 431.83 514.17 T 0 0 612 792 C 315 158 540 365 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 178.14 540 356 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 4071 264 73 135.77 37.54 0 359.23 311 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000008EEF9AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000082D78AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000006DB675C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7R?F6F77F6F7J" S@F78z8z8z 5F9R>F95F9 <z" S5F7F6=z"z"z"z 0F6F7R.F6F70F6F70F6>z8z8z8z /F9R-F9/F9/F9 J&C"9#I%9% OFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEJ(A"J"?"Js" OEFEFEF9F9F9FEFEFE9F9F9P.F6F7J$9$E#Jr ODFEFEF9F9FEFEF9F9PMF9J'9"8&:$9';'<$8'9( OMFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFEF9FEFEF9FEF9FEFEFEFEFEFEF9FEFEFEFEFEF9FEFEFEAs"J"8(8$:*8%D)8%8"9"J$ F6F7O9F9FEF9FEFEFEF9F9F9F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEFEFEFEF9FEFEF9F9FEF9FEFEF9F9O8F6F6F7BrJ$E$<"J"<"J" F9O=F9F9F9F9F9F9F94FEF9OCF9AsJ%=%J# F7P3F9FEFEF9F9F9F9F9OGF7F7AtJ$9$9$E$J%D"J$ F9O0F9FEFEFEFEF9FEF9FEFEF9FE:FEF9FEFEFEO8F9F9F9J(:&8&8,8"9&:"8+8"9"8%8" OEF9FEFEFEFEFEF9F9FEFEF9F9F9FEFEF9FEFEF9F9F9FEFEFEF9F9F9FEFEFEF9FEFEFEFEFEF9F9F9FEFEFEF9F9FEFEFEF9FEFEF9FEJ&<#;r9$9z9$8s9'Js OFF9F9F9F9F9F9F9F9F9F9F94F9F9F9F9F9F9F9F9F9F9F9OCF7Jt S.F9J"8" OMFEFE>z8z8z8z /F7R-F7/F7/F7sF"J"F"F& F7F7R.F7F7F7F7F7F7F7(z' F6F6F6F6F6F6F7S4D9F6F6F6F6F6F68%J& F9F9F9F9S6F9F9F9F9F7 JZ Q'P*J" S0D8Jz" Q)P&D9D8 J%J#8#J&H#J#:# 7FEFEFEFE>FEFEFEFE5FEFEFEFEFEFEFEO*FEFEFEFEJ'J#J(J# 6FEFED9D9FEFEAD9D94FEFED9D9D9FEFEOCD9D9J$8*9%8+8"8+9&D#9#8%8"8"8%8*9%9#J)8#8&8#JW 5FEFED9D9FEFED9FEFED9FEFEFEFEFEFEFEFED9FEFED9FEFEFEFEFEFED9FEFED9FEFED9FEFEFEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9FEFEFED9FEFEFEFEFEFEFEFEFE@FEFED9FEFED9FEFEFEFEFEFED9FEFEFEFE=J,9"8)8"<*>(?)8)81J%J" @FED9FEFED9FEFED9D9FEFEFEFEFED9D9FEFED9D9D9FED9FEFED9FEFED9FED9FEFEFED9D9D9FEFED9D9FEFED9D9D9D9FEFED9D9FEFEFED9D9FEFED9D9FEFED9FEFED9D9FEFEIFED9FEFEO(D8J"D%E"="?&8(9%J%8#J"A'Js" @D9D9D9D9D9D9D9D9D9FEFEFED9FEFED9FEFED9FED9D9D9:FED9D9D9D9D9ED9D9FEFEFEFED9?D9D8J#;"9$J"8"?&?#D&J"8" GFEFED9FEFEFEAD9FED9D9FEFEFEFEFED9D9FEFEFEO)D9D9J%<%J#8":&:"8">%D"8"J"8"Js GD9D9D9D9FEFED9D9>FEFED9D9FEFEFED9D9FED9D9D9D9D9FEO(FEFE@D8J$8$9">#G"C"J%=":#B%:#J"9'J" 5D9FEFEFEFED9FEFEFEFEFE8FEFED9D9FEFEFEFEFED9D9FEFEMFEFEFED9D9FEFE>D8'F':,<-@%>(9";'8+B'J%@%JwJ& F7F7F7F7F7F7D9FEFEFEFED9D9FEFED9D9D9FEFEFEFED9D9FEFEFED9FEFED9D9FEFED9D9FEFED9D9FEFEFEFEFED9D9D9FEFEFEFED9D9FEFED9D9FEFEFEFED9D9FEFEFEFED9@FEFEFEFED9FEFED9FD96F7F7F7F7F7'G%<#9%8#:'8s8#8#@&<":%:#8%8#8#8#8%9#Jv8#8s8#J' F6F6F6F6F6F6D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9:D9D9D9D9D9D9O1F6F6F6F6F6F68%J#J"J& F9F9F9F9O3FEFE4FEQ:F9F9F9F9F7J'E$ O9D9FEFEFEFED9FEFED9J#J%F# >D9D9HD9D9D9D9D9D9 Jz Q)P&D8J" Q(D8Jz Q'P*D9 =z"z"z 0F6F7R?F6F71F6<z8z8z 1F9R>F91F9 7z8z8z 6F7R>F75F7"J"J" F77F7R?F7 ENDBITMAP %%EndBinary 324 185 531 302 R 7 X V 4 8 Q 0 X (Optionmenu .om \134) 324 296.67 T ( -labeltext \322Operating Systems:\323 \134) 324 286.67 T ( -items {SunOS HP/UX AIX OS/2 Windows} \134) 324 276.67 T ( -command SelectProc) 324 266.67 T (pack .om -padx 10 -pady 10) 324 256.67 T (.om insert end Linux VMS) 324 236.67 T (.om disable DOS) 324 226.67 T (.om delete 1 2) 324 216.67 T (.om sort ascending) 324 206.67 T (.om select Linux) 324 196.67 T (.om conf) 324 186.67 T (igure -cyclicon true) 362.4 186.67 T 0 10 Q (FIGURE 18) 375.73 160.17 T 1 F ( - Optionmenu) 427.11 160.17 T 0 0 612 792 C FMENDPAGE %%EndPage: "11" 11 %%Page: "12" 12 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (by side, manner) 72 713.33 T (. A value may be entered into the entry) 135.05 713.33 T (area explicitly or the buttons may be pressed which) 72 701.33 T (cycle up and down through the choices. This latter) 72 689.33 T (behavior is one of spinning.) 72 677.33 T (The following code segment creates a month spinner) 72 653.33 T (based on the Spinner class. The months are stored in a) 72 641.33 T (list from which the spinMonth procedure cycles. The) 72 629.33 T (Spinner increment and decrement options invoke this) 72 617.33 T (procedure with a direction ar) 72 605.33 T (gument which is 1 or -1.) 187.34 605.33 T (The Spinner disables input by making the blockInput) 72 593.33 T (procedure the validation procedure which always) 72 581.33 T (returns invalid.) 72 569.33 T 72 167 297 566 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 206 297 548 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 3312 179 73 92.06 37.54 0 144 503 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000096FB7DFFCF9A96FB69FBB29AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000096FB6DFFB66996FB86FFDF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000009AFF5DDF9E719AFF8EFFEF75C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7PFF6F77F6F7J" QGF78z8z8z 5F9PEF95F9 <z" Q<F7F6=z"z"z"z 0F6F7P5F6F70F6F70F6>z8z8z8z /F9P4F9/F9/F9 J'@# O*FEFEFEFEF9FEFEFEJ'Js" O)FEFEF9F9F9FEP&F6F7J"A#Jr O.F9F9F9OHF9J#8(9$8'9';$8' O+FEFEF9FEFEFEF9FEFEFEFEFEFEFEFEF9FEFEFEFEFEF9FEFEFEFEFEFEFEFEF9FEFEAs"J"9%8(:"8%8"8%8)8"J$ F6F7CF9FEFEF9F9FEF9FEFEFEF9F9F9FEF9FEFEF9FEF9FEFEFEFEFEF9FEFEF9F9FEHF6F6F7BrJ#9"9$A">">"<$J" F9EF9F9FEF9F9F9F9F9FEF9F9F9GF9AsJ"8#J%J# F7DFEF9F9DF9F9F9F9MF7F7AtJ">$J%J$ F9DFEFEF9FE<FEF9FEFEMF9F9F9J'9(8$8"9$8"9+8" O*F9FEFEFEFEF9F9FEFEF9F9F9FEFEF9FEFEFEF9FEFEFEF9F9F9FEFEFEF9F9FEFEJ';#9z9$8%Js O)F9F9F9F9F9F9F9F96F9F9F9F9F9F9F9F9O(F7Jt Q5F9J"8" O0FEFE>z8z8z8z /F7P4F7/F7/F7sF"J"F"F& F7F7P5F7F7F7F7F7F7F7(z' F6F6F6F6F6F6F7Q;D9F6F6F6F6F6F68%J& F9F9F9F9Q=F9F9F9F9F7 Jz8U O:O>D3J"9s" Q)FFD9D8Jz"=" O<O:D4FFFEJ" Q1FEJ" Q/FEJ#;#F#8#J"J" 5FEFEFEFEFEFEFEFE<FEO=FEJ" Q.FEJ"9":%8&8"8":#=#J$9%9"9"9$9&9"J" 7FEFEFEFEFEFEFEFED9FEFEFEFEFEFEFEFE4FEFEFEFED4FEFEFEFEFEFEFEFED4FED4FEFEEFEJ'9'8"9%J&9%?&9#J' ?FEFED9D9FEFEFED9FEFED9D9D9FED9FEFE;FED4D4D4FEFED4D4FEFED4D4D4FEFED4FD9D9D9D9D9D9J$C"A"?#I"="B"="Js 8FED9FED9D9D9D9D4D4D4D4FD8J"9"J$H$@#JT 7D9D9O*FEFEFEFEFEFEFED4?J"J"<%G%=#Jr# 9FEO$FEFED4D4D4FED4D4D4D4FEBFED9D8J$J"B#J"J" 8D9FED96FEFEFEDFEO$D9'J'?%J&8'>%9'<$J"D& F7F7F7F7F7F79D9FEFEFEFED9D9FEFED9:D4FEFEFED4D4FEFEFED4FED4FEFED4D4FEFEFED4FED4FED4FD9F7F7F7F7F7'E#8"8#8%8#8#9&8#<#C$:r9"9%9rJ"I' F6F6F6F6F6F6D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D4D4D4D4HD9F6F6F6F6F6F68%J#J"F& F9F9F9F9P2FED4FD9F9F9F9F9F7J#J" P7FED4DD9J"J" P7D4GD9JZ>" O<O:D9J"Js O;FFO?D8Jz8u O:O>D9D9 =z"z"z 0F6F7PFF6F71F6<z8z8z 1F9PEF91F9 7z8z8z 6F7PEF75F7"J"J" F77F7PFF7 ENDBITMAP %%EndBinary 81 215 288 494 R 7 X V 4 8 Q 0 X (set months {January February March April \134) 81 488.67 T -0.25 ( May June July August September \134) 81 478.67 P ( October November December}) 81 468.67 T (proc blockInput {} {return 0}) 81 448.67 T (proc spinMonth {direction} {) 81 428.67 T ( global months) 81 418.67 T ( set index \134) 81 408.67 T ( [expr [lsearch $months [.sm get]] + \134) 81 398.67 T ( $direction]) 81 388.67 T ( if {$index < 0} {set index 11}) 81 368.67 T ( if {$index > 11} {set index 0}) 81 358.67 T ( .sm delete 0 end) 81 338.67 T ( .sm insert 0 [lindex $months $index]) 81 328.67 T (}) 81 318.67 T (spinner .sm \134) 81 298.67 T ( -labeltext \322Month : \322 \134) 81 288.67 T ( -width 10 -f) 81 278.67 T (ixed 10 \134) 157.8 278.67 T ( -validate blockInput \134) 81 268.67 T ( -decrement {spinMonth -1} \134) 81 258.67 T ( -increment {spinMonth 1}) 81 248.67 T (.sm insert 0 January) 81 238.67 T (pack .sm -padx 10 -pady 10) 81 228.67 T 0 10 Q (FIGURE 19) 143.17 181.17 T 1 F ( - Spinner) 194.56 181.17 T 0 0 612 792 C 0 12 Q 0 X 0 0 0 1 0 0 0 K (Spinint) 408.82 712 T 1 10 Q (The most common data type for which spinning behav-) 315 693.33 T (ior is useful is that of integers. The Spinint class of) 315 681.33 T (fers) 518.42 681.33 T (this capability by specializing the Spinner class. Addi-) 315 669.33 T -0.07 (tional options are provided which allow speci\336cation of) 315 657.33 P -0.25 (a step and range values which vary and limit the cycling.) 315 645.33 P ( The following example creates a water temperature) 315 621.33 T -0.54 (integer spinner widget labeled appropriately) 315 609.33 P -0.54 (. The widget) 488.84 609.33 P (options limit the range of values to between freezing) 315 597.33 T (and boiling, speci\336es a step value of two, enables wrap-) 315 585.33 T (ping, and orients the buttons in a side by side fashion.) 315 573.33 T 0 12 Q (Spindate) 404.83 394.71 T 1 10 Q (The spindate class creates a set of spinners for use in) 315 370.05 T -0.29 (date entry) 315 358.05 P -0.29 (. The set includes three spinners con\336gured to) 353.77 358.05 P (support day) 315 346.05 T (, month and year entry) 361.29 346.05 T (. Options allow con-) 450.9 346.05 T (trol over the display of each spinner) 315 334.05 T (, the format of the) 458.46 334.05 T (month, and the orientation.) 315 322.05 T 315 422.71 540 570 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 450.43 540 561 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 4730 255 73 131.14 37.54 0 363.14 513.86 /red < 3EC472FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700FF5500557FB22EAFB4CD73E6A24DBF99FFFFB07AFFB0CC F5008788439D58D750D080C0C080C0808060C000FFA000FF20C0A040C040D0BE 8BD28BD9B3FF7260F0E010B499FFA00019BF2FFF6223852F465F4770FF0000FF > store /green < 57D79F00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE700FF1A006B7FB28BEEEE0073E6A24DBF99FFFFB094FF30F7 F500CE884DB358D78080C0C080C080808060C08000A080402070A0402040D0BE 5BB477D9B3FF77F0F0E010B489E4A0FF19264F00B641DE4F829E4780FF0000FF > store /blue < 8CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BFCC8BEE2F7FB257EEB40073E6A24DBF6BFBB3B015326024 F580FA8856CA58D7D050C080C08080C08060C080FF0000402070C0802040D0BE 7A8C65D9B3E0856050E010B476C4A00070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7R8F6F76F6F7J" S7F78z8z8z 4F9R7F94F9 ;z" S.F7F6<z"z"z"z 0F6F7R'F6F70F6F70F6=z8z8z8z /F9R&F9/F9/F9 J'@#A%B" P#FEFEFEFEF9FEFEFEFEFEFEFEFEJ'J"8"A"Js" P"FEFEF9F9F9FE8F9F9FEP$F6F7J"A#Jr P'F9F9F9P@F9J#8(9$8'>'9"8# P$FEFEF9FEFEFEF9FEFEFEFEFEFEFEFEF9FEFEFEFEFEF9FEFEFEFEFE@s"J"9%8(:"8%="8%8"8#J$ F6F7O=F9FEFEF9F9FEF9FEFEFEF9F9F9FEF9FEFEF9FEF9FEFEF9F9F9OAF6F6F7ArJ#9"9$A"C"J" F9O?F9F9FEF9F9F9F9F9OLF9@sJ"8#J# F7O>FEF9F9P?F7F7@tJ">$J$ F9O>FEFEF9FEP7F9F9F9J'9(8$8"9$8$8"9"8$ P#F9FEFEFEFEF9F9FEFEF9F9F9FEFEF9FEFEFEF9FEFEF9FEFEFEF9FEFEJ';#9z9#Js P"F9F9F9F9F9F9F9F9;F9F9F9P"F7Jt S&F9J"8" P)FEFE=z8z8z8z /F7R&F7/F7/F7rF"J"F"F% F7F7R'F7F7F7F7F7F7'z& F6F6F6F6F6F7S-EDF6F6F6F6F68$J% F9F9F9S/F9F9F9F7 J5=4;4 Q&IC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FFEDFFEDFFEDFFEDFFEDFFEDFFEDFFEDFFEDFFFFEDFFEDFFEDFFEDFFEDFFEDFFEDFFEDFFEDFFJ5<"r#u:"z$ Q&IFEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FEC0FFFFEDFEFEEDFF0FEEDEDEDJ#z#<"<"A":"H" Q&C0FEEC0FFC0EDFEFEEDFEJ#J#<"?">":"E"8" Q&FEC0EC0FFFFFEEDFFEDEDJ#J#<";"B":#G" Q&C0FEEFFC0EDFEFEEDEDFEI#8#8#>#HsJ#J#9$:$J#<"@"=":"D"9" FEFEFEFEFEFEFEFEFEMFEFE@FEC0FEFEFEFEFEFE8C0FFFFFEEDFFEDEDJ$8$J#8&8&J#<":"C":$F" O+EDEDEDEDEDEDOAC0FEFEC0C0C0FEFEC0C0C0FE7FFC0EDFEFEEDEDEDFEJ%8"8"8%8&C%8*8&9%8+8"8%8.9#>#8"<"J#<"A"<":"C":" >FEFEFEFEFEFEFEFEFEFEFEFEEDFEFEFEFEFEFEFEEDFEFEFEEDFEFEFEFEFEEDFEFEFEFEFEFEFEFEEDFEFEEDFEFEFEFEFEFEEDFEFEFEFEEDFEFEEDFEFEEDFEFEFEFEFEFEFEC0C0C0;C0FFFFFEEDFFEDEDI">*8)9"D'8*9,9"8)8"@"8'B#:$;#J#<"9"D":"8"E" EDEDFEFEEDEDFEFEEDEDEDEDFEFEEDEDFEFEFEFEFEEDEDFEFEFEEDEDFEFEEDEDFEFEFEEDFEFEEDFEFEEDEDFEFEFEFEFEEDEDFEFEEDEDEDFEFEFEEDEDFEFEC0FEFEFEC0FEC07FFC0EDFEFEEDEDFEJ":"8#J#J"D%J#>#>#:$:#J#<"B";":"B";" 5FEFEEDED4EDED@EDEDEDEDED4EDEDEDEDFEC0C0C0FEFEC08C0FFFFFEEDFFEDEDJ$@#;"F#J#;"9$G":#D#@#J#<"8"E":"9"D" >FEFEFEFEFEEDFEFE7FEFEEDFEFEFEEDFEFEC0FEFEC09FFC0EDFEFEEDEDFEJ.@%J%J%<%J%B#8"<#J#<"C":":"A"<" 4EDFEFEEDEDFEFEEDEDFEFEEDEDEDEDEDED4EDEDEDED5EDEDEDEDFEFEEDED6EDEDEDEDFEC0FEFEC0:C0FFFFFEEDFFEDEDJ":#J#D">#G"9"B#8#>#J#<$F":":"C" HFEFEFE6FEFEFEFEFEFEFEFEFEFEFEC0FEEFFC0EDEDFEFEEDEDFEJ3H'D,<1>'B#8&9%J#<"D"9":"@"=" =EDFEFEFEEDFEFEEDEDFEFEEDEDFEFEFEFEEDEDFEFEFEFEEDEDFEFEEDEDEDFEFEFEFEEDEDFEFEFEEDFEFEEDEDFEFEEDEDFEFEEDEDFEFEFEFEEDFEC0C0FEFEFEC0FEFEFEFE7C0FFFFFEEDFFEDED&F#8#9'8#8%8#@#:%8#8#8#:#9%8#:'8#8s:%9#>#9$9&J#<#G":";"B"D% F7F7F7F7F7EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDC0FEC0C0C0C0C0C0C0C07FFC0EDFEFEEDEDFEF7F7F7F7&J#J#<"E"8":"?">"D& F6F6F6F6F6Q!FEC0EC0FFFFFEEDFFEDEDF6F6F6F6F68$J#J#<"H":"<"A"E% F9F9F9Q!C0FEEFFC0EDFEEDEDFEF9F9F9F7J#J#J#<"F$:">"?" OEEDEDO-FEC0EC0FFFFFEEDEDFFEDEDJ5<z":"="@" Q&IC0FEC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC03EDFEEDEDFEJ5<5:5 Q&IFEC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FF4FFEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEED4FFEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDJz<z;z Q&IED3ED3ED <z"z"z 0F6F7R8F6F71F6;z8z8z 1F9R7F91F9 7z8z8z 5F7R7F74F7"J"J" F76F7R8F7 ENDBITMAP %%EndBinary 324.71 455.86 531.71 509.86 R 7 X V 4 8 Q 0 X (spinint .temp -labelpos w \134) 324.71 504.52 T ( -labeltext \322Water Temperature:\323 \134) 324.71 494.52 T ( -f) 324.71 484.52 T (ixed 5 -width 5 -range {32 212} \134) 353.51 484.52 T ( -step 2 -wrap yes -orient horizontal) 324.71 474.52 T (pack .temp -padx 10 -pady 10) 324.71 464.52 T 0 10 Q (FIGURE 20) 386.68 437.46 T 1 F ( - Spinint) 438.07 437.46 T 0 0 612 792 C 315 72 540 720 C 315.14 153.14 540 318.71 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315.72 187.85 538.57 309.71 R 0.5 H 2 Z 0 X 0 0 0 1 0 0 0 K N 349 194.57 520 221.57 R 7 X V 1 10 Q 0 X (spindate .sd -monthformat string) 349 214.91 T (pack .sd -padx 10 -pady 10) 349 202.91 T %%BeginBinary: 7044 138 123 70.97 63.26 0 387.14 237.71 /red < C472FFFFFFFFFFFFFFFFFFFFFFFFFF66F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF808080 8080808080808080808080808080808080808080804040404040404040404040 4040404040404040404040400000000000000000000000002EAFB4CD73E6A2F5 99FFFFB0B07AFFCC00878858D7439D50D080C0C080C08060C000FFA000FF20C0 A0C0D060F0E010B499FFBE8B8BD900FFA0000000000039C069DD00FF00000033 33330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7AEFD3BF804040 9765E1A36FE700FF55004DB2D272B36419BF2FFF6223852F465F4770FF0000FF > store /green < D79F0000000000000000000000000099DEFFFFFFBFBFBFBFBF80808080804040 4040000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFF FFFFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF80 808080804040400000000000FFFFFFBFBFBFBFBF808080408BEEEE0073E6A2F5 99FFFF30B094FFF700CE8858D74DB38080C0C080C0808060C08000A080402070 A020D0F0F0E010B489E4BE5B77D9FFFFA0404040400063E0B500996699FF0066 3399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69E3B5BF804040 9765E1A36FE700FF1A004DB2B477B39519264F00B641DE4F829E4780FF0000FF > store /blue < FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3BF8040FFBF804000FFBF804000FFBF 8000BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF80 4000FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FF BF804000FFBF00FFBF804000BF8040FFBF804000FFBF40FF57EEB40073E6A2F5 6BFBB360B015322480FA8858D756CAD050C080C08080C060C080FF0000402070 C020D06050E010B476C4BE7A65D900E0A0BF8040004063E0B500FF3399FF8866 6666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69E3B5BF808040 9765E1A36FE7BFCC8BEE4DB28C85B3ED70264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7OMF6F76F6F7J" PLF78z8z8z 4F9OLF94F9 ;z" PCF7F6<z"z"z"z 0F6F7O<F6F70F6F70F6=z8z8z8z /F9O;F9/F9/F9 J#E$B" O!FEFEFEFEFEFEJ"C"Js" O2F9FEHF6F7J#Jr O!F9F9O9F9Jr$9$8';#<%9"8#8$ AFEF9FEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFE@s"C'8(:"8%8&<%8"8)G$ F6F7FEF9F9F9FEF9FEF9FEFEFEF9F9F9FEF9FEFEFEFEFEF9FEF9F9FEFEF9F9F9FEFEFEF9FEFEF6F6F7ArE%9$A"=$;$B"J" F9FEFEFEF9F9F9F9F9F9F9F9F9FEFEFE4F9@sD"9"J%A%G# F7F9FE@FEFEF9F9F9F9F9F9F7F7@tC%:$I$="A%G$ F9FEF9F9F9FEF9FEFEF9FEFEFEF9FEFEF9F9F9J%9(8$8"9(8'8"8+ AFEFEFEF9F9FEFEF9F9F9FEFEF9FEFEFEF9F9F9FEFEF9FEF9F9FEFEF9FEF9FEFEF9F9F9FEFEFEF9J%;#9x9'8'9#9$Js @F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9@F7Jt P;F9J"8" EFEFE=z8z8z8z /F7O;F7/F7/F7rF"J"F"F% F7F7O<F7F7F7F7F7F7'z& F6F6F6F6F6F7PBADF6F6F6F6F68$J% F9F9F9PDF9F9F9F7 J2 P*FFADFFADFFADFFADFFADFFADFFADFFADFFJ4 P)FFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ5:#z# O1B7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFEADFF/ADFEADJ5:#="=# O1BFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFFADFEADFEJ#z":#<$<# O17FFE?7FFFADFFFEFEFEFEADJ#J#:#;"9";# O1FE7F>FF7FFFADFEFEADFEJ#J#:#:";":# O17FFE>7FFFADFFFEFEFEADJ#;#F#8#B#<"J#:#9"="9# 4FEFEFEFEFEFEFEFEFE7FFE7FF7FFFADFEFEADFEJ#J#:#8"?"8# O17FFE>7FFFADFFFEFEFEADJ"9":%8&8"8":#?#@$9%@#:#8v8# 6FEFEFEFEFEFEFEFEADFEFEFEFEFEFEFE7FFEFEFEFE7FFEFEFF7FFFADADADFEJ'9'8"9%>#?&9%?#:4 >FEFEADADFEFEFEADFEFEADADADFEADFEFE7FFEFE7F7F7FFEFE7F7FFE7FFFADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ$C"A"A#?"="B#:4 7FEADFEADADFE7F7F7FFF7FFFADFEADFEADFEADFEADFEADFEADFEADFEADFEJ"9"J#@$G#:4 6ADADD7FFEFEFEFE7FFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADJ"J#8"<%G#:4 8FEFFE7FFEFE7F7F7FFF7FFFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ$J"D#J#:#z# 7ADFEAD6FE7FFE>7FFFADFF/ADFEADJ'?%D#8&8'E#:#8v8# >ADFEFEFEFEADADFEFEADFE7F7FFEFEFE7F7FFEFEFE7FFEFF7FFFADFEADFEJ#8"8#8%8#8#9&8#>#9$:r9"?#:#8"?"8# 4ADADADADADADADADADADADADADADADADADADADAD7FFE7F7F7F7F7F7FFFADFFADADFEADJ#J#:#9"="9# O1FE7F>FF7FFFADADADADFEJ#J#:#:";":# O17FFE>7FFFADFFADADFEADJ#J#:#;"9";# O1FE7F>FF7FFFADADADADFEJ5:#<$<# O1B7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFFADFFADFEADFEADJ5:#="=# O1BFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFFADADADFEJz:4 O1BADADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ4 P)FFADFEADFEADFEADFEADFEADFEADFEADFEADFEJz P)3ADJ2 P*FFADFFADFFADFFADFFADFFADFFADFFADFFJ4 P)FFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ5:#z# O1B7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFEADFF/ADFEADJ5:#="=# O1BFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFFADFEADFEJ#z":#<$<# O17FFE?7FFFADFFFEFEFEFEADJ#J#:#;"9";# O1FE7F>FF7FFFADFEFEADFEJ#J#:#:";":# O17FFE>7FFFADFFFEFEFEADJ&J#:"J#:#9"="9# 4FEFEFEFEFEFFE7FFE9FF7FFFADFEFEADFEJ%J#8#J#:#8"?"8# 6ADADFEFEE7FFEFEFE:7FFFADFFFEFEFEADJ$8%8#9#J#8#J#:#8v8# 8ADFEFEFEFEFEFEFEFEFEFE5FE7F7F7F:FF7FFFADADADFEJ'J#J#:4 <FEFEADADFEFE=7FFE>7FFFADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ#;(J#J#:4 <ADADADFEFEADFEFEAD5FE7F>FF7FFFADFEADFEADFEADFEADFEADFEADFEADFEADFEJ$J#J#:4 =FEFEFE?7FFE>7FFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADJ%:&J#J#:4 <FEFEADADADFEFEFEAD6FE7F>FF7FFFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ$J#J#:#z# 8FEFEADD7FFE>7FFFADFF/ADFEADJ%8(8"J#J#:#8v8# 6FEFEFEADADFEFEFEADFEFEAD9FE7F>FF7FFFADFEADFEJ&:':"J#:"J#:#8"?"8# 4ADADADADADADADADADADADAD77FFE7F97FFFADFFADADFEADJ"J#J#:#9"="9# EFE9FE7F>FF7FFFADADADADFEJ$J#J#:#:";":# DFEFEAD87FFE>7FFFADFFADADFEADJ#J#J#:#;"9";# DADAD9FE7F>FF7FFFADADADADFEJ5:#<$<# O1B7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFFADFFADFEADFEADJ5:#="=# O1BFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFFADADADFEJz:4 O1BADADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ4 P)FFADFEADFEADFEADFEADFEADFEADFEADFEADFEJz P)3ADJ2 P*FFADFFADFFADFFADFFADFFADFFADFFADFFJ4 P)FFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ5:#z# O1B7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFEADFF/ADFEADJ5:#="=# O1BFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFFADFEADFEJ#z":#<$<# O17FFE?7FFFADFFFEFEFEFEADJ#J#:#;"9";# O1FE7F>FF7FFFADFEFEADFEJ#J#:#:";":# O17FFE>7FFFADFFFEFEFEADI#:#J#9$9&F#:#9"="9# FEFEFEFEDFE7FFEFEFEFEFEFEFEFEFF7FFFADFEFEADFEJ#8&9%F#:#8"?"8# O17FFEFE7F7F7FFE7F7F7F7F7FFFADFFFEFEFEADI$8)9%8&G#J#:#8v8# ADFEFEFEFEADADFEFEFEFEFEFEFEFEFEFEADFEFEFE7F>FF7FFFADADADFEJ.9"I#@$G#:4 ;FEFEADADFEFEADFEFEADADFEFEFE7FFEFEFEFE7FFFADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ'>#>#G#8%9&F#:4 4ADFEFEFEFEADADADADADFE7F7FFEFEFE7F7F7F7FFEFF7FFFADFEADFEADFEADFEADFEADFEADFEADFEADFEJ"8":#:$;"I#9$J#:4 5ADADFEFEFEFEFEAD7FFE7F7F7F87FFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADJ*J#?"J#:4 =ADADADADADFEFEADAD9FE7FFE4FF7FFFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ#J#8"J#:#z# ?FEFE>7FFEFE;7FFFADFF/ADFEADJ/J#8&8&F#:#8v8# ;ADFEFEFEFEADADADFEFEFEADFEFE6FE7F7FFEFEFE7F7FFEFEFE7FFF7FFFADFEADFE&G#:%9sJ#9$:$G#:#8"?"8#B% F7F7F7F7F7ADADADADADADAD47FFE7F7F7F7F7F7F7FFFADFFADADFEADF7F7F7F7&J#J#:#9"="9#B& F6F6F6F6F6O,FE7F>FF7FFFADADADADFEF6F6F6F6F68$J#J#:#:";":#C% F9F9F9O,7FFE>7FFFADFFADADFEADF9F9F9F7J#J#:#;"9";# O1FE7F>FF7FFFADADADADFEJ5:#<$<# O1B7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFFADFFADFEADFEADJ5:#="=# O1BFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFFADADADFEJz:4 O1BADADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ4 P)FFADFEADFEADFEADFEADFEADFEADFEADFEADFEJz P)3AD <z"z"z 0F6F7OMF6F71F6;z8z8z 1F9OLF91F9 7z8z8z 5F7OLF74F7"J"J" F76F7OMF7 ENDBITMAP %%EndBinary 0 F (FIGURE 21) 387.86 168.32 T 1 F ( - Spindate) 439.25 168.32 T 315 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "12" 12 %%Page: "13" 13 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 12 Q 0 X 0 0 0 1 0 0 0 K (Spintime) 161.5 712 T 1 10 Q (The spintime class is simiar to the spindate class sup-) 72 687.33 T (porting time entry rather than date. The three spinners) 72 675.33 T (are hour) 72 663.33 T (, minute, and second.) 104.64 663.33 T 0 12 Q (Scr) 146.6 485 T (olledlistbox) 163.72 485 T 1 10 Q (The Scrolledlistbox extends the standard Tk listbox) 72 466.33 T -0.51 (widget with prede\336ned vertical and horizontal scrollbars) 72 454.33 P -0.08 (and an associated label. The set of options available has) 72 442.33 P -0.06 (also been amended to include options which allow spec-) 72 430.33 P (i\336cation of the list items. All the usual methods exist,) 72 418.33 T -0.41 (plus new ones for sorting the list contents and a short cut) 72 406.33 P (version to acquire the current selection.) 72 394.33 T 72 72 297 720 C 72 513 297 660 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 534 297 651 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 108 543 270 570 R 7 X V 1 10 Q 0 X (spintime .st) 108 563.33 T (pack .st -padx 10 -pady 10) 108 551.33 T %%BeginBinary: 6922 138 123 70.97 63.26 0 145.03 578.74 /red < C472FFFFFFFFFFFFFFFFFFFFFFFFFF66F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF808080 8080808080808080808080808080808080808080804040404040404040404040 4040404040404040404040400000000000000000000000002EAFB4CD73E6A2F5 99FFFFB0B07AFFCC00878858D7439D50D080C0C080C08060C000FFA000FF20C0 A0C0D060F0E010B499FFBE8B8BD900FFA0000000000039C069DD00FF00000033 33330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7AEFD3BF804040 9765E1A36FE700FF55004DB2D272B36419BF2FFF6223852F465F4770FF0000FF > store /green < D79F0000000000000000000000000099DEFFFFFFBFBFBFBFBF80808080804040 4040000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFF FFFFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF80 808080804040400000000000FFFFFFBFBFBFBFBF808080408BEEEE0073E6A2F5 99FFFF30B094FFF700CE8858D74DB38080C0C080C0808060C08000A080402070 A020D0F0F0E010B489E4BE5B77D9FFFFA0404040400063E0B500996699FF0066 3399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69E3B5BF804040 9765E1A36FE700FF1A004DB2B477B39519264F00B641DE4F829E4780FF0000FF > store /blue < FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3BF8040FFBF804000FFBF804000FFBF 8000BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF80 4000FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FF BF804000FFBF00FFBF804000BF8040FFBF804000FFBF40FF57EEB40073E6A2F5 6BFBB360B015322480FA8858D756CAD050C080C08080C060C080FF0000402070 C020D06050E010B476C4BE7A65D900E0A0BF8040004063E0B500FF3399FF8866 6666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69E3B5BF808040 9765E1A36FE7BFCC8BEE4DB28C85B3ED70264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7OMF6F76F6F7J" PLF78z8z8z 4F9OLF94F9 ;z" PCF7F6<z"z"z"z 0F6F7O<F6F70F6F70F6=z8z8z8z /F9O;F9/F9/F9 J#C"9# O FEFEFEFEFEJ"Js" O.FEO,F6F7J#G#Jr O F9F9F9F9O'F9Jr$9$8'9"8&8'8#;$ @FEF9FEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFE@s"B'8(:"8%8"8$:"8)8'G$ F6F7FEF9F9F9FEF9FEF9FEFEFEF9F9F9FEF9FEFEF9F9F9F9F9FEF9FEFEFEF9FEFEFEFEFEF9FEFEF6F6F7ArD%9$A"H"9">"J" F9FEFEFEF9F9F9F9F9F9F9FE4F9@sC"9"J%G# F7F9FEO"F9F9F9F9F7F7@tB%:$J%G$ F9FEF9F9F9FEF9FEJFEF9FEFEF9F9F9J%9(8$8"9"8&8$8"9"9) @FEFEFEF9F9FEFEF9F9F9FEFEF9FEFEFEF9FEFEF9FEFEF9FEFEFEFEF9F9F9FEFEFEF9J%;#9x9z9$Js ?F9F9F9F9F9F9F94F9F9F9F9@F7Jt P;F9J"8" DFEFE=z8z8z8z /F7O;F7/F7/F7rF"J"F"F% F7F7O<F7F7F7F7F7F7'z& F6F6F6F6F6F7PBADF6F6F6F6F68$J% F9F9F9PDF9F9F9F7 J2 P*FFADFFADFFADFFADFFADFFADFFADFFADFFJ4 P)FFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ5:#z# O8;7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FADFF/ADFEADJ5:#="=# O8;FE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFFFFADFEADFEJ#z#:#<$<# O87FFE77FFF7FADFFFEFEFEFEADJ#J#:#;"9";# O8FE7F77FFFFFADFEFEADFEJ#J#:#:";":# O87FFE7FF7FADFFFEFEFEADJ#9#J#:";$@#:#9"="9# 4FEFEFEFEKFE7FFEFEFEFE7FFFFFADFEFEADFEJ#8#;&?#:#8"?"8# O87FFEFEFEFE7F7F7FFEFF7FADFFFEFEFEADJ%8#8)J#8#;"C#:#8v8# =FEFEFEFEFEFEFEFEADFEFEADFEFE7FE7F7F7F7F7FFFFFADADADFEJ'@"J#B#?#:4 <FEFEADADFEFEFE97FFEFE7FFF7FADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ$J#J#A#@#:4 6FEFEFE4ADAD7FE7FFE7F7FFFFFADFEADFEADFEADFEADFEADFEADFEADFEADFEJ$I"J#@#A#:4 6ADADADAD97FFEFE7FFF7FADFFADFFADFFADFFADFFADFFADFFADFFADFFADJ#?#B#:4 O8FE7FFE7F7FFFFFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ"J#J#:#z# FFE?7FFE7FF7FADFF/ADFEADJ,J#@%?#:#8v8# <ADFEFEFEFEADADADFEFEAD?FE7FFEFEFEFE7FFFFFADFEADFEJ#9#8%9sJ#:":&?#:#8"?"8# 4ADADADADADADADADAD:7FFE7F7F7F7F7F7FFF7FADFFADADFEADJ#J#:#9"="9# O8FE7F77FFFFFADADADADFEJ#J#:#:";":# O87FFE7FF7FADFFADADFEADJ#J#:#;"9";# O8FE7F77FFFFFADADADADFEJ5:#<$<# O8;7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FADFFADFEADFEADJ5:#="=# O8;FE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFFFFADADADFEJz:4 O8;ADADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ4 P)FFADFEADFEADFEADFEADFEADFEADFEADFEADFEJz P)3ADJ2 P*FFADFFADFFADFFADFFADFFADFFADFFADFFJ4 P)FFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ5:#z# O8;7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FADFF/ADFEADJ5:#="=# O8;FE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFFFFADFEADFEJ#z#:#<$<# O87FFE77FFF7FADFFFEFEFEFEADJ#J#:#;"9";# O8FE7F77FFFFFADFEFEADFEJ#J#:#:";":# O87FFE7FF7FADFFFEFEFEADJ#;&F#J#9$:$@#:#9"="9# 4FEFEFEFEADFEFEFEFE4FE7FFEFEFEFEFEFE7FFFFFADFEFEADFEJ#J#8&8&?#:#8"?"8# >ADADF7FFEFE7F7F7FFEFE7F7F7FFEFF7FADFFFEFEFEADJ"9"9)8#8%8"8%C#8"J#:#8v8# 6FEFEFEFEADFEFEADFEFEFEFEFEFEADFEFEFEFEFEFEFE7F7F47FFFFFADADADFEJ%>"8)B#:$F#:4 CFEADFEFEADADADFEFEADADFEFE7FFEFEFE7FFF7FADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ$?"J#:$F#:4 7FEADFEADBFE7F7F7FFE7FFFFFADFEADFEADFEADFEADFEADFEADFEADFEADFEJ"9"J#D#J#:4 6ADAD;FEFE7FFE7FF7FADFFADFFADFFADFFADFFADFFADFFADFFADFFADJ"J%B#8"J#:4 8FE=ADADADADFE7FFE47FFFFFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ$G"=":#B#J#:#z# 7ADFEADFEFEFEFE7FFE7FF7FADFF/ADFEADJ%:+B#8&8&?#:#8v8# HADFEFEADADFEFEADADFEFEFEFEADFE7F7FFEFEFE7F7FFEFEFE7F7FFFFFADFEADFEJ#8"8s8#8&9#8%C#9$:$@#:#8"?"8# 4ADADADADADADADADADADADADADADADADAD7FFE7F7F7F7F7F7FFF7FADFFADADFEADJ#J#:#9"="9# O8FE7F77FFFFFADADADADFEJ#J#:#:";":# O87FFE7FF7FADFFADADFEADJ#J#:#;"9";# O8FE7F77FFFFFADADADADFEJ5:#<$<# O8;7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FADFFADFEADFEADJ5:#="=# O8;FE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFFFFADADADFEJz:4 O8;ADADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ4 P)FFADFEADFEADFEADFEADFEADFEADFEADFEADFEJz P)3ADJ2 P*FFADFFADFFADFFADFFADFFADFFADFFADFFJ4 P)FFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ5:#z# O8;7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FADFF/ADFEADJ5:#="=# O8;FE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFE7FFFFFADFEADFEJ#z#:#<$<# O87FFE77FFF7FADFFFEFEFEFEADJ#J#:#;"9";# O8FE7F77FFFFFADFEFEADFEJ#J#:#:";":# O87FFE7FF7FADFFFEFEFEADJ&J#>#9$G#:#9"="9# 5FEFEFEFEFEBFEFEFE7FFEFEFE7FFFFFADFEFEADFEJ(J#8&F#:#8"?"8# 4FEFEADADADFEFEK7FFEFE7F7F7FFEFF7FADFFFEFEFEADJ%9%9%8&9#A#J#:#8v8# =FEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFE7F77FFFFFADADADFEJ59*@#J#:4 4<ADFEFEFEADADADADFEFEADADFEFEADFEFEADADFEFEADFEFEADADFEFEFEADFEFEADFEFEADFE7FFE7FF7FADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ&C#@"="@#J#:4 5ADADFEFEFEADADADADFE7F77FFFFFADFEADFEADFEADFEADFEADFEADFEADFEADFEJ"8"9#J#J#:4 7ADFEFEFEF7FFE7FF7FADFFADFFADFFADFFADFFADFFADFFADFFADFFADJ#8";%J#J#:4 4FEFEADADADADADDFE7F77FFFFFADFFADFFADFFADFFADFFADFFADFFADFFADFEJ#;#H"@#J#:#z# @FEFEFEFEFE7FFE7FF7FADFF/ADFEADJ5>%@#8&F#:#8v8# 4<ADFEFEFEFEFEADADADFEFEFEFEADADADFEFEFEFEADADADFEFEFEFEADADFEFEADFE7F7FFEFEFE7F7FFFFFADFEADFE&F&9%9%9%8#8#8&>#9$G#:#8"?"8#B% F7F7F7F7F7ADADADADADADADADADADADADADADADADADADADADADADADADADAD7FFE7F7F7FFF7FADFFADADFEADF7F7F7F7&J#J#:#9"="9#B& F6F6F6F6F6O3FE7F77FFFFFADADADADFEF6F6F6F6F68$J#J#:#:";":#C% F9F9F9O37FFE7FF7FADFFADADFEADF9F9F9F7J#J#:#;"9";# O8FE7F77FFFFFADADADADFEJ5:#<$<# O8;7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FADFFADFEADFEADJ5:#="=# O8;FE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFFFFADADADFEJz:4 O8;ADADFFADFEADFEADFEADFEADFEADFEADFEADFEADJ4 P)FFADFEADFEADFEADFEADFEADFEADFEADFEADFEJz P)3AD <z"z"z 0F6F7OMF6F71F6;z8z8z 1F9OLF91F9 7z8z8z 5F7OLF74F7"J"J" F76F7OMF7 ENDBITMAP %%EndBinary 0 F (FIGURE 22) 138.16 518.18 T 1 F ( - Spintime) 189.55 518.18 T 72 72 297 720 C 0 0 612 792 C 72 137.14 297 391 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 71.29 159.14 296.29 381.71 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 7528 158 221 81.26 113.66 0 149.43 262.63 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000096FB7DFFCF8AFFE79AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF0055F7DB7DB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000096FB6DFFB67DFFCF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFF69DFDB7DB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000009AFF5DDF9E69FBB275C755EFB60071E7 A24DF77D55BE9265618EE3002CB2DB7DB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7P1F6F77F6F7J" Q2F78z8z8z 5F9P0F95F9 <z" Q'F7F6=z"z"z"z 0F6F7P F6F70F6F70F6>z8z8z8z /F9OMF9/F9/F9 J#>$ O5FEFEFEFEFEJ"Js" O?F9O.F6F7J#Jr O5F9F9O8F9J09%;# O(FEFEFEF9FEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEAs"J"9"8':%;%J$ F6F7BF9F9F9F9F9FEF9F9FEF9F9F9FEF9FEFEHF6F6F7BrJ$9%=%:"J" F9DF9FEFEFEF9FEF9FEFEFEF9F9LF9AsJ"9"J# F7O&F9FEO"F7F7AtJ)=%J$ F9DF9FEFEF9F9FEFEF9FEF9F9F9O#F9F9F9J"8"8'8"9" O4FEFEFEFEFEF9F9FEFEFEJ#8#9t8sJs O+F9F9F9F9F9F9O'F7Jt Q F9 >z8z8z8z /F7OMF7/F7/F7sF"J"F"F& F7F7P F7F7F7F7F7F7F7(z' F6F6F6F6F6F6F7Q&D9F6F6F6F6F6F68%J& F9F9F9F9Q(F9F9F9F9F7 J# OJFEFE J#8#8#8%9%9#;% O-FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEJ39' O8FEFED9D9FEFED9FEFED9D9FEFED9FEFED9FEFEFED9D9FEFEJ$:$H";% O-D9FEFEFEFED9D9FED9D9D9J#;#@& O:FEFEFEFED9D9FEFEFEJ%9%@"8" O:D9D9D9D9D9D9D9D9D9FEJ)<#;#:"9% O.D9FEFED9D9FEFED9FEFEFEFEFEFEFED9D9J39' O8D9FEFEFEFED9D9D9FEFEFEFED9D9D9FEFED9D9FEFEFEFED9J#8#:%9%9&8% O/D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 Gz P&D1 Iz=z P"D03D8J"J" P4FF9FFJz"@r"r" 5OLD6FFD7D8D7FFJzG" 6OKD7FFJ#J" JFEFEOHD8J$F"J" 7FEFEFED7OFFFJ&J$ 6FED7D7D7FEP*D9D8D8J&8%:$:,8%:$:$J$ =FED7FEFEFEFEFEFEFEFEFEFEFEFEFED7FED7FED7FEFEFEFEFEFEFEFEFEFEFEFEFELFFFFD9J"8&8&9%8-8&8&8&J$ :D7D7FED7D7D7D7D7D7D7FED7D7D7FEFED7D7D7FED7D7D7FED7D7D7D7D7D7D7FEFED7D7D7FEFED7D7D7FEO!D9D8D8J$J$9&8&J$ EFEFEFE9FEFEFED7FEFEFED7D7FEFEFED7JFFFFD9J"?%J%:%9%J$ :FEFED7D7D78FED7D7D7D7D7D7FED7D7D7FEO"D9D8D8J"<"J$ O9FEFEMFFFFD9J&8%9-8%9%9-8&J$ 6D7FEFEFED7FEFEFEFED7FEFEFED7FEFED7FEFEFED7D7FEFEFEFEFEFEFED7FEFEFED7FED7D7FEFEFED7D7FEFEFED7O#D9D8D8J$9%:u:$9%:&8$:$J$ 7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7IFFFFD9J$ PID9D8D8J%J#u O%FEFEFED7O5FFFFD8J$J"B" O%D7D7D7O7D8D8Jz P>/D7JZ P>/J" PLD8J$:$<"Jv" EFEFEFEFEFEFEFEO8D9D8J&@#;#=" 6FEFEFEFEFED7D7D7D7D7J' 6D7FED7D7D7FEJ%G$;$:,8%:$:$ >FEFEFEFEFEFEFEFEFEFEFEFEFED7FED7FED7FEFEFEFEFEFEFEFEFEFEFEFEFEJ&F#;&8-8&8&8& >D7D7D7D7FED7D7FED7D7D7FEFED7D7D7FED7D7D7FED7D7D7D7D7D7D7FEFED7D7D7FEFED7D7D7FEJ$J&G$9&8& ?FEFEFE8D7FEFEFED7FEFEFED7FEFEFED7D7FEFEFED7J%J%F%:%9% >FED7D7D79D7D7D7FEFED7D7D7D7D7D7FED7D7D7FEJ"J"<" O,FE;FEFEJ'858&8%9%9-8& 6FEFEFEFEFED7:D7FEFEFED7FED7FEFEFEFEFEFED7FEFEFEFEFEFED7FEFEFEFEFED7FEFEFED7D7FEFEFEFEFEFEFED7FEFEFED7FED7D7FEFEFED7D7FEFEFED7J&:z9$:$9%:&8$:$ 6D7D7D7D7D79D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 J% O4FEFEFED7J$ O4D7D7D7Jz 6OKD5Jz 5OLD1 J#>"@#J# <FEFEFEFEFE>FEFEJ$8"?"@"J" 7FEFEFED1D1D1?D1J& 6FED1D1D1FEJ#9$;$<+8$:$:$ ?FEFEFEFEFEFEFEFEFEFED1FEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEJ"9%8#;&:28&8% :D1FED1D1FED1D1FED1D1D1FEFED1D1D1D1FED1D1D1FED1D1FED1D1D1FEFED1D1D1FEFED1D1D1J"F"9#<";$:$ >D1D1FED1FEFEFEFEFEFEFEJ"J#B%9% :FE8D1FED1D1D1D1D1D1D1D1J":#9&<"<" O!FED1FED1FED1FED1FEFEJ48(9$>&8&8' 6D1FEFEFED1D1FEFEFED1FEFEFED1FEFEFEFEFED1FEFEFED1D1FED1FEFED1FEFEFED1D1FEFEFED1D1FEFEFED1FEJ$8x9$8#9#8$:$:$:& 7D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 Jz 5OLD6Jz 6OKD7J# CFEFEJ%>" 7FEFEFEFED7J% 7D7D7FED7J$;#8&:$:$8&:,8%:$:$ >FEFEFEFEFEFED7FEFEFEFEFEFEFEFEFEFED7FEFEFEFEFEFED7FED7FED7FEFEFEFEFEFEFEFEFEFEFEFEFEJ&9,8&8-8-8&8&8& =FED7D7D7FEFED7D7FED7D7FEFED7D7FEFED7D7D7FEFED7D7D7FED7D7FEFED7D7FEFED7D7D7FED7D7D7FED7D7D7D7D7D7D7FEFED7D7D7FEFED7D7D7FEJ"<";&@"J$9&8& ED7D7D7FEFEFED7D74FEFEFED7FEFEFED7D7FEFEFED7J"J%J%:%9% 6FE<D7D7D7FE>FED7D7D7D7D7D7FED7D7D7FEJ"J"<" O$FEIFEFEJ%919(8*9'9%9-8& 6D7FEFED7D7FEFEFED7D7FEFEFED7FEFEFEFEFEFEFED7D7FEFEFED7D7FEFEFED7D7FEFEFEFED7D7FEFEFEFEFEFEFED7FEFEFED7FED7D7FEFEFED7D7FEFEFED7J#;$8u8#8$:$8$8#8$9%:&8$:$ 7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 J% O:FEFEFED7J$ O:D7D7D7Jz 6OKD5Jz 5OLD1 J" OCFEJ&H"J" 6FEFEFEFEFEFECD1J' 6D1FED1D1FEFEJ"8#8)9)8#8&9$8,9&:$ :D1FEFEFEFED1FED1FEFEFEFEFEFEFEFED1FEFEFEFEFED1FEFEFEFEFEFEFEFEFED1FEFEFED1FEFEFEFED1FEFEFEFEFEFEJ"8"9"8'8(9"9&81:'8& :FED1D1D1FEFED1D1FED1FED1D1D1D1D1D1D1FED1D1D1FED1D1D1FED1D1FED1D1D1FED1D1D1D1D1FEFED1D1FEFED1D1D1FEJ%@"J$H"<$ 8FEFEFED1D1;FEFEFED1FEFEFEJ$J%8&G% 8D1D1D1GD1D1D1D1D1FED1FED1D1D1D1D1J"I":"J" O#FEFEFE6FEJ%:*9"829&9$9*9( 6FEFEFEFED1FEFEFED1FEFEFEFEFED1FEFEFED1D1D1FEFEFED1FED1FEFEFEFED1FEFEFED1D1FED1FEFEFEFEFED1FEFEFEFED1D1FEFEFED1J%;s8#9$9u:$;":t8#8$ 6D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 Jv P@D8J" P?D8Jz P>/D7 J& O FEFED1FEFEJ%I"8" 7FEFEFEFED1D1J% 6FED1D1D1J"8%8&:$:$8#8#8& :D1FEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEJ#:-8%:'9"9& 7FEFED1D1D1D1FED1D1FEFED1D1FEFED1D1D1D1D1D1FED1D1D1D1FED1D1D1J&9$:" 6D1D1FEFEFEFEFEFED1J#9% 8D1D1FED1D1D1J" 6FEJ%8*9/8, 7FEFEFED1D1FEFEFED1FEFEFEFEFED1D1FEFEFED1FEFED1FEFEFED1D1FEFEFED1FED1FEFEFEFEJ%:s8#8u:u 6D1D1D1D1D1D1D1D1D1 JZ P>/J$J"C" 7FEFEFEP$D7D8J&Jt$ 6FED1D1D1FEP&D9D8D8D7J$:$:$:$:,8%:$:$J$ >FEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1FED1FED1FEFEFEFEFEFEFEFEFEFEFEFEFEBD7FFFFJ"8&8&8&8&8-8&8&8&J$ :D1FED1D1D1FEFED1D1D1FEFED1D1D1FEFED1D1D1FEFED1D1D1FED1D1D1FED1D1D1D1D1D1D1FEFED1D1D1FEFED1D1D1FEKD8D8D7J#F&9$H$9&8&J$ 9FEFED1FEFEFED1FEFEFEFEFEFED1FEFEFED1D1FEFEFED1BD7FFFFJ"H%9%F%:%9%J$ 9D1D1D1D1FED1D1D1D1FED1D1D1D1D1D1FED1D1D1FEJD8D8D7J"@"J"<"J$ KFEFE7FEFEGD7FFFFJ&8&8&8&8&8%9%9-8&J$ 6D1FEFEFED1D1FEFEFED1D1FEFEFED1D1FEFEFED1D1FEFEFED1D1FEFEFEFEFEFEFED1FEFEFED1FED1D1FEFEFED1D1FEFEFED1ID8D8D7J$:$:$:$:$:$9%:&8$:$J$ 7D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1ED7FFFFJ$ PFD8D8D7J%J$ O,FEFEFED1O3D7FFD8J$J" O,D1D1D1O8D7J" PDD7J" PFD7JZAZ 5OL/J"J" 4FFP(FFIz=z P"D13D9 Gz P&D9 Iz P"D8J" P4FFJy#Z&x" 5D7FFD7O*D7D7D7FFFFD7FFJ$J";# AFFFFD8O*D8FFFFJ%:z"># ?FFFFFFD8O&D9D8FFFFJ#8"J#8# =FFFFD9O2D9D9FFFFJ#8#J#8# ;FFFFD9D9O5D9D9FFFFJ#8#J#8# 9FFFFD9D9O9D9D9FFFFJ#8#J#8# 7FFFFD9D9O=D9D9FFFFJ'J& 5D8D8D8D8D9D9OAD9D8D8D8D8J#8#J"9" 5D7D7D8D8OAD8D7J#8#J#8# 7D7D7D8D8O=D8D8D7D7J#8#J#8# 9D7D7D8D8O9D8D8D7D7'J#8#J#8#J& F7F7F7F7F7F75D7D7D8D8O5D8D8D7D7MF7F7F7F7F7'J#8"J#8#J' F6F6F6F6F6F67D7D7D8O2D8D8D7D7O!F6F6F6F6F6F68%J#<z?#J& F9F9F9F99D7D7O&D8D7D7O$F9F9F9F9F7J#9"J$ AD7D7D8O,D8D7D7JZ 5OLJ" 4FFIz P"D9 =z"z"z 0F6F7P1F6F71F6<z8z8z 1F9P0F91F9 7z8z8z 6F7P0F75F7"J"J" F77F7P1F7 ENDBITMAP %%EndBinary 80.29 166 287.29 256 R 7 X V 4 8 Q 0 X (scrolledlistbox .slb -vscrollmode static \134) 80.29 250.67 T ( -hscrollmode dynamic -selection SelProc \134) 80.29 240.67 T ( -items {Crabgrass Dallisgrass Nutsedge} \134) 80.29 230.67 T ( -scrollmargin 5 -labelpos n\134) 80.29 220.67 T ( -labeltext \322Weeds\323) 80.29 210.67 T (pack .slb -padx 10 -pady 10) 80.29 200.67 T (.slb insert 2 Sandbur Goosegrass) 80.29 180.67 T (.slb insert end Chickweed Johnsongrass) 80.29 170.67 T 0 10 Q (FIGURE 23) 128.5 146.89 T 1 F ( - Scrolledlistbox) 179.89 146.89 T 0 0 612 792 C 0 12 Q 0 X 0 0 0 1 0 0 0 K (Scr) 396.95 712 T (olledtext) 414.06 712 T 1 10 Q -0.28 (The Scrolledtext widget provides all the functionality of) 315 693.33 P (the standard Tk text widget along with scrollbar and) 315 681.33 T (label control. The set of methods has been extended to) 315 669.33 T (include import and export \336le capabilities.) 315 657.33 T 0 12 Q (Scr) 391.28 395 T (olledframe) 408.4 395 T 1 10 Q (The Scrolledframe combines the functionality of scroll-) 315 376.33 T (ing with that of a typical frame widget to implement a) 315 364.33 T -0.13 (clipable viewing area whose visible region may be mod-) 315 352.33 P -0.49 (i\336ed with the scrollbars. This enables the construction of) 315 340.33 P (visually lar) 315 328.33 T (ger areas than which could normally be dis-) 359.54 328.33 T -0.34 (played, containing a heterogenous mix of widgets. Once) 315 316.33 P -0.49 (created, the Scrolledframe child site can be accessed and) 315 304.33 P (\336lled with widgets.) 315 292.33 T 0 12 Q (Scr) 389.27 261 T (olledcanvas) 406.39 261 T 1 10 Q (The Scrolledcanvas applies scrollbars and display) 315 242.33 T -0.25 (options to a standard Tk canvas widget. All the standard) 315 230.33 P -0.17 (canvas commands and options have been maintained. A) 315 218.33 P -0.46 (new option, autoresize, has been added which allows the) 315 206.33 P (user to engage automatic resizing of the scroll region to) 315 194.33 T (be the bounding box covering all the items. The region) 315 182.33 T (is adjusted continuously as items are created and) 315 170.33 T (destroyed via the canvas commands, ef) 315 158.33 T (fecting the dis-) 471.45 158.33 T (play of the scrollbars.) 315 146.33 T 315 423 540 654 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 447 540 636 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 17963 503 189 201.2 75.6 0 324 546 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000096FB7DFFCF8AFFE79AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF0055F7DB7DB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000096FB6DFFB67DFFCF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFF69DFDB7DB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000009AFF5DDF9E69FBB275C755EFB60071E7 A24DF77D55BE9265618EE3002CB2DB7DB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7WHF6F77F6F7J" XIF78z8z8z 5F9WGF95F9 <z" X>F7F6=z"z"z"z 0F6F7W7F6F70F6F70F6>z8z8z8z /F9W6F9/F9/F9 JrJ$<s8#8$ R,FEO%FEFEFEFEFEFEFEFEFEJ"8&J">"8$>"Js" R,F9F9F9F9FEFEO$F9F9F9F9F9F9R5F6F7J"9#Jr SGF9F9F9R9F9J%:%8r*8$9'8#D"9$?$ R6FEFEFEFEFEFEFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEAs"J$9%8%8'9"8/8"8&A#8$?'J$ F6F7QKFEFEF9F9F9FEFEFEF9F9F9FEF9F9F9FEF9F9F9F9F9FEF9FEFEFEF9FEFEFEF9F9FEFEFEFEF9FEFEFEF9F9F9FEFEFEF9FEFEQKF6F6F7BrJ%9$;%8)9%9$<$8$A#G"J" F9QJFEFEFEF9F9FEFEFEFEFEF9FEFEFEF9F9F9FEFEFEF9FEF9F9F9F9F9F9F9F9F9F9F9F9FER F9AsJ$9%:"9$9"J"E%J# F7QJF9F9F9FEFEF9F9F9FEF9F9FELF9F9F9F9F9QKF7F7AtJ":%8%9):$A$J%J$ F9R$FEFEF9F9F9FEF9F9F9F9FEFEF9F9FEFEF9FEF9FEFEF9FE=FEF9FEFEQKF9F9F9J"8";%8"8%8%B*8"8&8";"8";"8$8) R,FEFEF9FEFEF9FEFEFEFEF9FEFEFEF9F9F9FEFEFEF9F9F9FEFEF9F9FEFEF9FEFEFEFEFEF9FEFEF9F9F9FEFEFEF9J%<v8%:#8#;$9%:';%;t9$Js R,F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9R,F7Jt X7F9 >z8z8z8z /F7W6F7/F7/F7sF"J"F"F& F7F7W7F7F7F7F7F7F7F7(z' F6F6F6F6F6F6F7X=D9F6F6F6F6F6F68%J& F9F9F9F9X?F9F9F9F9F7 J#>#A#J# RAFEFEFEFEFEFEKFEFE J'8"8"8%;'9%9%9%8#8#8#8# RBD9D9FEFEFEFEFEFEFEFEFEFED9FEFED9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEJ"8)8)8":5B% R@FEFEFED9D9FEFED9D9D9D9FEFED9D9FEFEFE9FED9FEFED9FEFED9D9FEFED9FEFED9D9FEFED9FEFED9D9FEFEFEFED9FEJ#=":#=%9):$:" S%D9D9D9D9D9FED9D9D9FED9D9D9D9D9FEFEFEFED9D9J"9#G"?$9&8& RAD9FEFED9FEFEFED9D9FEFEFED9D9FEFEFEJ%J%;"8"9"8" RED9D9D9D98FEFED9D9D9FED9FEJ"=#;":%;"A%9%:);" R?FEFEFEFEFEFED9FEFEFEFED9D9FEFED9D9D9FEFED9D9FEFED9FEJ'8+=5B% RCD9FEFEFEFED9D9FEFED9D9FEFEFEFED99D9FEFED9D9D9FEFEFED9FEFED9FEFEFEFED9D9D9FEFEFEFED9D9FEFED9J#9%:#8%8#;#9v9%:#8#:& R?D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 J# S,D9D9 Gz W=D1 Iz=z W9D03D8J"J" WKFF9FFJz"@r"r" 5W5D1FFD7D8D7FFJ" X-FFJ$J":&A"J#:"J$J"9$J":#J"E$:$J" 9FEFEFEGFEFEFEFEFEFEFEP4FEFEFEO3FEFEFE@FEFEFEFE<FEFEFE5FEFEFEFEFEFEFEO@D8J%9"J"A#<$@#B$J(wC";"J"J$J#8%9"J#:"J#E#;#J" 8FED1D1D1FE5FEFEFED1D1D1FEFEFEFEFEO4FEFEFEFEFEFED1FED1D1:FEEFED1D1@FED1FED1D1D1FE7FED1D15FED1D1D1D1D1O>FFJ#;"8#?#B#J&9-J$ O3D1D1D1FED1D1D1D1D1O5D1FED1D1D1D1D1FED1D1FED1FED1D1FEFET)D9D8D8J&8,@&J$8&:$8&8-:$8#8#9$B"D"A$9$:&9$:$9&9$9.A#:#:$8&:$<#8&8,C#9$:$8(:)8#8#J$ 7FEFEFEFEFEFEFEFEFEFED1FED1FEFEFEFEFEFEFEFEMFED1FEFED1FEFEFEFEFEFEFED1FEFEFEFEFEFED1FEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFED1FEFEFED1FEFEFEFED1FEFEFEFEFEFEFEFED1FEFEFEFEFED1FEFEFEFEFEFEFEFEFEFED1FED1FEFEFEFED1FEFEFEFEFEFEFEFEFED1FEFEFEFED1D1FED1FEFEFEFEFEFEFEOHFFFFD9J&8-:":&:"J"C"@'858(9"9&@"8$;":"@%9#;&8&8&8&8&8.9"B%8-8&?&8-:"A%9.=)9"J$ 7D1FED1D1D1D1FED1D1D1D1D1FED1D1D1FEFED1D1FED1D1FE4FEFED1FEFED1D1FE:FED1D1D1FED1D1FEFED1D1FED1D1FED1D1D1FED1D1FED1FED1FEFED1D1D1FED1D1D1FED1D1D1FEFED1D1D1D1FEFED1D1D1D1D1D1FED1D1D1FED1D1D1FEFED1D1D1FED1FED1D1D1FED1D1D1FED1FED1D1D1D1D1FED1D1D1FED1FEFED1D1FEFED1D1D1FED1D1FED1FED1FEFED1D1D1FED1FED1D1D1D1FED1D1D1D1D1FED1D1D1FEFEFED1D1D1FED1D1D1FED1D1FED1D1D1FED1D1FEFED1D1FED1D1D1OMD9D8D8J";$;"J"C":&9"C"J&@"C%J$="J"<#:"J$;#J"<#A$B#:"J$ O D1FED1FED14D1D1FEFEFEFEFED1D1AD1FEFEFED1D1FEFEFED1?FEFEFED1@D1FED1D14FEFEFEFED1:D1FED1FEFEFEFED1D1P#FFFFD9J$I#J$J&J%A"B$J%J&J%J%8&J$ O&D1D1D1FED19D1D1D18D1FED1FED18D1D1D1FED1D1D1D1@D1D1D1D1>D1FED1FED1FD1D1D1D1O&D1D1D1D1D1FED1FED1P4D9D8D8J"J"J"J"<"="G"B#J"9#F"F#E":";#J$ CFEP"FE9FEO4FEFEFEFEFED1=FEFED1FEFED1FEFEFED1P(FFFFD9J%:&8%:"C":&A":&:"9+9,9"8$8";(8->%:+A-8%9&8&9,8%:$;"@0;(?%:&8%:"A-9$?$95J$ 7FEFEFEFED1FEFEFED1FEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFED1D1FEFEFED1D1FEFEFEFED1FED1FEFED1D1FEFEFED1D1FEFEFED1FED1D1FEFEFED1FEFEFEFEFEFEFEFEFED1FEFEFEFED1FEFEFED1FED1FEFEFEFEFEFEFEFEFED1FEFEFED1D1FEFEFED1D1FEFEFED1D1D1FEFEFED1FEFEFEFED1FED1FEFEFEFED1FEFEFED1D1FEFEFED1D1FEFED1D1FEFEFED1FEFEFEFED1FEFEFED1FEFEFED1FED1FEFEFED1FED1D1FEFEFED1D1FED1FEFEFE6FED1D1FEFEFED1FED1FEFEFEFEFEFED1FEFEFEFEFEFEO?D9D8D8J%;$9$;"C":&:"<":&:"9u8#8$8$8#=r8$:&8$?%:uBv8%:$:$;$9$9%B":#:r8$8r8$9#;%;$9$;":#<&8$;":#:$8#8zJ$ 7D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D13D1O6FFFFD9J"J"J"J"J$ SFD1BD1BD1;D1P3D9D8D8J$J$J$J$J#u DFEFEFEOKFEFED1P?FEFED1O4FEFEFEQ#FFFFD8J$J#J#J$J"B" DD1D1D1OKD1D1P@D1D1O5D1D1D1Q$D8D8J"J#J";$B"J"J#J":$A$<"J"C":#J"E$:$Jz HFE4FEFEGFEFEFEFEFE<FE4FEFEO FEFEFEFEFEFEFEFEOAFEFEFEFE5FEFEFEFEFEFEFEO8/D7J"J"J#;&?#A#9#A"J"J":#B#="B"J#B#:"J#E#;# HD14D1FFEFEFED1D1D1FEFEFEFEFEFEFED14D1O!D1D1D1D1D1D1FEO3FED1FED1D15FED1D1D1D1D1J#I#A( P(D1D1D1D1D1FEFED1FEFED1J&9%9%:$9&9$:$8&?(J%9%:$9&9$:$8&:$?&9%9$J$;$9&@$:$9.8$9&B#B#9$:$8(:)8#8# 6FEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFED1FEFEFEO$FEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFED1FEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFED1FEFEFED1FEFEFEFEFEFEFED1FEFEFEFED1FED1FEFEFEFEFEFEFEFEFED1FEFEFEFED1D1FED1FEFEFEFEFEFEFEJ'8&8$:&8&8%9-:"9#9#9"A&:"C";$9&8$:&8&8%9-8&>'8&8#J#;&8&?&8&848&:"C"A%9.=)9" 6D1FED1FED1FED1D1D1D1FED1D1D1FED1D1D1FED1FED1D1D1FED1D1D1FED1D1D1FED1D1FED1FED1FEFED1D1D1D1FED1FEFEFED1FEFED1FED1D1D1D1D1FED1D1D1FED1D1D1FED1FED1D1D1FED1D1D1FED1D1D1FED1D1FED1FED1FEFED1D1D1FED1FED1FED1FED1D1D1D1FED1D1:D1D1FED1D1D1FED1FED1D1D1FED1D1D1FEFED1D1D1FED1FED1D1D1D1D1FED1D1D1FED1D1FED1D1D1FED1FED1D1D1FEFEFED1D1D1FED1D1D1FED1D1FED1D1D1FED1D1FEFED1D1FED1D1D1J$J";$;"A&:"C"B$J$J&F&9$H$B"<#;"<#A$B#:" ?FEFEFEO!D1D1FED1D1FED1D1D1FED1D1FEFEFEO5FEFEFEFD1FEFEFED1D1FEFEFED1FEFEFEFEFEFED1FED1D1FED1FEFEFEFED1D1J%J$J%J%J%G%9%?&9%J%8& >FED1D1D1O'FED1FEO&FED1D1D1O4FED1D1D1GD1D1D1FED1D1D1FED1D1D1D1D1FED1FED1D1D1D1D1MD1D1D1D1D1FED1FED1J&J"J"A">"@"A">"G#B#E":";# OHFED1D1D1FEO D1P8FEFEFEFEFEFEFED1FED1FEFEFED1J";)>&8%9/;"9"9";"9":&8&:":&:"9/>&8%9/;(>";/8'>-8&9&>&8&8%:$9&8%;"C"A-9$?$95 6FEFED1D1FEFEFED1FED1FEFEFED1FEFEFEFED1FEFEFED1FED1D1FEFEFED1D1FEFEFEFEFEFEFEFEFEFEFED1FEFEFED1FEFEFEFEFEFEFEFEFEFED1FEFEFED1D1FEFEFED1FED1FEFEFED1FEFEFEFED1FEFEFED1FED1D1FEFEFED1D1FEFED1D1FEFEFED1FEFED1D1FEFEFED1FED1FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFED1FEFEFED1D1FEFEFED1D1FEFEFED1D1FEFEFED1FEFEFEFED1FED1D1FEFEFED1FEFEFEFEFEFED1FEFEFED1FED1D1FEFEFED1D1FED1FEFEFE6FED1D1FEFEFED1FED1FEFEFEFEFEFED1FEFEFEFEFEFEJr8&?$9%:&8$8r9"9#9#9":&9$;":&:"9r8&?$9%:&8$8r8$?r8v8'>w9$;$@$:$9%;";$9%;":#=":#<&8$;":#:$8#8z 6D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1FED1D1FED1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D13D1J"C"J" U"D1D1;D1J%J% EFEFEFED1P0FEFEFED1J$J$ ED1D1D1P1D1D1D1J";$B"J$J"C":#J"E$:$ O5FEFEFEFEFEO FEFEFEO,FEFEFEFE5FEFEFEFEFEFEFEJ"A#;&?#A#9#J#J#B#:"J#E#;# O'FEFEFEFED1D1D1FEFEFEFEFEFEFE=D1D1O,FED1FED1D15FED1D1D1D1D1J#I#A( O3D1D1D1D1D1FEFED1FEFED1J&9%8&@&J%8&8#8#8%F&9%:&8$:$C#B#9$:$8(:)8#8# 6FEFEFED1FEFEFEFEFEFED1FEFEFEFEFEFEFEFEO%FEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFED1FED1FEFEFEFEFEFEFEFEFED1FEFEFEFED1D1FED1FEFEFEFEFEFEFEJ'8-:":&:"J"C";$9/9"9&E'8&8-8&:"C"A%9.=)9" 6D1FED1FED1FED1D1D1D1FED1D1FEFED1D1FEFED1D1FED1D1FE4FEFED1FED1D1D1D1D1FED1D1FEFED1D1FED1D1D1D1D1D1D1FED1FED1D1D1FED1D1D1D1FEFED1D1D1FED1D1FED1D1D1FEFED1D1D1FEFEFEFED1D1D1FED1D1D1FED1D1FED1D1D1FED1D1FEFED1D1FED1D1D1J$:"=";$;"A%;"C"B$:"C$J$A$9&:"<#;"<#A$B#:" ?FEFEFED1D1FED1FED1D1FEFEFED1D1FEFEFED1FEFEFE9FEFEFEFEFEFED1FEFEFED1D1FED1D1FED1FEFEFEFED1D1J%H$H$J%G%J%A%9%J%8& >FED1D1D1D1D1D1D1D1D1?FED1D1D1FED1D1D18FED1D1D1D1D1D1D1D1D1D1FEFD1D1D1D1D1FED1FED1J#J"J"8"D#B#E":";# O=FED19D1O9FEFEFED1FED1FEFEFED1J";,9"9"C":&8%;":&:"9295?%8,9&8&:"C"A-9$?$95 6FEFED1D1FEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFED1FEFEFED1D1FEFEFED1FEFEFEFE6FED1D1FEFEFED1FED1D1FEFEFED1FED1FEFEFEFEFEFEFEFEFED1D1FEFEFED1FED1D1FEFEFED1FEFEFED1D1FEFEFED1FEFED1FEFEFED1FED1D1FEFEFED1D1FED1FEFEFE6FED1D1FEFEFED1FED1FEFEFEFEFEFED1FEFEFEFEFEFEJr8s8#9"C":&8$<":&:"9r8s8#8&8w?$:&8$:$:$;":#=":#<&8$;":#:$8#8z 6D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1FED1D1FED1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D13D1J"C"J" R'D1D1;D1J$C% Q*FEFEFEFEFEFED1J$C$ Q*D1D1D1D1D1D1J&9$:$A$J$J"J$>"F$I# O:FEFEFEFEFEFEFEFEFEFEFEFEFEFEP5FEFEFE@FEO"FEFEFEFEFEFEFEFEFEJ"J%8&8&?&J"J"F$J#J"F$?"E$J" O&FE4D1D1D1D1FED1D1D1FEFED1D1D1FEFED1D1D1FEFFEO)FEFED1D1@FED1>FEFED1D1D1FED1D14D1 J(8#9$:$9&J(8#9$:$9&?%:$:$:$8#8)9&B#:#:$8&:$<#9(8#9$:$9&B#9$9$9&<#9$9%:$;# 8FEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEO-FEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1FED1FEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFED1FEFEFEFEFED1FEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFED1FEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEJ(9"9&8&8&:"<";$I"C":(9"9&8&8&?&8&8&8(9"8'8&:"B%8-8&?(9"9&8&8&:"B%8#:'@%8&8&9% 7FED1D1D1FED1D1D1FED1D1D1FEFED1D1D1FED1FED1D1D1FEFEFEFEFEFEFEFED1D1D1FED1D1D1FED1D1D1FEFED1D1D1FED1FED1D1D1D1D1D1D1FEFED1D1D1FEFED1D1D1FEFED1D1D1FED1D1D1D1FEFED1D1FED1FED1D1D1FEFED1D1FEFED1D1D1FED1D1FED1FED1FEFED1D1D1FEFED1D1D1FED1D1D1FED1D1D1FEFED1D1D1FED1FED1D1D1FED1D1D1FED1D1D1FEFED1D1FED1D1D1FED1D1D1D1FEFED1D1D1FEFED1D1FEJ$9&A"<":&H"C"I$9&G$="<"G"D"<#:"J$;#H$9&A"<#H"=#A$9&9" FFEFEFED1FEFEFED1D1D1D1D1D1D1FED1D1FEFEFED1FEFEFED1FEFEFED1D1D1D1FED1D14FEFEFEFED1FEFEFED1FEFEFED1D1FED1D1FED1FEFEFED1FEFEFED1D1J%9%J%9%F%J%J%9%J%:% FD1D1D1D1D1D1D1FEOBD1D1D1D1D1D1D1FEFED1D1D1OCD1D1D1D18D1D1D1D1D1D1D1FEO,FED1D1D1D1D1D1FEJ"8"A"D"J"8"A"I"<"J"?#J"9#J"8"A"?#J#H" IFEFEFEFEO.FEFEFEFEFE<FEFED1=FEFED16FEFEFEFED1:FED1FEJ%9-8&9&9"<"9'8&8&:":&:":%9-8&9&>-8&8&8*9"8&9"@0;(?%9-8&9&9"@'8*9"='85 7D1FEFEFED1FEFEFED1FED1D1FEFEFED1D1FEFEFED1D1FEFEFED1FEFED1FEFEFEFED1D1FEFEFED1D1FEFEFED1FED1FEFEFED1FED1FEFEFED1FEFEFED1FED1D1FEFEFED1D1FEFEFED1D1FEFEFED1D1FEFEFED1FED1D1FEFEFED1D1FEFEFED1D1FEFEFED1D1FEFEFED1FEFEFEFEFED1FEFEFED1FEFEFEFED1FEFEFED1D1FEFEFED1D1FEFED1D1FEFEFED1D1FEFEFED1FEFEFED1FED1D1FEFEFED1D1FEFEFED1D1FEFEFED1FEFED1FEFEFED1FEFEFEFEFED1FEFEFEFEFED1FEFEFED14D1FEFEFED1FED1D1FEFEFED1D1FEFEFED1FEFEFEJ$:&8$:$;$:"<":%:$:$;";$;";$:&8$:$;$@&8$:$:$:s8#9$:":#:r8$8r8$9#<$:&8$:$;$:":#:&9t8&:&:&8$8r 8D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1D1D1D1D1D1D1J"J"J"J" R<D1BD1O"D1;D1J%J%J% 8FEFEFED1OIFEFEFED1PLFEFEFED1J$J$J$JZ 8D1D1D1OJD1D1D1PMD1D1D1R9/J#C$<$J";$:$B";$:$J$<$J$J$C$<$J$>"F$I#J" 6FEFEFEFEFEFEFEFEO FEFEFEFEFEFEFEFEFEFEFEFEFEFEO-FEFEFEFEFEFEJFEFEFE@FEFEFEFEFEFEFEFEFEJFEFEFEFEFEFEFEFEFEO:D8J"D#<%G"J#;&8&?#;&8&>'J+<%G"J$J$D#<%G"J$?"E$J"Jv" 6D1D1D1FED1D1D1FE:FEFEFED1D1D1FEFED1D1D1FEFEFEFED1D1D1FEFED1D1D1FEFEFEFED1FEFEDFEFEFED1FEFEFED1D1D1FED1D1D1FE7FED1D1@FED1D1D1D1FED1D1D1FE7FED1D1D1FED1D14D1O/D9D8J#J#J$8"J( P!D1D1:D1D19D1FED1D1DD1FED1D1D1FED1J&8#?&9$9&8&9$J#9%9&9$8&J&9$9&8&9$C#:#:$8&:$<#;&8#?&9$9&8&9$C#9$9$9&<#9$9%:$;# :FEFED1FEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEO=FED1FEFEFEFEFED1FEFEFEFEFEFEFED1FEFEFE8FEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFED1FEFEFEFEFED1FEFED1FEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFED1FEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEJ&9"@&8&8&8&8&:"<"J"J";#:&8&8-J&8&8&8&8&:"B%8-8&A&9"@&8&8&8&8&:"B%8#:'@%8&8&9% 9FED1D1D1D1D1D1FED1D1D1FED1D1D1FED1FED1D1D1D1FED1D1D1FED1D1D1FEFEFE;FE;FEFED1D1D1D1D1FED1FED1D1D1FED1D1D1FED1D1FEFED1D1FE7D1FED1D1D1FED1D1D1FED1FED1D1D1D1FED1D1D1FED1D1D1FEFEFED1D1FEFED1D1D1FED1D1FED1FED1FEFED1D1D1FEFED1D1D1D1D1D1FED1D1D1FED1D1D1FED1FED1D1D1D1FED1D1D1FED1D1D1FEFED1D1D1FED1D1D1FEFED1D1FED1D1D1FED1D1D1D1FEFED1D1D1FEFED1D1FEJ#J$G&:"<"J"J"<";$A$:"J$G&:"<#:"J$;#:#J$G&:"<#H"=#A$9&9" 8FED1:FEFEFED1FEFEFED1D1D1;D1;D1FEFEFEFEFEFEFED1BFEFEFED1FEFEFED1D1FED1D14FEFEFEFED1FED1:FEFEFED1FEFEFED1D1FED1D1FED1FEFEFED1FEFEFED1D1J#J%G%J$9%A%J%G%J%@#J%G%J%:% 8D1FE:D1D1D1D1D1D1D1FEO;D1D1FEFED1D1D1D1D1D1D1FD1D1D1D1D1D1D1FEFD1D1D1D1D1FE:D1D1D1D1D1D1D1FEO%FED1D1D1D1D1D1FEJ#J"D$J#J"G$J"D$D#J"9#<#J"D$D#J#H" 9D1FE<FEFED1FEOAD1FE4FEFED1FE5FEFED1FEFED1=FEFED1D1FE<FEFED1FEFED1:FED1FEJ"959&8%:,:"<":&8&8&:":&8&8&:"9$9.9*9">&8,9&8%:,:"@0;(>"959&8%:,:"@'8*9"='85 6FE6D1FEFED1D1FEFEFED1FED1FEFEFEFEFEFED1FEFEFEFED1FEFEFED1FEFEFEFED1FEFEFED1D1D1FEFEFED1FEFEFEFEFEFEFED1FEFEFED1D1FEFEFED1FEFEFEFEFEFED1FEFEFED1D1FEFEFED1FEFEFEFEFED1D1FEFEFED1FED1FEFEFEFED1FEFEFED1D1FEFEFEFED1FEFEFED1FEFEFEFEFEFED1FEFEFEFED1FEFEFED1FEFEFEFED1FEFEFED1D1D1FEFEFED1FEFEFEFED1FEFEFED1D1FEFEFED1D1FEFED1D1FEFEFED1FE6D1FEFED1D1FEFEFED1FED1FEFEFEFEFEFED1FEFEFEFED1FEFEFED1FEFEFEFED1FEFEFED1D1D1FEFEFED1FEFED1FEFEFED1FEFEFEFEFED1FEFEFEFEFED1FEFEFED14D1FEFEFED1FED1D1FEFEFED1D1FEFEFED1FEFEFEJ#9#8z:$9%;$9$;"<":&9$:$;":&9$:$;"9$8#8u:$8$8#?$9v:$9%;$9$;":#:r8$8r8$9#:#9#8z:$9%;$9$;":#:&9t8&:&:&8$8r 6D1D1D1D11D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1FED1D1D1D1D11D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1D1D1D1D1D1D1J"J"J"J" S1D1BD1O7D1;D1Jv X)D8J" X(D8J$<$J";$;"C";$:$J#J$<$J$J"E$<$J$>"F$I#Jz EFEFEFEFEFEFEO FEFEFEFEFEFEFEFEFEFEFEFE>FEFE4FEFEFEFEFEFEJFEFEFE@FEFEFEFEFEFEFEJFEFEFEFEFEFEFEFEFEO3/D7J#<%G"J#;&8#B#;&8&>#9#D"C+<%G"J$J#E#<%G"J$?"E$J"JZ ED1D1FED1D1D1FE:FEFEFED1D1D1FEFEFEFEFEFED1D1D1FEFED1D1D1FEFEFEFEFED1FEFEFED1FEFEFED1D1D1FED1D1D1FE7FED1D1@FED1D1D1FED1D1D1FE7FED1D1D1FED1D14D1O4/J#B#B#J(J(J"C" P!D1D1D1D1D1D19D1FEFED1FEFED1<D1FED1D1D1FED1T!D7D8J&8#8#?&9$9&8&9$J%9&;#J&9$9&8&9$C#:#:$8&:$<)8#8#?&9$9&8&9$C#9$9$9&<#9$9%:$;#Jt$ 6FEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEOBFEFEFEFEFED1FEFEFEFEFE7FEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFED1FEFEFEFEFED1D1FEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFED1FEFEFEFEFEFEFED1FEFEFEFED1FEFEFEFEFEFEFEFEFEFEFEFEO3D9D8D8D7J)9"@&8&8&8&8&:"<"J"J";$9&8&:$J&8&8&8&8&:"B%8-8&>)9"@&8&8&8&8&:"B%8#:'@%8&8&9%J$ 6D1FED1FED1FED1D1D1D1FED1D1D1FED1D1D1FED1FED1D1D1D1FED1D1D1FED1D1D1FEFEFE;FE;FED1FED1D1D1D1D1FED1FED1D1D1FED1D17D1FED1D1D1FED1D1D1FED1FED1D1D1D1FED1D1D1FED1D1D1FEFEFED1D1FEFED1D1D1FED1D1FED1FED1FEFED1D1D1FED1FED1FED1FED1D1D1D1FED1D1D1FED1D1D1FED1FED1D1D1D1FED1D1D1FED1D1D1FEFED1D1D1FED1D1D1FEFED1D1FED1D1D1FED1D1D1D1FEFED1D1D1FEFED1D1FEO0D7FFFFJ$G&:"<"J"J"B$A#J$G&:"<#:"J$;#J$G&:"<#H"=#A$9&9"J$ O&FEFEFED1FEFEFED1D1D1;D1;D1FEFEFEFED1AFEFEFED1FEFEFED1D1FED1D14FEFEFEFED1@FEFEFED1FEFEFED1D1FED1D1FED1FEFEFED1FEFEFED1D1O=D8D8D7J%G%J%A#J%G%J%J%G%J%:%J$ O&D1D1D1D1D1D1D1FEOAFED1D1D1D1FEAD1D1D1D1D1D1D1FEFD1D1D1D1FD1D1D1D1D1D1D1FEO%FED1D1D1D1D1D1FEO8D7FFFFJ"D$J"J#A$J"D$D#J"9#J"D$D#J#H"J$ O)FEFED1FEO@D14D1FEFED1FE5FEFED1FEFED1=FEFED1DFEFED1FEFED1:FED1FEODD8D8D7J";59&8%:,:"<":&8&8&:":&8&8&:"948"9$>&8,9&8%:,:"@0;(>";59&8%:,:"@'8*9"='85J$ 6FE4FED1D1FEFEFED1FED1FEFEFEFEFEFED1FEFEFEFED1FEFEFED1FEFEFEFED1FEFEFED1D1D1FEFEFED1FEFEFEFEFEFEFED1FEFEFED1FEFEFEFEFEFEFEFEFEFEFED1FEFEFED1D1FEFEFED1FEFEFEFED1FEFEFED1D1FEFEFED1FED1FEFEFEFEFED1FEFED1FEFEFED1FEFEFEFEFEFED1FEFEFEFED1FEFEFED1FEFEFEFED1FEFEFED1D1D1FEFEFED1FEFEFEFED1FEFEFED1D1FEFEFED1D1FEFED1D1FEFEFED1FE4FED1D1FEFEFED1FED1FEFEFEFEFEFED1FEFEFEFED1FEFEFED1FEFEFEFED1FEFEFED1D1D1FEFEFED1FEFED1FEFEFED1FEFEFEFEFED1FEFEFEFEFED1FEFEFED14D1FEFEFED1FED1D1FEFEFED1D1FEFEFED1FEFEFEO1D7FFFFJr8z:$9%;$9$;"<":&9$9&:":&9$:$;"9r8u8#9#?$9v:$9%;$9$;":#:r8$8r8$9#:r8z:$9%;$9$;":#:&9t8&:&:&8$8rJ$ 6D11D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1FED1D11D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1D1FED1D1D1D1D1D1D1D1D1D1D1D1D1D1D1O7D8D8D7J"J"J"J"J$ S*D1BD1O7D1;D1P%D7FFFFJ$ X/D8D8D7J$ X,D7FFD8J" X0D7J" X-D7J" X/D7JZAZ 5W5/J"J" 4FFW?FFIz=z W9D13D9 Gz W=D9 Iz W9D8J" WKFFJy#Z$x" 5D7FFD7VCD7FFFFD7FFJ$J"9# AFFFFD8VCD8FFFFJ%:z"<# ?FFFFFFD8V?D9D8FFFFJ#8"J#8# =FFFFD9VID9D9FFFFJ#8#J#8# ;FFFFD9D9VLD9D9FFFFJ#8#J#8# 9FFFFD9D9W"D9D9FFFFJ#8#J#8# 7FFFFD9D9W&D9D9FFFFJ'J& 5D8D8D8D8D9D9W*D9D8D8D8D8J#8#J"9" 5D7D7D8D8W*D8D7J#8#J#8# 7D7D7D8D8W&D8D8D7D7J#8#J#8# 9D7D7D8D8W"D8D8D7D7'J#8#J#8#J& F7F7F7F7F7F75D7D7D8D8VLD8D8D7D7MF7F7F7F7F7'J#8"J#8#J' F6F6F6F6F6F67D7D7D8VID8D8D7D7O!F6F6F6F6F6F68%J#<z=#J& F9F9F9F99D7D7V?D8D7D7O$F9F9F9F9F7J#9"J$ AD7D7D8VCD8D7D7JZ 5W5J" 4FFIz W9D9 =z"z"z 0F6F7WHF6F71F6<z8z8z 1F9WGF91F9 7z8z8z 6F7WGF75F7"J"J" F77F7WHF7 ENDBITMAP %%EndBinary 324 456 531 537 R 7 X V 4 8 Q 0 X (scrolledtext .st -labelpos n \134) 324 531.67 T ( -labeltext \322/etc/passwd\323 \134) 324 521.67 T ( -vscrollmode static \134) 324 511.67 T ( -hscrollmode static) 324 501.67 T (pack .st -padx 10 -pady 10 -f) 324 491.67 T (ill both \134) 463.2 491.67 T ( -expand yes) 324 481.67 T (.st import /etc/passwd) 324 461.67 T 0 10 Q (FIGURE 24) 376.64 431.17 T 1 F ( - Scrolledtext) 428.02 431.17 T 0 0 612 792 C FMENDPAGE %%EndPage: "13" 13 %%Page: "14" 14 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 12 Q 0 X 0 0 0 1 0 0 0 K (Buttonbox) 157.49 272.29 T 1 10 Q (The Buttonbox performs geometry management for) 72 253.62 T (Pushbutton instances. Public commands exist which) 72 241.62 T (enable the user to add new Pushbuttons, de\336ne the) 72 229.62 T (default, and control their display) 72 217.62 T (. Options enable the) 201.61 217.62 T (user to establish the orientation. This class is used to) 72 205.62 T (manage the buttons for all dialogs in the [incr W) 72 193.62 T (idgets]) 265.74 193.62 T (mega-widget set.) 72 181.62 T 0 12 Q (Panedwindow) 148.49 150.29 T 1 10 Q (The Panedwindow class is composed of panes, separa-) 72 125.62 T (tors, and sashes for adjustment of the separators. Each) 72 113.62 T (pane is a child site and the class provides a command) 72 101.62 T (which returns the paths for the sites. The user may \336ll) 72 89.62 T (them with further widget combinations.) 72 77.62 T 72 298.29 297 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 324 297 715.57 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 5902 489 391 195.6 156.4 0 85.29 548.57 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000096FB7DFFCF9AFFFF69FBB29AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000096FB6DFFB669F7AE86FFDF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000009AFF5DDF9E71FFBA8EFFEF75C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F4F5W:F4F57F4F5J" X;F58z8z8z 5F8W9F85F8 <z" X0F5F4=z"z"z"z 0F4F5W)F4F50F4F50F4>z8z8z8z /F8W(F8/F8/F8 J'J$8$C$8s R$FEFEFEFEF8FE6FEFEFEFEFEFEFEFEFEFEJ'J":"E":"8$Js" R#FEFEF8F8F8FE7F8F8F8F8F8F8F8REF4F5J"J"Jr R(F8O)F8REF8J#8"9$8'8$E$:#@"9,9'8#;$ R%FEFEF8FEFEFEFEFEFEF8FEFEFEFEFEFEFEFEFEFEFEFEFEFEF8FEFEF8FEFEFEFEFEFEFEF8FEFEFEFEFEFEFEAs"J"9#8)8"8(A-=#8$8":%8"8)8'J$ F4F5Q=F8FEFEFEFEFEF8FEFEF8F8FEFEFEFEF8FEFEFEFEFEFEF8FEFEF8FEFEFEF8FEFEFEF8F8F8FEF8F8FEFEF8FEF8FEFEFEF8FEFEFEFEFEF8FEFEQAF4F4F5BrJ#9"9%:$8$F";$=#=(="9">"J" F8Q?F8F8FEF8F8F8F8F8F8F8F8F8F8FEF8F8F8F8F8F8F8F8F8F8FEFEF8F8FEQDF8AsJ"8#J%E"?%I%J# F5Q>FEF8F8DF8F8F8F8F8FEFEF8F8F8F8F8F8QAF5F5AtJ">%?$E%9$J"I%J$ F8Q>FEFEF8FEFEFEF8FEFEF8FEFEFEF8FE6FEFEF8FEFEQAF8F8F8J08"8*8$8/8$8";"8"8%8$8"9"9) R$F8FEFEFEFEF8F8F8F8FEFEFEF8F8FEFEF8F8FEFEFEF8F8F8FEFEF8FEFEF8F8F8FEFEFEF8F8F8F8FEFEF8FEF8FEFEFEFEF8FEFEF8FEF8FEFEFEFEF8F8F8FEFEFEF8J':$8%:$9t9$:v;%9z9$Js R#F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F83F8F8F8F8R"F5Jt X)F8 >z8z8z8z /F5W(F5/F5/F5sF"J"F"F& F5F5W)F5F5F5F5F5F5F5(z$z' F4F4F4F4F4F4F5WGD8D9D9D93CFF4F4F4F4F4F48%J"J( F8F8F8F8WGFF5D0F4F8F8F8F8F5?z"<r"r" WCD9FFD1D8D1D0J$ X+FFD8D8 J"9" X*FFD8J" X,D9J( X)FFFFD9D9D9D8D8J" X(FFJ"9$ X*D9D9D8D8J$;$ X'FFFFD9D9D8D8 J$=$ X&FFFFD9D9D8D8Ju X'D8J#B" X%FFD8D8J"X" X%D1D1J" X2D8Jz9zJz9zDt" 8QHCD3CF>QHCD3CFD9D8J"J"J"J" R1FF5D0R7FF5D0Jz"<r"r"Jz"<r"r" :QDCEFFD1D8D1D0AQDCEFFD1D8D1D0J$J$ R=FFD8D8RKFFD8D8 J"9"J"9" R<FFD8RIFFD8J"J" R>D9RMD9J(J( R;FFFFD9D9D9D8D8RGFFFFD9D9D9D8D8J"J" R:FFRMFFJ"9$J"9$ R<D9D9D8D8RGD9D9D8D8J$;$J$;$ R9FFFFD9D9D8D8RCFFFFD9D9D8D8 J$=$J$=$ R8FFFFD9D9D8D8RAFFFFD9D9D8D8JuJu R9D8RDD8J#B"J#B" R7FFD8D8R?FFD8D8J"X"J"X" R7D1D1R?D1D1J"J" RDD8RMD8Jt"Jt" R:D9D8RDD9D8 JtJt R:D8RED8J"J" R9D8RMD8JZJZ R7/R?/J"C"J"C"Ft R7D1D8R?D1D8D8J#t$J#t$E" R8D1FFD9D8D8D1R@D1FFD9D8D8D1D8J"J"Jx R:FFRMFF9D1J">$J">$ R9D1D8D8D1RBD1D8D8D1J"="J"=" R;FFD1REFFD1J"<"J"<" R:D1D8RFD1D8J"9$J"9$ R<FFD8D8D1RGFFD8D8D1J"J" R;D1RMD1J&J& R=FFD9D8D8D1RIFFD9D8D8D1J&J& R<D1FFD8D8D1RID1FFD8D8D1 J$J$ R=D1D8D1RKD1D8D1JZ=zJZ=z :QD/D0BQD/D0J"J"J"J" 9FFQJD0O"FFQJD0Jz9zJz9z 8QHD93D9>QHD93D9 JzJz 8QHCFO&QHCFJ"J" R1D0RMD0Jw"z#v"Jw"z#v" :D1FFQ*D1FFFFD1D0O)D1FFQ*D1FFFFD1D0J$Z8#J$Z8# DFFFFD8Q*FFFFO=FFFFD8Q*FFFFJ$J":"J$J":" CFFFFD8Q*D8FFO;FFFFD8Q*D8FFJ%:z"9&J%:z"9& AFFFFFFD9Q&D9D8D9D9FFFFFFO7FFFFFFD9Q&D9D8D9D9FFFFFFJ&J&J&J& ?FFFFFFD9D9Q1D9D9FFFFFFO3FFFFFFD9D9Q1D9D9FFFFFFJ"8"J"8"J"8"J"8" >FFD9Q5D9FFO1FFD9Q5D9FFJ&J&J&J& <FFFFFFD9D9Q7D9D9FFFFFFO-FFFFFFD9D9Q7D9D9FFFFFFJ&J%J&J% :D8D8D8D9D9Q;D9D8D8D8O*D8D8D8D9D9Q;D9D8D8D8J&J"8"J&J"8" :D1D1D8D8D8Q;D8D1O*D1D1D8D8D8Q;D8D1J&J&J&J& <D1D1D8D8D8Q7D8D8D8D1D1O-D1D1D8D8D8Q7D8D8D8D1D1J"8"J"8"J"8"J"8" >D1D8Q5D8D1O1D1D8Q5D8D1J&J&J&J& ?D1D1D8D8D8Q1D8D8D8D1D1O3D1D1D8D8D8Q1D8D8D8D1D1J%:z:&J%:z:& AD1D1D8D8Q&D8D8D8D8D1D1O7D1D1D8D8Q&D8D8D8D8D1D1J":"J"J":"J" CD1D8Q,D1O;D1D8Q,D1J$z%J$z% DD1D1D8Q*D1FFD8D1D1O=D1D1D8Q*D1FFD8D1D1JzJz :QDD0O*QDD0J"J" 9D0RMD0JzJz 8QHD9O&QHD9 Jz9zJz9z 8QHCD3CF>QHCD3CFJ"J"J"J" R1FF5D0R7FF5D0Jz"<r"r"Jz"<r"r" :QDCEFFD1D8D1D0AQDCEFFD1D8D1D0J$J$ R=FFD8D8RKFFD8D8 J"9"J"9" R<FFD8RIFFD8J"J" R>D9RMD9J(J( R;FFFFD9D9D9D8D8RGFFFFD9D9D9D8D8J"J" R:FFRMFFJ"9$J"9$ R<D9D9D8D8RGD9D9D8D8J$;$J$;$ R9FFFFD9D9D8D8RCFFFFD9D9D8D8 J$=$J$=$ R8FFFFD9D9D8D8RAFFFFD9D9D8D8JuJu R9D8RDD8J#B"J#B" R7FFD8D8R?FFD8D8J"X"J"X" R7D1D1R?D1D1J"J" RDD8RMD8Jt"Jt" R:D9D8RDD9D8 JZ X%/J"C" X%D1D8J#t$ X&D1FFD9D8D8D1J" X(FFJ">$ X'D1D8D8D1J"=" X)FFD1J"<" X(D1D8J"9$ X*FFD8D8D1J" X)D1J& X+FFD9D8D8D1J& X*D1FFD8D8D1 J$ X+D1D8D1?Z8Q8Z8Q8Z=z R'RD2/D0>"J" FFWID0=z9z WGD93D9 =z WGCF'J"J& F5F5F5F5F5F5WGD06F5F5F5F5F5'9w"z#v"J' F4F4F4F4F4F4D1FFW)D1FFFFD1D07F4F4F4F4F4F48%C$ZA#J& F8F8F8F8FFFFD8W FFFFBF8F8F8F8F5H$J"C" FFFFD8W D8FFF%:z"B& FFFFFFD9VJD9D8D9D9FFFFFFD&J& FFFFFFD9D9W0D9D9FFFFFFC"8"J"8" FFD9W4D9FFA&J& FFFFFFD9D9W6D9D9FFFFFF?&J% D8D8D8D9D9W:D9D8D8D8?&J"8" D1D1D8D8D8W:D8D1A&J& D1D1D8D8D8W6D8D8D8D1D1C"8"J"8" D1D8W4D8D1D&J& D1D1D8D8D8W0D8D8D8D1D1F%:zC& D1D1D8D8VJD8D8D8D8D1D1H":"J" D1D8W+D1I$z@$ D1D1D8W D1D8D1D1?z WCD0>" D0=z"z"z 0F4F5W:F4F51F4<z8z8z 1F8W9F81F8 7z8z8z 6F5W9F55F5"J"J" F57F5W:F5 ENDBITMAP %%EndBinary 81 333 288 531 R 7 X V 4 8 Q 0 X (scrolledframe .sf -vscrollmode static \134) 81 525.67 T ( -hscrollmode static \134) 81 515.67 T ( -width 475 -height 360) 81 505.67 T (set childsite [.sf childsite]) 81 495.67 T (pack [frame $childsite.topframe]) 81 475.67 T (pack [frame $childsite.botframe]) 81 465.67 T (scrolledlistbox $childsite.topframe.slb1) 81 445.67 T (pack $childsite.topframe.slb1 -side left) 81 435.67 T (scrolledlistbox $childsite.topframe.slb2) 81 415.67 T (pack $childsite.topframe.slb2 -side left) 81 405.67 T (scrolledlistbox $childsite.botframe.slb3) 81 385.67 T (pack $childsite.botframe.slb3 -side left) 81 375.67 T (scrolledlistbox $childsite.botframe.slb3) 81 365.67 T (pack $childsite.botframe.slb3 -side left) 81 355.67 T (pack .sf -expand yes -f) 81 335.67 T (ill both) 191.4 335.67 T 0 10 Q (FIGURE 25) 125.51 308.17 T 1 F ( - Scrolledframe) 176.9 308.17 T 0 0 612 792 C 1 10 Q 0 X 0 0 0 1 0 0 0 K -0.17 (The Panedwindow of) 315 116.48 P -0.17 (fers signi\336cant control over its pre-) 400.03 116.48 P (sentation through a lar) 315 104.48 T (ge set of options. The option set) 404.53 104.48 T (allows speci\336cation of the distance between a pane and) 315 92.48 T (its contents, the minimum size a pane\325) 315 80.48 T (s contents may) 468.05 80.48 T 315 527.86 540 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 558 540 718.14 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 3593 264 89 135.77 45.77 0 369 657 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000008EEF9AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000082D78AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000006DB675C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7R?F6F77F6F7J" S@F78z8z8z 5F9R>F95F9 <z" S5F7F6=z"z"z"z 0F6F7R.F6F70F6F70F6>z8z8z8z /F9R-F9/F9/F9 J'D":"I' OJFEFEFEFEFEFEFEFEFEFEFEFEFEFEJ"8%B":"J"8%Js" OJF9F9F9FEFEFEFE4F9F9F9FEFEP,F6F7Jr S/F9J(8"8$8#8$9'D$9( P%FEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEF9FEFEFEAs"J%8"9":"8$8,8%;%8*9$J$ F6F7O9FEFEFEF9F9F9F9F9F9F9F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEFEFEFEF9FEFEFEF9FEFEFEF9F9F9FEF9O;F6F6F7BrJ&J$<">&9$:&J" F9O:F9F9F9FEFE6F9F9F9F9F9F9F9FEFEF9F9F9F9FEFEFEF9O=F9AsJ# F7R;F7F7AtJ"F$J$:&J$ F9OCFEFEF9FE7FEF9FEFEF9F9FEFEO<F9F9F9J"8&8%8"8$8.8"9$829" OJFEFEFEFEFEF9F9FEFEF9FEF9FEFEF9FEFEF9F9F9FEFEFEF9F9F9FEFEFEF9FEFEFEFEFEF9F9F9F9FEFEFEF9F9F9FEFEFEFEJr:'9#9#9$9z:$9rJs OJF9F9F9F9F9F9F9F9F9F9F9F9F9F90F9F9F9F9F9OIF7Jt S.F9 >z8z8z8z /F7R-F7/F7/F7sF"J"F"F& F7F7R.F7F7F7F7F7F7F7(z' F6F6F6F6F6F6F7S4D9F6F6F6F6F6F68%J& F9F9F9F9S6F9F9F9F9F7 Bz OBFE Dz O>D9 Fz O:D8J" OIFFHz" O6D9FF JZJZJZ 6O.4O.4O.J"J"J" OCD8OAD8OAD8Jz"Jz"Jz" 8O*D9D87O*D9D87O*D9D8 J#:#J#9#J#;#F# HFEFEFEFEO>FEFEFEFEO/FEFEFEFEFEFEJ" PBFEJ$8)9%J%J"9":%8#9#:#9% HD9FEFEFEFED9D9FEFEFEFEFEFEFEFEO;FEFEFEFEO+FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEJ.J#:'J'A, O"FEFED9D9FEFED9FEFED9D9FEFEO3D9FEFEFED9D9FEFEO2FEFED9D9FEFEFED9FEFED9FEFED9D9FEFEJ'@%J$:#;(9" ID9FEFEFEFED9FED9D9D9PJFED9FED9D9D9FEFED9FEFED9D9J"8":#9&J#J"9":$J# JD9D9FEFED9D9FEFEFEO5D9FEO3D9D9FEFEFE4FEFEJ%9"8"J";%:&A% O$D9D9D9D9D9FEPKFEFEFED9D9D9FEFEFED9D9D9D9D9J(J"J$J"># O&FEFED9FEFED9D9O7D9O4D9FED95FEFEFEJ.J'J(8"=, O"D9FEFEFEFED9D9D9FEFEFEFED9O9D9FEFEFEFED9O2D9FEFEFED9FEFED9D9FEFED9D9D9FEFEFEFED9J#:%9%J#9#8%J#8"8#8':"9&9% KD9D9D9D9D9D9D9D9D9D9O2D9D9D9D9D9D9D9D9O)D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9J" R;FEJ$ R:FEFED9J# R:D9D9 'J& F7F7F7F7F7F7S5F7F7F7F7F7'HzJzJzG' F6F6F6F6F6F6O*D88O*D88O*D8F6F6F6F6F6F68%G"J"J"J& F9F9F9F9D8OAD8OAD8O<F9F9F9F9F7JzJzJz 6O.D94O.D94O.D9 HZ O6G" FFFz O:D9 Dz O>FE Bz OBD9 =z"z"z 0F6F7R?F6F71F6<z8z8z 1F9R>F91F9 7z8z8z 6F7R>F75F7"J"J" F77F7R?F7 ENDBITMAP %%EndBinary 351 567 513 648 R 7 X V 4 8 Q 0 X (buttonbox .bb -padx 10 -pady 10) 351 642.67 T (.bb add Yes -text Yes) 351 622.67 T (.bb add No -text No) 351 612.67 T (.bb add Maybe -text Maybe) 351 602.67 T (.bb default Yes) 351 592.67 T (pack .bb -expand yes -f) 351 572.67 T (ill both) 461.4 572.67 T 0 10 Q (FIGURE 26) 376.52 542.16 T 1 F (- Buttonbox) 430.42 542.16 T 0 0 612 792 C 315 135.14 540 505.86 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 170.71 540 494.43 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 5963 314 531 94.2 159.3 0 427.8 323.98 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000007D96FB7DFFCF8AFFE79AFF2CAEB6CF71E7 A24DF70055BE928AB2D3FF00F7557DDBB2002CFF6120822C455D4571FF0000FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000006D96FB6DFFB67DFFCF8AE78AEFEF0071E7 A24DF70055BE827530B6FFFFDF697DDBB2004D00B641DF4D829E4582FF0000FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000005D9AFF5DDF9E69FBB275C755EFB60071E7 A24DF77D55BE9265618EE300B22C7DDBB28A4D00FF59E351B6A2FF9200FF00FF > store BEGINBITMAPCOLORc z"z"z" 7F6F7SCF6F77F6F7J" TDF78z8z8z 5F9SBF95F9 <z" T9F7F6=z"z"z"z 0F6F7S2F6F70F6F70F6>z8z8z8z /F9S1F9/F9/F9 JrJ$8.8#E$ P'FE>FEFEFEFEFEFEFEF9FEFEFEFEF9FEFEFEFEFEFEFEFEJ"8&J":"8$8&I"Js" P'F9F9F9F9FEFE=F9F9F9F9F9F9F9F9FEF9F9P<F6F7J#Jr Q2F9F9PMF9J%9';$:#<,8$8';#=$8- P1FEFEFEFEFEFEFEF9FEFEFEFEFEFEFEF9FEFEF9FEF9FEFEF9FEF9FEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEF9FEFEFEFEF9FEFEFEAs"J$9%8"8%8-H":"8%8&:)9"8&J$ F6F7OFFEFEF9F9F9FEFEF9FEF9FEFEFEFEFEF9FEFEF9FEFEFEF9FEF9F9FEF9FEFEFEFEFEF9FEFEFEFEF9FEFEFEF9F9F9F9F9FEF9OEF6F6F7BrJ%9$=">";$J"=$<$9$9%J" F9OEFEFEFEF9F9FEFEF9FEF9F9F9:F9F9F9F9F9F9F9F9FEFEFEF9FEF9OGF9AsJ$9%E%B*J# F7OEF9F9F9FEFEF9F9F9F9F9F9F9FEFEF9F9F9FEFEF9PDF7F7AtJ"E%9$J$<$:)J$ F9OMFEFEF9FEFEFEF9FEBFEF9FEFEF9FEF9FEFEF9F9FEFEF9OGF9F9F9J"8";%8$8"9/8"E"8$8"9(8* P'FEFEF9FEFEF9FEF9FEFEFEF9F9F9FEFEFEF9F9F9F9FEFEF9FEFEFEF9FEFEFEF9F9F9FEFEF9FEF9F9F9FEFEFEF9F9J%<z9$:':#9#:x9'9$;#8#Js P'F9F9F9F9/F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9P(F7Jt T2F9 >z8z8z8z /F7S1F7/F7/F7sF"J"F"F& F7F7S2F7F7F7F7F7F7F7(z' F6F6F6F6F6F6F7T8D9F6F6F6F6F6F68%J& F9F9F9F9T:F9F9F9F9F7 Ez S<D1 Gz=z S8D03D8J"J" SHFF9FFIz"@r"r" S4D1FFD7D8D7FFJ" T*FFJ" T,D8J" T)FFJ$ T+D9D8D8J$ T(FFFFD9J$ T,D9D8D8J$ T'FFFFD9J$ T-D9D8D8J$ T&FFFFD9J$ T.D9D8D8J$ T%FFFFD9J$ T/D9D8D8J#u T$FFFFD8J"B" T%D8D8Jz T$/D7JZ T$/J" T2D8Jv" T&D9D8 Jv T&D8J" T%D8Jz T$/D7JZ T$/J"C" T$D7D8Jt$ T'D9D8D8D7J$ T%D7FFFFJ$ T/D8D8D7J$ T&D7FFFFJ$ T.D8D8D7J$ T'D7FFFFJ$ T-D8D8D7J$ T(D7FFFFJ$ T,D8D8D7J$ T)D7FFD8J" T-D7J" T*D7J" T,D7IZAZ S4/H"J" FFS>FFGz=z S8D13D9 Ez S<D9 Gz S8D8J" SHFFIy#Z$x" D7FFD7RBD7FFFFD7FFJ$J"9# ?FFFFD8RBD8FFFFJ%:z"<# =FFFFFFD8R>D9D8FFFFJ#8"J#8# ;FFFFD9RHD9D9FFFFJ#8#J#8# 9FFFFD9D9RKD9D9FFFFJ#8#J#8# 7FFFFD9D9S!D9D9FFFFJ#8#J#8# 5FFFFD9D9S%D9D9FFFFI'J& D8D8D8D8D9D9S)D9D8D8D8D8I#8#J"9" D7D7D8D8S)D8D7J#8#J#8# 5D7D7D8D8S%D8D8D7D7J#8#J#8# 7D7D7D8D8S!D8D8D7D7J#8#J#8# 9D7D7D8D8RKD8D8D7D7J#8"J#8# ;D7D7D8RHD8D8D7D7J#<z=# =D7D7R>D8D7D7J#9"J$ ?D7D7D8RBD8D7D7IZ S4H" FFGz S8D9 JU T+J" T4D8J( T-D9D9D9D9D9D9D8 =z@u T$D8D8>z@t" T#D9D9FF>Z@T T#=z@u T$D9D9J' T-D8D8D8D8D8D8J" T,D8Ju T+D9 Ez S<D1 Gz=z S8D03D8J"J" SHFF9FFIz"@r"r" S4D1FFD7D8D7FFJ" T*FFJ" T,D8J" T)FFJ$ T+D9D8D8J$ T(FFFFD9J$ T,D9D8D8J$ T'FFFFD9J$ T-D9D8D8J$ T&FFFFD9J$ T.D9D8D8J$ T%FFFFD9J$ T/D9D8D8J#u T$FFFFD8J"B" T%D8D8Jz T$/D7JZ T$/J" T2D8Jv" T&D9D8 Jv T&D8J" T%D8Jz T$/D7JZ T$/J"C" T$D7D8Jt$ T'D9D8D8D7J$ T%D7FFFFJ$ T/D8D8D7J$ T&D7FFFFJ$ T.D8D8D7J$ T'D7FFFFJ$ T-D8D8D7J$ T(D7FFFFJ$ T,D8D8D7J$ T)D7FFD8J" T-D7J" T*D7J" T,D7IZAZ S4/H"J" FFS>FFGz=z S8D13D9 Ez S<D9 Gz S8D8J" SHFFIy#Z$x" D7FFD7RBD7FFFFD7FFJ$J"9# ?FFFFD8RBD8FFFFJ%:z"<# =FFFFFFD8R>D9D8FFFFJ#8"J#8# ;FFFFD9RHD9D9FFFFJ#8#J#8# 9FFFFD9D9RKD9D9FFFFJ#8#J#8# 7FFFFD9D9S!D9D9FFFFJ#8#J#8# 5FFFFD9D9S%D9D9FFFFI'J& D8D8D8D8D9D9S)D9D8D8D8D8I#8#J"9" D7D7D8D8S)D8D7J#8#J#8# 5D7D7D8D8S%D8D8D7D7J#8#J#8# 7D7D7D8D8S!D8D8D7D7J#8#J#8# 9D7D7D8D8RKD8D8D7D7J#8"J#8# ;D7D7D8RHD8D8D7D7J#<z=# =D7D7R>D8D7D7J#9"J$ ?D7D7D8RBD8D7D7IZ S4H" FFGz S8D9 JU T+J" T4D8J( T-D9D9D9D9D9D9D8 =z@u T$D8D8>z@t" T#D9D9FF>Z@T T#=z@u T$D9D9J' T-D8D8D8D8D8D8J" T,D8Ju T+D9 Ez S<D1 Gz=z S8D03D8J"J" SHFF9FFIz"@r"r" S4D1FFD7D8D7FFJ" T*FFJ" T,D8J" T)FFJ$ T+D9D8D8J$ T(FFFFD9J$ T,D9D8D8J$ T'FFFFD9J$ T-D9D8D8J$ T&FFFFD9J$ T.D9D8D8J$ T%FFFFD9J$ T/D9D8D8J#u T$FFFFD8J"B" T%D8D8Jz T$/D7JZ T$/J" T2D8Jv" T&D9D8 Jv T&D8J" T%D8Jz T$/D7JZ T$/J"C" T$D7D8Jt$ T'D9D8D8D7J$ T%D7FFFFJ$ T/D8D8D7J$ T&D7FFFFJ$ T.D8D8D7J$ T'D7FFFFJ$ T-D8D8D7J$ T(D7FFFFJ$ T,D8D8D7J$ T)D7FFD8J" T-D7J" T*D7J" T,D7IZAZ S4/H"J" FFS>FFGz=z S8D13D9 Ez S<D9 Gz S8D8J" SHFFIy#Z$x" D7FFD7RBD7FFFFD7FFJ$J"9# ?FFFFD8RBD8FFFFJ%:z"<# =FFFFFFD8R>D9D8FFFFJ#8"J#8# ;FFFFD9RHD9D9FFFFJ#8#J#8# 9FFFFD9D9RKD9D9FFFFJ#8#J#8# 7FFFFD9D9S!D9D9FFFFJ#8#J#8# 5FFFFD9D9S%D9D9FFFFI'J& D8D8D8D8D9D9S)D9D8D8D8D8I#8#J"9" D7D7D8D8S)D8D7'E#8#J#8#J& F7F7F7F7F7F7D7D7D8D8S%D8D8D7D7GF7F7F7F7F7'G#8#J#8#J' F6F6F6F6F6F6D7D7D8D8S!D8D8D7D7IF6F6F6F6F6F68%I#8#J#8#J& F9F9F9F9D7D7D8D8RKD8D8D7D7LF9F9F9F9F7J#8"J#8# ;D7D7D8RHD8D8D7D7J#<z=# =D7D7R>D8D7D7J#9"J$ ?D7D7D8RBD8D7D7IZ S4H" FFGz S8D9 =z"z"z 0F6F7SCF6F71F6<z8z8z 1F9SBF91F9 7z8z8z 6F7SBF75F7"J"J" F77F7SCF7 ENDBITMAP %%EndBinary 325.43 185.43 532.43 307.29 R 7 X V 4 8 Q 0 X (panedwindow .pw -width 300 -height 500) 325.43 301.95 T (.pw add top) 325.43 291.95 T (.pw add bottom) 325.43 281.95 T (.pw insert 1 middle) 325.43 271.95 T (pack .pw -f) 325.43 261.95 T (ill both -expand yes) 378.23 261.95 T (foreach pane [.pw childsite] {) 325.43 241.95 T ( scrolledlistbox $pane.slb \134) 325.43 231.95 T ( -vscrollmode static \134) 325.43 221.95 T ( -hscrollmode static) 325.43 211.95 T ( pack $pane.slb -f) 325.43 201.95 T (ill both -expand yes) 426.23 201.95 T (}) 325.43 191.95 T 0 10 Q (FIGURE 27) 368.71 146.32 T 1 F ( - Panedwindow) 420.1 146.32 T (Child Sites) 327.49 408.8 T 447.31 453.58 459 456.29 450.52 447.79 448.91 450.68 4 Y V 378 411.29 448.92 450.68 2 L N 438.46 414.59 450 411.29 438.46 407.98 438.46 411.29 4 Y V 378 411.29 438.46 411.29 2 L N 441.97 375.2 450 366.29 438.46 369.6 440.22 372.4 4 Y V 378 411.29 440.22 372.4 2 L N 0 0 612 792 C FMENDPAGE %%EndPage: "14" 14 %%Page: "15" 15 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (reach, the orientation of separators, the thickness of the) 72 713.33 T (separators, as well as the dimensions, position, and cur-) 72 701.33 T (sor associated with the sash.) 72 689.33 T 0 12 Q (Combobox) 156.5 658 T 1 10 Q (The combobox class is an enhanced entry \336eld widget) 72 633.33 T (with an optional associated label and a scrollable list.) 72 621.33 T (When an item is selected in the list area of a combobox) 72 609.33 T (it\325) 72 597.33 T (s value is then displayed in the entry \336eld text area.) 80.34 597.33 T (Functionally similar to an optionmenu, the combobox) 72 585.33 T (adds list scrolling, item editing and inserting capabili-) 72 573.33 T (ties.) 72 561.33 T (There are two basic styles of comboboxes, determined) 72 104.22 T (by the dropdown option, dropdown and simple. The) 72 92.22 T (dropdown style adds an arrow button to the right of the) 72 80.22 T 72 124.89 297 558 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 146.43 297 548.57 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 81 152.57 288 341.57 R 7 X V 1 10 Q 0 X (# Non-editable Dropdown Combobox) 81 334.9 T (combobox .cb1 -labeltext Month: \134) 81 322.9 T ( -editable false -items {Jan Feb Mar \134) 81 310.9 T ( Apr May June Jul Aug Sept Oct Nov Dec}) 81 298.9 T (# Editable Dropdown Combobox) 81 274.91 T (combobox .cb2 -labeltext \322Operating System:\323 \134) 81 262.91 T ( -items {Linux HP-UX SunOS Solaris Irix}) 81 250.91 T (# Simple Combobox) 81 226.91 T (combobox .cb3 -labeltext Fonts: -labelpos nw \134) 81 214.91 T ( -dropdown false -items [exec xlsfonts]) 81 202.91 T (pack .cb1 -padx 10 -pady 10 -\336ll x) 81 178.91 T (pack .cb2 -padx 10 -pady 10 -\336ll x) 81 166.91 T (pack .cb3 -padx 10 -pady 10 -\336ll x) 81 154.91 T %%BeginBinary: 38844 329 407 157.92 195.36 0 108 347 /red < C472FFFFFFFFFFFFFFFFFFFFFFFFFF66F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF808080 8080808080808080808080808080808080808080804040404040404040404040 4040404040404040404040400000000000000000000000002EAFB4CD73E6A2F5 99FFFFB0B07AFFCC00878858D7439D50D080C0C080C08060C000FFA000FF20C0 A0C0D060F0E010B499FFBE8B8BD900FFA0000000000039C069DD00FF00000033 33330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7AEFD3BF804040 9765E1A36FE700FF55004DB2D272B36419BF2FFF6223852F465F4770FF0000FF > store /green < D79F0000000000000000000000000099DEFFFFFFBFBFBFBFBF80808080804040 4040000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFF FFFFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF80 808080804040400000000000FFFFFFBFBFBFBFBF808080408BEEEE0073E6A2F5 99FFFF30B094FFF700CE8858D74DB38080C0C080C0808060C08000A080402070 A020D0F0F0E010B489E4BE5B77D9FFFFA0404040400063E0B500996699FF0066 3399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69E3B5BF804040 9765E1A36FE700FF1A004DB2B477B39519264F00B641DE4F829E4780FF0000FF > store /blue < FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3BF8040FFBF804000FFBF804000FFBF 8000BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF80 4000FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FF BF804000FFBF00FFBF804000BF8040FFBF804000FFBF40FF57EEB40073E6A2F5 6BFBB360B015322480FA8858D756CAD050C080C08080C060C080FF0000402070 C020D06050E010B476C4BE7A65D900E0A0BF8040004063E0B500FF3399FF8866 6666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69E3B5BF808040 9765E1A36FE7BFCC8BEE4DB28C85B3ED70264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7T&F6F76F6F7J" U%F78z8z8z 4F9T%F94F9 ;z" TJF7F6<z"z"z"z 0F6F7SCF6F70F6F70F6=z8z8z8z /F9SBF9/F9/F9 J$C$ Q+FEFEFEFEFEFEJ"E"Js" Q+F9F9Q&F6F7Jr TCF9J$:$9'8#<#;$<#;$9( P@FEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFEFE@s"J18):.909$J$ F6F7P+FEFEFEF9FEFEF9FEFEFEF9FEFEFEF9F9FEF9FEFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FEFEFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9F9F9FEF9P/F6F6F7ArJ%9$<"9"=$;$;$;$:&J" F9P.F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FEFEFEF9P1F9@sJ# F7T"F7F7@tJ%9$J";$=";$:&J$ F9P-FEF9FEFEFEF9FE4FEFEF9FEFEFEF9FEFEF9F9FEFEP0F9F9F9J18"9"9"8/839" P>F9F9FEFEFEF9F9F9F9FEFEFEF9F9F9FEFEFEFEF9FEFEFEF9F9F9F9F9FEFEFEF9F9F9FEFEFEF9F9F9F9F9FEFEFEF9F9F9FEFEFEFEJ$:$9z;$9&;$9rJs P@F9F9F9F9F9F92F9F9F9F9F9F9F9F9F9F9F9F9F9P=F7Jt TBF9 =z8z8z8z /F7SBF7/F7/F7rF"J"F"F% F7F7SCF7F7F7F7F7F7'z& F6F6F6F6F6F7TIADF6F6F6F6F68$J% F9F9F9TKF9F9F9F7 J5=4 O6RAFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEFFADFFADFFADFFADFFADFFADFFADFFADFFADFFJ5<5 O5RBFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEAD4FFADFFADFFADFFADFFADFFADFFADFFADFFADFFADJ#z"<#z" O5ADFER?ADFFADFF1ADFEJ#J#<#F# O5FEADR>FFADFFADFEADJ#J#<#F# O5ADFER>ADFFADFFADFEJ#;#F#8#F#<"J#<#9u9# 4FEFEFEFEFEFEFEFEFEADFER7FFADFFADFEFEADJ#J#<#9"B# O5ADFER>ADFFADFFADADFEJ"9":%8&8"8":#9#>#?"9"8%:$J#<#B"9# 6FEFEFEFEFEFEFEFEADFEFEFEFEFEFEFEFEFEADFEFEFEADFEFEFEFEFER#FFADFFADADFEADJ'9'8"9%B#G%8&J#<#:"A# >FEFEADADFEFEFEADFEFEADADADFEADFEFEADFEFEADADFEFEADADADFER"ADFFADFFADADFEJ$C"A";#>#G"J#<#A":# 7FEADFEADADADADFEADADR,FFADFFADADFEADJ"9"J#J$J#<#;"@# 6ADADHADFE8FEFEFER#ADFFADFFADADFEJ"J#8"J%J#<#@";# 8FEJFEADFE5ADADADADR"FFADFFADADFEADJ$J">#>#B"D"J#<#<"?# 7ADFEAD6FEFEFEADFEFEFER"ADFFADFFADADFEJ'?%H#8&8%@&J#<#?"<# >ADFEFEFEFEADADFEFEADFEADADFEFEFEADADFEFEADADFEFEFEADR"FFADFFADADFEADJ#8"8#8%8#8#9&8#8#>#9$:%8"9"9$J#<#="># 4ADADADADADADADADADADADADADADADADADADADADADADADFEADADADADADADADADADADADADR#ADFFADFFADADFEJ#J#<#>"=# O5FEADR>FFADFFADADFEADJ#J#<#F# O5ADFER>ADFFADFFADFEJ#J#<#F# O5FEADR>FFADFFADFEADJ5<5 O5RBADFEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFF4ADFFADFEADFEADFEADFEADFEADFEADFEADFEADFEJ5<5 O5RBFEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFAD4FFADFEADFEADFEADFEADFEADFEADFEADFEADFEADJz=z O5RAAD3AD J5=4 Q"Q'FEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEFFADFFADFFADFFADFFADFFADFFADFFADFFADFFJ5<5 Q!Q(FEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEAD4FFADFFADFFADFFADFFADFFADFFADFFADFFADFFADJ#z"<#z" Q!ADFEQ%ADFFADFF1ADFEJ#J#<#F# Q!FEADQ$FFADFFADFEADJ#J#<#F# Q!ADFEQ$ADFFADFFADFEJ%J#8#J&H#J#8"<"J#<#9u9# 6FEFEFEFE>FEFEFEFE5FEFEFEFEFEFEFE?FEADFEFEPHFFADFFADFEFEADJ'J#J(J#?"J#<#9"B# 5FEFEADADFEFEAADAD4FEFEADADADFEFEO$ADFEADPHADFFADFFADADFEJ$8*9%8+8"8+9&D#9#8%8"8"8%8*9#>#?"8%9"9$:"J#<#B"9# 4FEFEADADFEFEADFEFEADFEFEFEFEFEFEFEFEADFEFEADFEFEFEFEFEFEADFEFEADFEFEADFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEADFEFEFEFEFEFEADFEFEADFEFEFEFEADFEFEP3FFADFFADADFEADJ,9"8)8"<*>(?)8)8*B#C%>#8#J#<#:"A# ?FEADFEFEADFEFEADADFEFEFEFEFEADADFEFEADADADFEADFEFEADFEFEADFEADFEFEFEADADADFEFEADADFEFEADADADADFEFEADADFEFEFEADADFEFEADADFEFEADFEFEADADFEADFEFEADP3ADFFADFFADADFEJ"D%E"="?&8(9%J#>#C"B%J#<#A":# ?ADADADADADADADADADFEFEFEADFEFEADFEFEADFEADADAD9ADADFEADADADFEFEADP4FFADFFADADFEADJ#;"9$J"8"?&?#J#J#<#;"@# FFEFEADFEFEFEAADFEADADFEFEFEFEFE9ADFEQ$ADFFADFFADADFEJ%<%J#8":&:"8">%J#J%J#<#@";# FADADADADFEFEADAD>FEFEADADFEFEFEADADFEADADADAD7FEAD:FEADADFEP4FFADFFADADFEADJ$8$9">#G"C"J%=":#C#>#J"8#8#J#<#<"?# 4ADFEFEFEFEADFEFEFEFEFE8FEFEADADFEFEFEFEFEADFE6FEFEADADFEP3ADFFADFFADADFEJ':,<-@%>(9";'8+J#9%B%J#<#?"<# 5ADFEFEFEFEADADFEFEADADADFEFEFEFEADADFEFEFEADFEFEADADFEFEADADFEFEADADFEFEFEFEFEADADADFEFEFEFEADADFEFEADADFEFEFEFEAD7FEADFEFEFEFEADFEFEADP;FFADFFADADFEADJ%<#9%8#:'8s8#8#@&<":%:#8%8#8#8#8#>#8&8"8"9"9':"J#<#="># 6ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADFEADADADADADADADADADADADADADADADP3ADFFADFFADADFEJ#J"J#J#<#>"=# O8FEFE4FEO FEADQ$FFADFFADADFEADJ'E$J#J#<#F# O8ADFEFEFEFEADFEFEADMADFEQ$ADFFADFFADFEJ#J%F#J#J#<#F# =ADADHADADADADADADO FEADQ$FFADFFADFEADJ5<5 Q!Q(ADFEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFF4ADFFADFEADFEADFEADFEADFEADFEADFEADFEADFEJ5<5 Q!Q(FEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFAD4FFADFEADFEADFEADFEADFEADFEADFEADFEADFEADJz=z Q!Q'AD3AD Js$ 4FEADFEFEJ' 6ADADADADADADJ#;%9%9# :FEFEFEFEFEFEFEFEFEFEFEFEJ. @FEFEADADFEFEADFEFEADADFEFEJ$F%8# 6FEFEFEFEADADADADADJ$?#9& 6ADADADFEFEADADFEFEFEJ%9"8" BADADADADADFEJ(:# DFEFEADFEFEADADFEFEJ. @ADFEFEFEFEADADADFEFEFEFEADJ#:&8%9%9# 4ADADADADADADADADADADADADADADADADAD I5 T/FEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEH5 T0FEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADH#z" ADFET-ADFFH#J# FEADT,FFADH#J# ADFET,ADFFH#J# FEADT,FFADH#J# ADFET,ADFFH#J# FEADT,FFADH#J# ADFET,ADFFH#J# FEADT,FFADH#J# ADFET,ADFFH#J# FEADT,FFADH#J# ADFET,ADFFH#J# FEADT,FFADH#J# ADFET,ADFFH#J# FEADT,FFADH#J# ADFET,ADFFH#J# FEADT,FFADH5 T0ADFEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFH5 T0FEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADHz T/AD I5?2 SCFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEFEADFEADFEADFEADFEADFEADFEADFEADFEH5=4 SEFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFFFEADFEADFEADFEADFEADFEADFEADFEADFEADFFH#z#=#r"r# ADFESAADFFADADFE98FE98FFADH#J#=#<#=# FEADSAADFFFEADFFADADFFH#J#=#<$<# ADFESAFFADADFEADFEADFFADH#J"?"J"J"C"<"J"I$B$C";$:$C"8#=#;%<# FEAD4FEFEO FE5FEFEFEO-FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFFFEADADFFADFEADFFH#J"J&@&@#;&8&@#9#=#;&;# ADFEO?ADP=FEADADADFEFEADADADFEFEFEFEADADADFEFEADADADFEFEFEFFADADFEFFADADADFEFFADH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J#J#9#=#:#8#;# FEADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFEO&ADAD;ADADADFFFEADFFADFEADADFFH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J#=#:#8$:# ADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFEOGFFADADFEADFFADFEADFFADH#?"?"A"J"G"C"A"H"J"C"9"8":"J#=#9$9#:# FEADADADAD8ADADADADAD;ADADADADADOKADFFFEADADFFADADFEADFFH):$J$9&J$=&J&@&J$<&9&@&@&J&>#=#9#;#9# ADFEADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8FEFEFEFEFEFFADADFEFFADADFEFFADH"r9%J%8&J%<&J&@&J%<&9&@&@&J&>#=#8#<#9# FEADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADADADADADADADADADADAD8ADADADADADADFFFEADFFADFEADADFFH#I"A"?"D"B"D"E"H"J#=#8#<$8# ADFEFEFEFEFEFEFEFEFEQ%FFADADFEADFFADFEADFFADH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J&@&G&8&E#='=#8# FEADADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFE4ADFEFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFFFEAD98ADFFADADFEADFFH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rI$B$C";$:$C"8#=&?& ADFEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADFFADADFE98FFADADFE98FFADH#J#=4 FEADSAADFFFEADFFADFEADFEADFEADFEADFEADFEAD98ADFFH#J#=4 ADFESAFFADADFEADFEADFEADFEADFEADFEADFEADFEADFFADH#J#=#z# FEADSAADFFFEAD/98ADFFH#J#=4 ADFESAFFADADFEADFFADFFADFFADFFADFFADFFADFFADFFADH#J#=4 FEADSAADFFFEADFFADFFADFFADFFADFFADFFADFFADFEADFFH#J#=%v% ADFESAFFADADFEADFFADFEADFFADH#J#=4 FEADSAADFFFEADFFADFEADFEADFEADFEADFEADFEADFEADFFH#J"?"J"J"C"<"J"I$B$A&8&@&8(=4 ADFE4FEFEO FE5FEFEFEO-FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFADADFEADFEADFEADFEADFEADFEADFEADFEADFFADH#J"J&@&@%:%@%:'=#z# FEADO?ADP=FEADADADFEFEADADADFEADADADADADADADADADADADADADADADADADFFFEAD/98ADFFH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J#J#=#=#E# ADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFEO)FEAD4FEADFFADADFEFFADH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J$I'=#E# FEADFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFEO-FEFEFEFEFEFEADADFFFEADADFFH#?"?"A"J"G"C"A"H"J"C"9"8":"J#9&B#9(=#E# ADFEADADAD8ADADADADAD;ADADADADADO+FEADADADADADFEFEADADADADADFEFFADADFEFFADH):$J$9&J$=&J&@&J$<&9&@&@&G&E#=#E# FEADADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFFFEADADFFH)9%J%8&J%<&J&@&J%<&9&@&@&@"<&@":#=#E# ADFEADADADADADADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADADADADADADADADADADADFEADADADADADFEFFADADFEFFADH#I"A"?"D"B"D"E"H"J#J#?#=#E# FEADFEFEFEFEFEFEFEFEP2FEAD4FEADADFFFEADADFFH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J&@&G&G(=#E# ADFEADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFE4ADFEFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFFADADFEFFADH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rI$B$B"<$B"<'=#E# FEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J"?"J"J"C"<"J"J";$C";$:$A&8)=#E# FEAD4FEFEO FE5FEFEFEO-FE4FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADFFFEADADFFH#J"J#;&@#;&8&@%:(=#E# ADFEO?ADP=FEFEFEADADADFEFEFEFEADADADFEFEADADADFEADADADADADADADADADFFADADFEFFADH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J#J#J#>#=#E# FEADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFE6ADAD4ADAD>FEADADFFFEADADFFH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J$8#=#E# ADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFEOBFEFEFEFFADADFEFFADH#?"?"A"J"G"C"A"H"J"C"9"8":"J#9)=#E# FEADADADAD8ADADADADAD;ADADADADADO@FEADADADADADFEADADFFFEADADFFH):$J$9&J$=&J&@&J$<&9&G&J&F#=#E# ADFEADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8FEFEFEFEFEFFADADFEFFADH"r9%J%8&J%<&J&@&J%<&9&G&J&@";#=#E# FEADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADADADADADAD8ADADADADADFEADFFFEADADFFH#I"A"?"D"B"D"E"H"J#@#=#E# ADFEFEFEFEFEFEFEFEFEPGFEADFFADADFEFFADH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J&G&8&G)=#E# FEADADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFE;ADFEFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADADFFFEADADFFH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rJ";$C";$:$B"<$8#=#E# ADFEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD4ADADADADADADADADADADADADADADADFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J"?"J"J"C"<"J"J"<"C$:$C";$:$8#=#E# ADFE4FEFEO FE5FEFEFEO-FE4FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFADADFEFFADH#J"J#;#C&8&@#;&8)=#E# FEADO?ADP=FEFEFEFEFEADADADFEFEADADADFEFEFEFEADADADFEFEADADADFEADADFFFEADADFFH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J#;#J#H#=#E# ADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFE6ADADADADCADADFFADADFEFFADH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J&J#=#E# FEADFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFEKADFEFEFEADEADFFFEADADFFH#?"?"A"J"G"C"A"H"J"C"9"8":"J&J#=#E# ADFEADADAD8ADADADADAD;ADADADADADO!FEADADADFEEFFADADFEFFADH):$J$9&J$=&J&@&J$<&9&G&G&J#=#E# FEADADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE7ADFFFEADADFFH)9%J%8&J%<&J&@&J%<&9&G&G&J#=#E# ADFEADADADADADADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADADADADADADADADADADAD7FFADADFEFFADH#I"A"?"D"B"D"E"H"J#=#E# FEADFEFEFEFEFEFEFEFEQ%ADFFFEADADFFH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J&8&G&8)=#E# ADFEADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFEJADFEFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFFADADFEFFADH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rJ"<"C$:$C";$:$8#=#E# FEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD4ADADADADADADADADADADADADADADADADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J"?"J"J"C"<"J"J";$C";$:$A&8)=#E# FEAD4FEFEO FE5FEFEFEO-FE4FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADFFFEADADFFH#J"J#;&@#;&8&@%:(=#E# ADFEO?ADP=FEFEFEADADADFEFEFEFEADADADFEFEADADADFEADADADADADADADADADFFADADFEFFADH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J#;"D#;"J#>#=#E# FEADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFE6ADADADADADAD8FEADADFFFEADADFFH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J#J#J$8#=#E# ADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFE?FEAD4FEAD9FEFEFEFFADADFEFFADH#?"?"A"J"G"C"A"H"J"C"9"8":"J#J#J#9)=#E# FEADADADAD8ADADADADAD;ADADADADADBFEAD4FEAD4FEADADADADADFEADADFFFEADADFFH):$J$9&J$=&J&@&J$<&9&A#:&A#A&F#=#E# ADFEADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEFEFEFEFEFFADADFEFFADH"r9%J%8&J%<&J&@&J%<&9&@#;&@#B&@";#=#E# FEADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADFEADADADADADADFEADADADADADADFEADFFFEADADFFH#I"A"?"D"B"D"E"H"J#@#=#E# ADFEFEFEFEFEFEFEFEFEPGFEADFFADADFEFFADH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J%H%8&G)=#E# FEADADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFE<FEFEFEFEFEFEFEFEADFEFEFEADADFEFEFEADADADFFFEADADFFH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rJ":&B":&9$B"<$8#=#E# ADFEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD4ADADADADADADADADADADADADADADADADADADADFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J"?"J"J"C"<"J"J"="C";$:$C";$8#=#E# ADFE4FEFEO FE5FEFEFEO-FE4FEFEFEFEFEFEFEFEFEFEFEFEFEFFADADFEFFADH#J"J#="B#;&8&@#;)=#E# FEADO?ADP=FEFEFEFEFEFEADADADFEFEADADADFEFEFEFEADADADFEADADFFFEADADFFH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J#<#B#J#A#=#E# ADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFE6ADADFEADADAD;ADADFFADADFEFFADH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J#=#E# FEADFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFEOGADFFFEADADFFH#?"?"A"J"G"C"A"H"J"C"9"8":"J#J#=#E# ADFEADADAD8ADADADADAD;ADADADADAD@FEADO)FFADADFEFFADH):$J$9&J$=&J&@&J$<&9&?#<&J&F#=#E# FEADADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFE8FEFEFEFEFEADFFFEADADFFH)9%J%8&J%<&J&@&J%<&9&@&8&J&F#=#E# ADFEADADADADADADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADFEFEFEFEFEADADADADAD8ADADADADADFFADADFEFFADH#I"A"?"D"B"D"E"H"J'J#=#E# FEADFEFEFEFEFEFEFEFEOGADADADADFEADO&ADFFFEADADFFH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J&8&G)=#E# ADFEADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFEO#ADFEFEFEADADFEFEFEADADFEFEFEADADFFADADFEFFADH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rJ"="C";$:$C";$8#=#E# FEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD4ADADADADADADADADADADADADADADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J"?"J"J"C"<"J"J"="C"=":$A&8)=#E# FEAD4FEFEO FE5FEFEFEO-FE4FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADFFFEADADFFH#J"J#="B#=":&@%:(=#E# ADFEO?ADP=FEFEFEFEFEFEFEADADADFEADADADADADADADADADFFADADFEFFADH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J#<#B#<#J#>#=#E# FEADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFE6ADADFEADADADFEAD6FEADADFFFEADADFFH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J$8#=#E# ADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFEOBFEFEFEFFADADFEFFADH#?"?"A"J"G"C"A"H"J"C"9"8":"J#J#J#9)=#E# FEADADADAD8ADADADADAD;ADADADADAD@FEAD4FEAD6FEADADADADADFEADADFFFEADADFFH):$J$9&J$=&J&@&J$<&9&?#<&?#C&F#=#E# ADFEADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEFEFEFEFEFFADADFEFFADH"r9%J%8&J%<&J&@&J%<&9&@&8&@&?&@";#=#E# FEADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADFEFEFEFEFEADADADADADFEFEFEFEFEADADADADADFEADFFFEADADFFH#I"A"?"D"B"D"E"H"J'F'H#@#=#E# ADFEFEFEFEFEFEFEFEFEOGADADADADFEADADADADADFEADFEADFFADADFEFFADH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J&G)=#E# FEADADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFEO*ADFEFEFEADADFEFEFEADADADFFFEADADFFH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rJ"="C"=":$B"<$8#=#E# ADFEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD4ADADADADADADADADADADADFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J"?"J"J"C"<"J"J":&B";$:$C";$8#=#E# ADFE4FEFEO FE5FEFEFEO-FE4FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFADADFEFFADH#J"J#;%A#;&8&@#;)=#E# FEADO?ADP=FEFEADADADADFEFEFEADADADFEFEADADADFEFEFEFEADADADFEADADFFFEADADFFH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J#>#@#;"J#A#=#E# ADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFE6ADADFEADADADAD5ADADFFADADFEFFADH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J#J#=#E# FEADFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFEO'FEAD>ADFFFEADADFFH#?"?"A"J"G"C"A"H"J"C"9"8":"J#J#J#=#E# ADFEADADAD8ADADADADAD;ADADADADADBFEAD4FEAD?FFADADFEFFADH):$J$9&J$=&J&@&J$<&9&G&A#A&F#=#E# FEADADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEADFFFEADADFFH)9%J%8&J%<&J&@&J%<&9&G&@#B&F#=#E# ADFEADADADADADADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADADADADADADFEADADADADADADFFADADFEFFADH#I"A"?"D"B"D"E"H"J#J#=#E# FEADFEFEFEFEFEFEFEFEOIFEADO(ADFFFEADADFFH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J%8&G)=#E# ADFEADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFEO$FEFEFEFEADFEFEFEADADFEFEFEADADFFADADFEFFADH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rJ";"E":&9$C";$8#=#E# FEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD4ADADADADADADADADADADADADADADADADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J"?"J"J"C"<"J"J";$C";$:$A&8)=#E# FEAD4FEFEO FE5FEFEFEO-FE4FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADFFFEADADFFH#J"J#;&@#;&8&@%:(=#E# ADFEO?ADP=FEFEFEADADADFEFEFEFEADADADFEFEADADADFEADADADADADADADADADFFADADFEFFADH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J#J#J#>#=#E# FEADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFE6ADAD4ADAD>FEADADFFFEADADFFH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J&G&J$8#=#E# ADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFE<ADFEFEFEADADFEFEFEAD9FEFEFEFFADADFEFFADH#?"?"A"J"G"C"A"H"J"C"9"8":"J&G&I#9)=#E# FEADADADAD8ADADADADAD;ADADADADAD@FEADADADFEFEADADADFEFEADADADADADFEADADFFFEADADFFH):$J$9&J$=&J&@&J$<&9&G&J&F#=#E# ADFEADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8FEFEFEFEFEFFADADFEFFADH"r9%J%8&J%<&J&@&J%<&9&G&J&@";#=#E# FEADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADADADADADAD8ADADADADADFEADFFFEADADFFH#I"A"?"D"B"D"E"H"J#@#=#E# ADFEFEFEFEFEFEFEFEFEPGFEADFFADADFEFFADH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J&G&8&G)=#E# FEADADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFE;ADFEFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADADFFFEADADFFH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rJ";$C";$:$B"<$8#=#E# ADFEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD4ADADADADADADADADADADADADADADADFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J"?"J"J"C"<"J"I$:$C"=":$C";$8#=#E# ADFE4FEFEO FE5FEFEFEO-FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFADADFEFFADH#J"J&8&@#=":&@#;)=#E# FEADO?ADP=FEADADADFEFEADADADFEFEFEFEFEADADADFEFEFEFEADADADFEADADFFFEADADFFH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J"J#<#I#A#=#E# ADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFE6AD5ADADFEADADADFFADADFEFFADH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J#J#=#E# FEADFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFE8FEADO-ADFFFEADADFFH#?"?"A"J"G"C"A"H"J"C"9"8":"J#J#J#=#E# ADFEADADAD8ADADADADAD;ADADADADAD;FEAD9FEADAFFADADFEFFADH):$J$9&J$=&J&@&J$<&9&:#A&?#C&F#=#E# FEADADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEFEFEFEFEADFFFEADADFFH)9%J%8&J%<&J&@&J%<&9&9#B&@&?&F#=#E# ADFEADADADADADADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADFEADADADADADADFEFEFEFEFEADADADADADFFADADFEFFADH#I"A"?"D"B"D"E"H"J'J#=#E# FEADFEFEFEFEFEFEFEFEP/ADADADADFEAD>ADFFFEADADFFH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J%8&J&G)=#E# ADFEADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFE5FEFEFEFEADFEFEFEAD8ADFEFEFEADADFEFEFEADADFFADADFEFFADH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rH&9$C"=":$C";$8#=#E# FEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=#E# FEADSAADFFFEADADFFH#J#=#E# ADFESAFFADADFEFFADH#J#=4 FEADSAADFFFEADFFADFFADFFADFFADFFADFFADFFADFFADFFH#J#=4 ADFESAFFADADFE98FFADFFADFFADFFADFFADFFADFFADFFADH#J"?"J"J"C"<"J"I$<"B$<":$A&8)=&t& FEAD4FEFEO FE5FEFEFEO-FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADFFFEAD98ADFFADFEAD98ADFFH#J"J&:"B&:":&@%:(='>& ADFEO?ADP=FEADADADFEFEFEADADADFEFEFEADADADFEADADADADADADADADADFFADADFE9898ADFFADFE98FFADH#@$:#;$;#:$B$:$9"9"8&9$9$A#:$=#C$A%:$9(8":$J"=#B"=#J#>#=#8#>& FEADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEADFEFEFEFEFEFEFEFEFEFEFEFEADFEFEFEFEFEFEADFEADFEADFEFEFEFEFE6ADFEADADFEAD6FEADADFFFEADFFADFE9898ADFFH#?&8%9&9%8&@&8&@#:&9#@%8&;%A&A%8&9#8'8&J#J#J$8#=#8#=#8# ADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADADFEFEADADADFEFEADFEADADADFEFEADFEADADFEFEADADADFEFEADADFEFEADADADFEFEADADFEFEADADADFEFEADFEADFEFEADFEFEADADADFE8FEAD4FEAD@FEFEFEFFADADFE98FFFEADFFADH#?"?"A"J"G"C"A"H"J"C"9"8":"J#9#E#9#J#9)=#9#;$8# FEADADADAD8ADADADADAD;ADADADADAD;FEADFEADFEADFEAD6FEADADADADADFEADADFFFEADADFFFEAD98ADFFH):$J$9&J$=&J&@&J$<&9&:#9#<&:#9#C&F#=#9$:#9# ADFEADFEFEFEFEFEFEFEFE9FEFEFEFEFEFEFEFE@FEFEFEFEFEFEFEFE;FEFEFEFEFEFEFEFEFEFE?FEFEFEFEFEFEFEFEFEFEFEFEFEFEADFEADFEFEFEFEFEFEADFEADFEFEFEFEFEFFADADFE98ADFFADFEFFADH"r9%J%8&J%<&J&@&J%<&9&9#;&8&9#;&?&@";#=#:#:#9# FEADFEADADAD9ADADADADADADADADAD@ADADADADADADADADAD;ADADADADADADADADADAD>FEADADADADADADADADADADADADADFEADFEFEFEFEFEADADADADADFEADFEFEFEFEFEADADADADADFEADFFFEADFFADFE98ADFFH#I"A"?"D"B"D"E"H"J'F'H#@#=#:#9#:# ADFEFEFEFEFEFEFEFEFEOGADADADADFEADADADADADFEADFEADFFADADFE98FFFEADFFADH#?,9&9%8&@&8&8%@&E%8&;%A&G&E'J%H%?&G)=#;':# FEADADFEFEFEADFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEADADFEFEFEADADFEFEFEADADFEFEFEADFE5FEFEFEFEFEFEFEFEADFEFEFEADADFEFEFEADADADFFFEADADFFADFEAD98ADFFH#@&8%9$9%:$B$:$:%8"9"9$9"A%:$9"9%A$A"9"9$9"9"8"8"9rH&;"A&;":$B"<$8#=#;&;# ADFEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADFFADADFE98ADFEADFEFFADH#J#=#<%;# FEADSAADFFFEADFFADFE98ADFFH#J#=#<$<# ADFESAFFADADFE98FEADFFADH#J#=#=#<# FEADSAADFFFEADAD98ADFFH5=4 SEADFEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADADFEADFFADFFADFFADFFADFFADFFADFFADFFADH5=4 SEFEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFFEADFFADFFADFFADFFADFFADFFADFFADFFADFFHz=z SEAD3AD I5 SCFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEH5 SEFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFFH#y5z#x# ADFE98PAAD98ADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADP198ADFF98FFADH#B5J%A# FEADPCFFADFE98FFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFEP1FFADFFADADFFH#@)z#J'?# ADFEADFFADFEAD98ADFFP;ADFEADP1ADFFADFFADFFFFADH#>+J#J)=# FEADFFADFFADADADFE98FFADP;ADFEP1FFADADADFFADFFADADFFH#<&8&J#J#8';# ADFEADFFADFFADFEAD98ADFFP;FEADP1ADFFADADADFFADFFFFADH#:'9&J#J#;&9# FEADFFADFFADADADADFE98FFADP;ADFEP1FFADADFFADFFADADFFH#8&<&J#J#<* ADFEADFFADFFADFEAD98ADFFP;FEADP1ADFFADADADFFADFF98FFADH)=&J#J#?' FEADFEADFEADADADADFE98FFADP;ADFEP1FFADADFEADFEADFFH)=&J#J#?' ADFE9898ADFEADFEFEAD98ADFFP;FEADP1ADFFFEADFE98FFADH#8&<&J#J#<* FEAD9898FEADFEADFE98FFADP;ADFEP1FFADFEADFEAD989898ADFFH#:'9&J#J#;&9# ADFE9898ADFEADFEFEAD98ADFFP;FEADP1ADFFFEADFE9898FFAD&C#<&8&J#J#8';#J% F7F7F7F7F7FEAD9898FEADFEADFE98FFADP;ADFEP1FFADFEADFEAD9898ADFFFF7F7F7F7&C#>+J#J)=#J& F6F6F6F6F6ADFE9898ADFEADFEAD98ADFFP;FEADP1ADFFADFEADFE9898FFADFF6F6F6F6F68$C#@5J'?#J% F9F9F9FEADPE9898FEADFE98FFADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEP1FFADFEAD9898ADFFGF9F9F9F7H#B5J%A# ADFEPC9898AD98ADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADFEADP1ADFE9898FFADH5 SEFEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFH5 SEADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADFFADIz SCAD <z"z"z 0F6F7T&F6F71F6;z8z8z 1F9T%F91F9 7z8z8z 5F7T%F74F7"J"J" F76F7T&F7 ENDBITMAP %%EndBinary 0 F (FIGURE 28) 133.57 131.32 T 1 F (- Combobox) 187.46 131.32 T 0 0 612 792 C 1 10 Q 0 X 0 0 0 1 0 0 0 K (entry \336eld which when activated will pop up the) 315 713.33 T (scrolledlistbox beneath the entry \336eld. The simple non-) 315 701.33 T (dropdown combobox permanently displays the listbox) 315 689.33 T (beneath the entry \336eld and has no arrow button. Either) 315 677.33 T (style allows an optional entry \336eld label.) 315 665.33 T 0 12 Q (Selectionbox) 395.17 634 T 1 10 Q -0.43 (The Selectionbox class combines a scrolled list of items,) 315 615.33 P (an editable entry \336eld for the selected item, and labels) 315 603.33 T (for the list and entry \336eld, allowing the user to select or) 315 591.33 T (enter one item from a list of alternatives. The Selection-) 315 579.33 T -0.32 (box also provides a child site and an option to control its) 315 567.33 P (position.) 315 555.33 T 0 12 Q (Fileselectionbox) 386.5 291.14 T 1 10 Q (The Fileselectionbox presents a \336le selector similar to) 315 266.48 T (that found in the Motif widget set. It consists of a \336le) 315 254.48 T (and directory list as well as a \336lter and selection entry) 315 242.48 T -0.25 (widget. A child site also exists which may be positioned) 315 230.48 P (at several locations via an option. An extensive option) 315 218.48 T (set is provided which enables speci\336cation of initial) 315 206.48 T (directory) 315 194.48 T (, search commands, \336lter mask, no match) 350.45 194.48 T (string, and mar) 315 182.48 T (gins.) 375.09 182.48 T 0 12 Q (Dialogshell) 399.16 151.14 T 1 10 Q (The Dialogshell class provides base class support for) 315 128.48 T (top level [incr W) 315 116.48 T (idgets] modal dialogs. This includes) 382.64 116.48 T (dialog mapping, button management, separator control,) 315 104.48 T (and a child site. The \324activate\325 command maps the dia-) 315 92.48 T -0.3 (log and waits based on the modality) 315 80.48 P -0.3 (. Non-modal dialogs) 456.45 80.48 P 315 72 540 720 C 315 319.14 540 552 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 347 540 543 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 13238 226 306 116.23 157.37 0 369.77 381 /red < 7266F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700557FFF5500B22E99FFFFB07AFFB0CC0087AFB4CD73E6A2 4DBF88F5439D58D750D080C0C080C0808060C000FFA000FF20C0A040C040D060 F0E010B499FFA0BE8BD28BD9B3FF720019BF2FFF6223852F465F4770FF0000FF > store /green < 9F99DE00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE7006B7FFF1A00B28B99FFFFB094FF30F700CEEEEE0073E6A2 4DBF88F54DB358D78080C0C080C080808060C08000A080402070A0402040D0F0 F0E010B489E4A0BE5BB477D9B3FF77FF19264F00B641DE4F829E4780FF0000FF > store /blue < FFFFB3FFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BF2F7FCC8BEEB2576BFBB3B01532602480FAEEB40073E6A2 4DBF88F556CA58D7D050C080C08080C08060C080FF0000402070C0802040D060 50E010B476C4A0BE7A8C65D9B3E0850070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7QIF6F76F6F7J" RHF78z8z8z 4F9QHF94F9 ;z" R?F7F6<z"z"z"z 0F6F7Q8F6F70F6F70F6=z8z8z8z /F9Q7F9/F9/F9 J'>$H"9#I' O0FEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEJ'?"I"J"8%Js" O/FEFEF9F9F9FEF9FE9F9F9F9FEFEO@F6F7J"J#Jr O4F9BF9F9P-F9J#8"9$?$:$8"8&:$9'D$9( O1FEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEF9FEFEFE@s"J"9#8'<08$:*8%;%8*9$J$ F6F7JF9FEFEFEFEFEF9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9F9F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEFEFEFEF9FEFEFEF9FEFEFEF9F9F9FEF9O!F6F6F7ArJ#9":"A";%C$<">&9$:&J" F9LF9F9FEFEFEF9F9F9F9F9F9F9F9F9F9F9FEFEF9F9F9F9FEFEFEF9O#F9@sJ"8#;%>%J# F7KFEF9F9F9F9F9F9F9F9F9F9P.F7F7@tJ">%>%9%C$J$:&J$ F9KFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FE7FEF9FEFEF9F9FEFEO"F9F9F9J0808&8,8"9$829" O0F9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEF9FEFEF9F9F9FEFEFEF9F9F9FEFEFEF9FEFEFEFEFEF9F9F9F9FEFEFEF9F9F9FEFEFEFEJ':$8%9$:$:r9$9z:$9rJs O/F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F90F9F9F9F9F9O/F7Jt R7F9 =z8z8z8z /F7Q7F7/F7/F7rF"J"F"F% F7F7Q8F7F7F7F7F7F7'z& F6F6F6F6F6F7R>E5F6F6F6F6F68$J% F9F9F9R@F9F9F9F7 J#8# 4FEFEFEFE J"8"8%8*9% 7FEFEFEFEFEFEFEE5FEFEFEE5FEFEFEFEFEFEFEJ"8)81 7E5E5E5FEFEE5E5FEFEFEE5E5FEFEE5E5FEFEE5FEFEE5E5FEFEJ% O"FEE5E5E5J#D& >FEFEE5E5FEFEFEJ%D"8" >E5E5E5E5E5FEJ":#B% ;FEFEFEFEFEE5E5J+B' 8E5FEFEE5E5FEFEFEFEE5E5FEFEFEFEE5J#9#8%8#8#8#8% 4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 H5>2 Q:C3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEFEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEH5=4 Q:FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFH#z"=#r"r# C3FEQ7C3FFE5FEDEFEDEFFE5H#J#=#<#=# FEC3Q6FFC3FEE5FFE5E5FFH#J#=#<$<# C3FEQ6C3FFE5FEE5FEE5FFE5H#J#=#;%<# FEC3Q6FFC3FEE5E5FFE5FEE5FFH#J#=#;&;# C3FEQ6C3FFE5FEFFE5E5E5FEFFE5H#J#=#:#8#;# FEC3Q6FFC3FEE5FFE5FEE5E5FFH#J#=#:#8$:# C3FEQ6C3FFE5FEE5FFE5FEE5FFE5H#J#=#9$9#:# FEC3Q6FFC3FEE5E5FFE5E5FEE5FFH#J#=#9#;#9# C3FEQ6C3FFE5FEFFE5E5FEFFE5H#J#=#8#<#9# FEC3Q6FFC3FEE5FFE5FEE5E5FFH#J#=#8#<$8# C3FEQ6C3FFE5FEE5FFE5FEE5FFE5H#J#='=#8# FEC3Q6FFC3FEE5DEE5FFE5E5FEE5FFH#J#=&?& C3FEQ6C3FFE5FEDEFFE5E5FEDEFFE5H#J#=4 FEC3Q6FFC3FEE5FFE5FEE5FEE5FEE5FEE5FEE5FEE5DEE5FFH#J#=4 C3FEQ6C3FFE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFE5H#J#=#z# FEC3Q6FFC3FEE5/DEE5FFH#J#=4 C3FEQ6C3FFE5FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5H#J#=4 FEC3Q6FFC3FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FEE5FFH#J#=%v% C3FEQ6C3FFE5FEE5FFE5FEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=%A% FEC3Q6FFC3FEE5FFE5E5FEE5FFH#J#=%A% C3FEQ6C3FFE5FEE5FFFEE5FFE5H#J#=4 FEC3Q6FFC3FEE5FFE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFH#J#=4 C3FEQ6C3FFE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFE5H#J#=#z# FEC3Q6FFC3FEE5/DEE5FFH#J#=4 C3FEQ6C3FFE5FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5H#J#=4 FEC3Q6FFC3FEE5DEE5FFE5FFE5FFE5FFE5FFE5FFE5FEE5FFH#J#=%v% C3FEQ6C3FFE5FEDEFFE5FEDEFFE5H#J#=&?& FEC3Q6FFC3FEE5DEDEFFFEE5DEE5FFH#J#=#8#=' C3FEQ6C3FFE5FEE5FFFEE5DEDEFFE5H#J#=#8$<#8# FEC3Q6FFC3FEE5DEE5FFE5FEE5FFH#J#=#9#<#8# C3FEQ6C3FFE5FEFFE5FEDEFFE5H#J#=#9#;#9# FEC3Q6FFC3FEE5DEFFFEE5E5FFH#J#=#:#9$9# C3FEQ6C3FFE5FEE5FFFEE5DEFFE5H#J#=#:$8#:# FEC3Q6FFC3FEE5DEE5FFE5FEE5FFH#J#=#;#8#:# C3FEQ6C3FFE5FEFFE5FEDEFFE5H#J#=#;&;# FEC3Q6FFC3FEE5DEFFE5FEE5E5FFH#J#=#<%;# C3FEQ6C3FFE5FEE5FEE5DEFFE5H#J#=#<$<# FEC3Q6FFC3FEE5DEE5FEE5FFH#J#=#=#<# C3FEQ6C3FFE5FEFEDEFFE5H5=4 Q:FEC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFH5=4 Q:C3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5Hz>z Q:E51E5 J&?#F#8# 5FEFEFEFEFEFEFEFEFEFEFEJ(J# 4FEFEE5E5E5FEFE>E5E5J%<%9%8"8%8%8& =FEFEFEFEFEFEFEFEFEFEFEFEFEFEE5FEFEFEFEFEFEFEFEE5FEFEJ/:08":'9% 4E5FEFEFEE5E5E5E5FEFEE5E5FEFEFEFEE5E5FEFEE5FEFEE5E5FEFEE5E5E5FEFEE5E5FEFEFEE5FEFEJ&J#H" 5E5E5FEFEFE7E5E5E5J"8"9#># 7E5FEFEFEFEFEJ#8";%<% 4FEFEE5E5E5E5E5E5E5E5E5J#>#;#;" @FEFEFEFEFEFEFEJ/:.8%9' 4E5FEFEFEFEFEE5E5E5FEFEFEFEE5E5FEFEFEFEE5E5E5FEFEFEFEE5E5FEFEE5E5FEFEFEFEE5J&9%8#8%9%:&8%8#8# 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 H5 R%C3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3H5 R%FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FEC3FFH#z# C3FER!C3FFC3H#J# FEC3R!C3FFH#J# C3FER!FFC3H#J# FEC3R!C3FFH#J# C3FER!FFC3H#J# FEC3R!C3FFH#J# C3FER!FFC3H#J# FEC3R!C3FFH#J# C3FER!FFC3H#J# FEC3R!C3FFH#J# C3FER!FFC3&C#J#C% F7F7F7F7F7FEC3R!C3FFF7F7F7F7&C#J#C& F6F6F6F6F6C3FER!FFC3F6F6F6F6F68$C#J#D% F9F9F9FEC3R!C3FFF9F9F9F7H#J# C3FER!FFC3H5 R%FEC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFH5 R%C3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3FFC3Hz R%E5 <z"z"z 0F6F7QIF6F71F6;z8z8z 1F9QHF91F9 7z8z8z 5F7QHF74F7"J"J" F76F7QIF7 ENDBITMAP %%EndBinary 360 354 495 372 R 7 X V 4 8 Q 0 X (selectionbox .sb) 360 366.67 T (pack .sb -padx 10 -pady 10) 360 356.67 T 0 10 Q (FIGURE 29) 371.53 329.1 T 1 F ( - Selectionbox) 422.92 329.1 T 315 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "15" 15 %%Page: "16" 16 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 1 10 Q 0 X 0 0 0 1 0 0 0 K (return control immediately) 72 465.48 T (, whereas global and applica-) 178.56 465.48 T (tion modal dialogs wait until the \324deactivate\325 command) 72 453.48 T (is invoked. The \324deactivate\325 command accepts an) 72 441.48 T (optional ar) 72 429.48 T (gument which becomes the return value of) 114.87 429.48 T (the \324activate\325 command. This provides dialog deactiva-) 72 417.48 T (tion status noti\336cation.) 72 405.48 T 0 12 Q (Dialog) 167.83 374.14 T 1 10 Q (The Dialog class is a specialized version of the Dia-) 72 351.48 T (logShell with four prede\336ned buttons tagged, \322OK\323,) 72 339.48 T (\322Cancel\323, \322Apply\323, and \322Help\323. By default the Dialog) 72 327.48 T (class provides automatic deactivation and status return) 72 315.48 T (following selection of either the \322OK\323 or \322Cancel\323 but-) 72 303.48 T (ton. The status indicator is 1 for \322OK\323 and 0 for \322Can-) 72 291.48 T (cel\323. Automatic deactivation may be disabled, enabling) 72 279.48 T (more user control over deactivation and status noti\336ca-) 72 267.48 T (tion. In this case, the user must invoke the deactivate) 72 255.48 T -0.43 (method explicitly and is free to pass a status return value) 72 243.48 P (as needed.) 72 231.48 T 0 12 Q (Messagedialog) 147.17 200.14 T 1 10 Q (The Messagedialog class provides a bitmap and mes-) 72 181.48 T (sage text within a dialog context. Options control the) 72 169.48 T (position of the bitmap and message. All the standard) 72 157.48 T (dialog control options are also available.) 72 145.48 T 72 472.14 297 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 501 297 718.71 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 31814 365 317 187.71 163.03 0 90 543.43 /red < 7266F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700557FFF5500B22E99FFFFB07AFFB0CC0087AFB4CD73E6A2 4DBF88F5439D58D750D080C0C080C0808060C000FFA000FF20C0A040C040D060 F0E010B499FFA0BE8BD28BD9B3FF720019BF2FFF6223852F465F4770FF0000FF > store /green < 9F99DE00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE7006B7FFF1A00B28B99FFFFB094FF30F700CEEEEE0073E6A2 4DBF88F54DB358D78080C0C080C080808060C08000A080402070A0402040D0F0 F0E010B489E4A0BE5BB477D9B3FF77FF19264F00B641DE4F829E4780FF0000FF > store /blue < FFFFB3FFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BF2F7FCC8BEEB2576BFBB3B01532602480FAEEB40073E6A2 4DBF88F556CA58D7D050C080C08080C08060C080FF0000402070C0802040D060 50E010B476C4A0BE7A8C65D9B3E0850070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7TJF6F76F6F7J" UIF78z8z8z 4F9TIF94F9 ;z" U@F7F6<z"z"z"z 0F6F7T9F6F70F6F70F6=z8z8z8z /F9T8F9/F9/F9 Js8#8$@'>$H"9#I' P:FEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEJ"8$>"A'?"I"J"8%Js" P:F9F9F9F9F9FEFEF9F9F9FEF9FE9F9F9F9FEFEPJF6F7J"9#I"J#Jr P@F9F9F9F9BF9F9Q7F9J"9$?$:#8"9$?$:$8"8&:$9'D$9( P?FEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEF9FEFEFE@s"J#8$?)9#8'<08$:*8%;%8*9$J$ F6F7P*FEFEF9F9F9FEFEFEF9FEFEF9F9FEFEFEFEFEF9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9F9F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEFEFEFEF9FEFEFEF9FEFEFEF9F9F9FEF9P+F6F6F7ArJ#G":#9":"A";%C$<">&9$:&J" F9P+F9F9FEF9F9FEFEFEF9F9F9F9F9F9F9F9F9F9F9FEFEF9F9F9F9FEFEFEF9P-F9@sJ"E'8#;%>%J# F7P-F9F9F9F9F9F9FEF9F9F9F9F9F9F9F9F9F9Q8F7F7@tJ%8">%>%9%C$J$:&J$ F9P<FEF9FEFEFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FE7FEF9FEFEF9F9FEFEP,F9F9F9J"8";"8$8)80808&8,8"9$829" P:FEFEFEFEF9FEFEF9F9F9FEFEFEF9F9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEF9FEFEF9F9F9FEFEFEF9F9F9FEFEFEF9FEFEFEFEFEF9F9F9F9FEFEFEF9F9F9FEFEFEFEJ%;t9$8':$8%9$:$:r9$9z:$9rJs P:F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F90F9F9F9F9F9P9F7Jt U8F9 =z8z8z8z /F7T8F7/F7/F7rF"J"F"F% F7F7T9F7F7F7F7F7F7'z& F6F6F6F6F6F7U?E5F6F6F6F6F68$J% F9F9F9UAF9F9F9F7 Js$8# 4FEE5FEFEFEFEJ' 6E5E5E5E5E5E5J#:"8"8%8& :FEFEFEFEFEFEFEFEFEFEE5FEFEJ"8)9" @E5E5E5FEFEE5E5FEFEFEJ$J# 6FEFEFE6E5E5J$D#;" 6E5E5E5FEFEE5J% GE5E5E5E5J":# DFEFEFEJ+ AE5FEFEE5E5FEFEFEFEE5J#:&9#8%8# 4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 H5 U&FFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEH5 U&FEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFH#Z FFFEU#H# FEFFH#:":&9$>"E$<$J"J"J"9"C"=#J"B$8#A":#J" FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECFEBFEO"FEFEFEFEFEGFEFEFEFEFEFEFEFEFECFEH#8#<%8&<#E#<%G"F#J#J#9"C"="H"I#B(A#:"J#9" FEFFFEFEFFFFFFFFFEFFFFFFFEFEFFFFFFFEFFFFFFFEFEFFAFEFFO!FEFFFFFFFFFEFEFEFEFFFFFFFEFFFFFEFFFFCFEFFFEH#8#J# FFFEFFFFS&FFFFH#J)8#8#?&9$9&8&9$<):$9&9$<#9$:$8&8&:$8&<#8$9,;$:&8$9&9$J$<#9$:$8&:$:$<#8& FEFF:FEFFFFFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFE@FEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEH#@$9"8#>)9"@&8&8&8&8&>'8&8&8&?&848-?#:+;%9-8&8&J%?%9-8&8&?& FFFEFEFEFEFFFEFFFFFEFFFEFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFEFFFEFFFEFEFFFFFFFEFFFEFFFFFFFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFFFEFFFEFFFEFFFFFEFFFEFFFEFEFFFFFFFEFFFFFEFEFFFFFEFFFFFFFEFFFFFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFFFFFFFEFFFEFFFFFFFEFFFFFFFE?FFFFFFFEFEFFFFFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFFFEFFFFH#?&:#;#J$G&:#A$D":#="J"=#B"J$@&8&J#A$G&:#:$ FEFFFFFFFFFFFEFEFFFEFF@FEFEFEFFFEFEFEFFFEFFFEFEFEFFFEFFFF?FFFEFFFE:FEFEFEFFFEFEFEFFFEFEFEFEFE@FEFFFEFEFEFFFEFEFEFFFEFFFEFFFEH#G#J%G%G%J%@%8PJ%G%@$ FFFEFEFFHFFFFFFFFFFFFFFFEFFFFFFFFP0FFFFFFFFFFFFFFFEMFFFFFFFFFFFFFFFEFFFFFFH#>"=#8"9#J"D$=#E"C"9#>"J#A&J"=$J#E"F"=# FEFFFEFEFFFEFEFFDFEFEFFFEFEFFFEFEFEFFFEFFEFFFFFEFFFEFF;FEFEFFFEJFEFFFEFEFEFFH#8-9$?";59&8%:,>";(8%9&?&8(;#;,9">&?&8,9&9,?&9";-?/;(8& FFFEFEFEFEFEFEFFFFFEFEFEFEFFFEFEFEFE4FEFFFFFEFEFEFFFEFFFEFEFEFEFEFEFFFEFEFEFEFFFEFEFEFFFEFEFEFEFFFEFEFEFFFFFFFEFEFEFFFEFEFFFFFEFEFEFFFEFEFEFEFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFFFEFFFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFH#8P8%9P8#:R8Z:$9%;$9$9#:R8$9%:$9#<$:$8Y8$8$8&;P9$9P9P8$:$;$9$@P9"<$8P9#<P8$8R8$:$9# FEFFFFFFFFFFFEFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFEFFH#J"J"J"J"J"J" FFFE7FFO0FFBFFO"FFP%FFIFFH#J% FEFFR6FEFEFEFFH#J$ FFFER6FFFFFFH# FEFFH" FFHz U&E5 J&9#J#D#Js$ 4FEFEFEFEFEFEFE5FEFEFEFEP>FEE5FEFEJ%8#J#J' 6E5E5FEFEE5E5EE5E5P@E5E5E5E5E5E5J29%8"8"8%8(8%9%J#;%9% 8E5FEFEE5FEFEE5FEFEE5FEFEE5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5FEFEFEFEFEFEFEFEFEFEFEFEP7FEFEFEFEFEFEFEFEFEFEJ"808)9";.J. AFEFEFEE5E5FEFEE5FEFEE5E5FEFEE5E5E5E5FEFEE5E5FEFEFEFEFEE5E5FEFEE5FEFEE5E5FEFEP<FEFEE5E5FEFEE5FEFEE5E5FEFEJ#A#F#B%J$F% BE5E5E5E5E5E5FEE5E5E5P2FEFEFEFEE5E5E5J":#J"=#9&J$?#9& AE5FEFE8E5FEFEE5E5FEFEFEP3E5E5E5FEFEE5E5FEFEFEJ%J%9"8"J%9"8" FE5E5E5E5>E5E5E5E5E5FEP>E5E5E5E5E5FEJ$C#;#;"I(J( 8FEFEE5FEFEFEFEFEFEFEE5FEFEE5E5PBFEFEE5FEFEE5E5J%@.8+?.J. 6FEFEFEE5E5FEFEFEFEE5E5E5FEFEFEFEE5E5FEFEE5E5FEFEFEFEE5E5FEFEFEFEE5E5E5FEFEFEFEE5P<E5FEFEFEFEE5E5E5FEFEFEFEE5J&9&:%9%:#8%8#9#8%9%J#:&8%9% 4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5P1E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 H5>2C5>2 PIFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEPHFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEH5>4B5=4 PHFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFPHFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFH5?#r"r#B#Z>#r"r# PGFFFEDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEE5FEDEFEDEFFE5FFFEPEE5FEDEFEDEFFE5H#z"?#<#=#B#J#<#=# FEFFPDDEFEFEE5FFE5E5FFFEFFPMFEE5FFE5E5FFH#J"B$8#A":#J"J"?#<$<#B#J"J#<$<# FFFE8FEFEFEFEFEFEFEFEFECFE>DEE5FEE5FEE5FFE5FFFE4FEP8E5FEE5FEE5FFE5H#8"I#B(A#:"J#J"?#;%<#B#I(A"<"H&J#;%<# FEFFFEFEFEFEDEDEDEFEDEDEFEDEDECFEDE>FEFEE5E5FFE5FEE5FFFEFFFEFFFEFEFEFEFEFEFEFEFEFEFEFEO7FEE5E5FFE5FEE5FFH#J#J"?#;&;#B#J'J'J#;&;# FFFE6DEDEP,DEE5FEFFE5E5E5FEFFE5FFFE5FFFEFFFFFFFEDFFFEFFFFFFFEO6E5FEFFE5E5E5FEFFE5H)9$J$<#9$:$8&:$:$<#J"?#:#8#;#B#8$:$<#>#8#8&8&9$8&A$8(J#:#8#;# FEFFDEFEFEFEFEFEFEFEFE@FEFEFEFEDEFEFEFEFEFEFEFEFEFEDEFEFEFEFEFEFEFEFEDE?FEFEE5FFE5FEE5E5FFFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEO'FEE5FFE5FEE5E5FFH)8&J%?%9-8&8&J"?#:#8$:#B)8&@'9"9&8&8-9%8)9#J#:#8$:# FFFEDEDEFEDEDEDEFEDEDEDEFE?DEDEDEFEFEDEDEDEFEDEDEDEFEDEDEFEDEFEDEFEFEDEDEDEFEFEDEDEDEFEFDEE5FEE5FFE5FEE5FFE5FFFEFFFEFFFFFFFEFEFFFFFFFEFEFEFEFFFFFFFFFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFEFEFEFFFEFFFFFFFEFFFFFFFFFFO'E5FEE5FFE5FEE5FFE5H#>&8&J#A$G&:#J"?#9$9#:#B#>&:#:%J"<%@$J#9$9#:# FEFFDEFEFEFEDEFEFEFEFEFE@FEDEFEFEFEDEFEFEFEDEFEDE@FEFEE5E5FFE5E5FEE5FFFEFFFFFEFEFEFFFEFFFFFFFFFE?FFFFFFFFFEFFFEFFO)FEE5E5FFE5E5FEE5FFH#?%8&J%G%J"?#9#;#9#B#?%J$J#9#;#9# FFFEDEDEDEFEDEDEDEDEDEMDEDEDEDEDEDEDEFEFDEE5FEFFE5E5FEFFE5FFFEFFFFFFFEO4FEFFFEO)E5FEFFE5E5FEFFE5H#<$J#E"F"=#J"?#8#<#9#B#>"=#J"<"J&J#8#<#9# FEFFFEDEFEJFEDEFEFEFEDEAFEFEE5FFE5FEE5E5FFFEFFFEFEFF7FEFE=FEFFFFFFFEO(FEE5FFE5FEE5E5FFH#8,?&9";-?/;(8&@"J"?#8#<$8#B)8&>'8'8&809(8(;"J#8#<$8# FFFEDEFEFEFEDEDEDEFEFEFEDEFEFEFEFEFEFEDEFEFEFEDEDEFEDEFEFEFEDEDEFEFEFEDEFEDEDEFEFEFEDEDEFEFEDEDEFEFEFEDEDEFEFEFEDEFE;DEE5FEE5FFE5FEE5FFE5FFFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFFFEFEFEFFFEFFFEFEFEFFFFFEFEFEFFFFFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEO'E5FEE5FFE5FEE5FFE5H#9$9$@&9"<$8&9#<&8$8r8$:$9#<"J"?'=#8#B#8$:$9#:P:P9$:$9$8$8R:$8#9#J'=#8# FEFFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEDEDE;FEFEE5DEE5FFE5E5FEE5FFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFO'FEE5DEE5FFE5E5FEE5FFH#J"J"J"?&?&B#E"J&?& FFFEO$DEIDECDEE5FEDEFFE5E5FEDEFFE5FFFEFFP=E5FEDEFFE5E5FEDEFFE5H#J"?4B#J4 FEFFPDFEFEE5FFE5FEE5FEE5FEE5FEE5FEE5FEE5DEE5FFFEFFPMFEE5FFE5FEE5FEE5FEE5FEE5FEE5FEE5DEE5FFH#J"?4B#J4 FFFEPDDEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFE5FFFEPME5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFE5H5?#z#B#J#z# PGFEFFFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEFEE5/DEE5FFFEFFPMFEE5/DEE5FFH#Z?4B#J4 FFFEPEE5FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFFEPME5FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5H#J4B#J4 FEFFQ FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FEE5FFFEFFPMFEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FEE5FFH#J"B$8#A":#J"J%v%B#J"@"A$J%v% FFFE8FEFEFEFEFEFEFEFEFECFEHE5FEE5FFE5FEE5FFE5FFFE4FEFEFEFEFEOME5FEE5FFE5FEE5FFE5H#8"I#B(A#:"J#J%A%B#I(;"A#J%A% FEFFFEFEFEFEFFFFFFFEFFFFFEFFFFCFEFFHFEE5FFE5E5FEE5FFFEFFFEFFFEFEFEFEFEFFFFFFP FEE5FFE5E5FEE5FFH#J#J%A%B#J'J%A% FFFE6FFFFP6E5FEE5FFFEE5FFE5FFFE5FFFEFFFFFFFEP2E5FEE5FFFEE5FFE5H)9$J$<#9$:$8&:$:$<#J%A%B#8$:$<#?$:%A$:&J%A% FEFFFFFEFEFEFEFEFEFEFE@FEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFIFEE5FFE5E5FEE5FFFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEO<FEE5FFE5E5FEE5FFH)8&J%?%9-8&8&J%A%B)8&F#;&?&8'J%A% FFFEFFFFFEFFFFFFFEFFFFFFFE?FFFFFFFEFEFFFFFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEO"E5FEE5FFFEE5FFE5FFFEFFFEFFFFFFFEFEFFFFFFFEFFFFFFFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFO<E5FEE5FFFEE5FFE5H#>&8&J#A$G&:#J%A%B#>&:#H$J%A% FEFFFFFEFEFEFFFEFEFEFEFE@FEFFFEFEFEFFFEFEFEFFFEFFJFEE5FFE5E5FEE5FFFEFFFFFEFEFEFFFEFFFEFEFEP%FEE5FFE5E5FEE5FFH#?%8PJ%G%J%A%B#?%J%J%A% FFFEFFFFFFFEMFFFFFFFFFFFFFFFEO"E5FEE5FFFEE5FFE5FFFEFFFFFFFE7FEFFFFFFP%E5FEE5FFFEE5FFE5H#<$J#E"F"=#J%A%B#>"=#J%A% FEFFFEFFFEJFEFFFEFEFEFFKFEE5FFE5E5FEE5FFFEFFFEFEFFP;FEE5FFE5E5FEE5FFH#8,?&9";-?/;(8&@"<"J%A%B)8&>'8&848%J%A% FFFEFFFEFEFEFFFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFFFEFFFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFE>E5FEE5FFFEE5FFE5FFFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFEFEFFFEFEFEFFFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEO>E5FEE5FFFEE5FFE5H#9$9$@P9"<$8P9#<P8$8R8$:$9#<"<"J%A%B#8$:$9#:P9P9W8$:$J%A% FEFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFEFFFFFF>FEE5FFE5E5FEE5FFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFO>FEE5FFE5E5FEE5FFH#J"J"J%A%B#E"J%A% FFFEO$FFIFFME5FEE5FFFEE5FFE5FFFEFFP=E5FEE5FFFEE5FFE5H#J%A%B#J%J%A% FEFFQ FEE5FFE5E5FEE5FFFEFFO,FEFEFEFFO=FEE5FFE5E5FEE5FFH#J%A%B#J$J%A% FFFEQ E5FEE5FFFEE5FFE5FFFEO,FFFFFFO>E5FEE5FFFEE5FFE5H#J%A%B#J%A% FEFFQ FEE5FFE5E5FEE5FFFEFFPMFEE5FFE5E5FEE5FFH#J%A%B#J%A% FFFEQ E5FEE5FFFEE5FFE5FFFEPME5FEE5FFFEE5FFE5H#J%A%B#J%A% FEFFQ FEE5FFE5E5FEE5FFFEFFPMFEE5FFE5E5FEE5FFH#J"B$8#A":#J"J%A%B#J"@"A$J#C$:$J%A% FFFE8FEFEFEFEFEFEFEFEFECFEHE5FEE5FFFEE5FFE5FFFE4FEFEFEFEFE8FEFEFEFEFEFEFEFEJE5FEE5FFFEE5FFE5H#8"I#B(A#:"J#8$8(8%J%A%B#I(;"A#J'D#;#J%A% FEFFFEFEFEFEFFFFFFFEFFFFFEFFFFCFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFE4FEE5FFE5E5FEE5FFFEFFFEFFFEFEFEFEFEFFFFFF4FEFEFEFEFFFFFFFFFFFFKFEE5FFE5E5FEE5FFH#J#J3J%A%B#J'J%J%A% FFFE6FFFFO=FEFFFFFFFEFFFFFEFFFFFFFEFFFFFEFFFFFF5E5FEE5FFFEE5FFE5FFFE5FFFEFFFFFFFEEFEFFFFFFO7E5FEE5FFFEE5FFE5H)9$J$<#9$:$8&:$:$<#J"J%A%B#8$:$<#?$:%A$:&;":#:$J%A% FEFFFFFEFEFEFEFEFEFEFE@FEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFF4FF4FEE5FFE5E5FEE5FFFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFFFEFEFEFEFEO)FEE5FFE5E5FEE5FFH)8&J%?%9-8&8&C"9$:#J%A%B)8&F#;&?&8'8#;%8&J%A% FFFEFFFFFEFFFFFFFEFFFFFFFE?FFFFFFFEFEFFFFFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFEFFFEFEFE6E5FEE5FFFEE5FFE5FFFEFFFEFFFFFFFEFEFFFFFFFEFFFFFFFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFEFEFEFFFFFEFEFFFFFFFEO(E5FEE5FFFEE5FFE5H#>&8&J#A$G&:#@"9"8&J%A%B#>&:#H$J&9"<$J%A% FEFFFFFEFEFEFFFEFEFEFEFE@FEFFFEFEFEFFFEFEFEFFFEFFFFFFFFFFFEFEFE4FEE5FFE5E5FEE5FFFEFFFFFEFEFEFFFEFFFEFEFE8FFFFFEFEFEFFFEFEFEO)FEE5FFE5E5FEE5FFH#?%8PJ%G%C"A#J%A%B#?%J%J#A%J4 FFFEFFFFFFFEMFFFFFFFFFFFFFFFEFEFFFF5E5FEE5FFFEE5FFE5FFFEFFFFFFFE7FEFFFFFF:FFFFFFFFFFFFO(E5FEE5FFE5FEE5FEE5FEE5FEE5FEE5FEE5FFE5H#<$J#E"F"=#C":"J%A%B#>"=#J"G"J4 FEFFFEFFFEJFEFFFEFEFEFFFEFE8FEE5FFE5E5FEE5FFFEFFFEFEFFO FEFEO(FEE5FFE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFH#8,?&9";-?/;(8&?&9$:%J%A%B)8&>'8&848%:38.J#z# FFFEFFFEFEFEFFFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFFFEFFFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFFFEFEFEFF4E5FEE5FFFEE5FFE5FFFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFEFEFFFEFEFEFFFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEGE5FE/DEFFE5H#9$9$@P9"<$8P9#<P8$8R8$:$9#<$;":%J%A%B#8$:$9#:P9P9W8$:$9%8R8$9XJ#E# FEFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFF5FEE5FFE5E5FEE5FFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFGFEE5E5FFH#J"J"J%A%B#E"J#E# FFFEO$FFIFFME5FEE5FFFEE5FFE5FFFEFFP=E5FEFFE5H#J%A%B#J%J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFO,FEFEFEFFO=FEE5E5FFH#J%A%B#J$J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEO,FFFFFFO>E5FEFFE5H#J%A%B#J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFPMFEE5E5FFH#J%A%B#J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEPME5FEFFE5H#J%A%B#J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFPMFEE5E5FFH#J%A%B#J"J"A$=#J#E# FFFEQ E5FEE5FFFEE5FFE5FFFE4FEMFEFEFEFEFEFEO!E5FEFFE5H#J%A%B#I)@"H':"A#>"J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFO"FEE5E5FFH#J%A%B#J&J&J#E# FFFEQ E5FEE5FFFEE5FFE5FFFE5FFFEFFFFFF>FFFEFFFFFFO>E5FEFFE5H#J%A%B#8$:$<#:*9&8.9":$;$A$J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFEFEFEFEFEFEFEFFFEFFFFFFFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEO"FEE5E5FFH#J%A%B)8&@":'8&8#P'8"8"8#;&?%J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEFFFEFFFFFFFEFEFFFFFFFEFEFFFEFEFFFFFEFFFEFFFFFFFFFEFEFFFFFFFEFFFEFFFFFFFEFFFFFFFEFEFFFFFFO"E5FEFFE5H#J%A%B#>&:#:"<"J"C$J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFFFEFEFEFFFEFFFFFF;FFFEFEFEO0FEE5E5FFH#J%A%B#?%A"J&:"B%J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEFFFFFFFEFF9FFFEFFFEFFFFFFFFFFFFO/E5FEFFE5H#J%A%B#>"=#>"D"@"J"J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFEFEFFFEFEFE6FEO/FEE5E5FFH#J%A%B)8&>&8$9"8+:$8%:&8&8.J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFFFFFEFEFEFEFFFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFEFEFEFEFEFFFFFEFEFEFFFEO E5FEFFE5H#J%A%B#8$:$9#:U8#9$8%?%:P9$9Q8PJ#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFO FEE5E5FFH#J%A%B#E"J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEFFP=E5FEFFE5H#J%A%B#J$J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFO$FEFEFFOFFEE5E5FFH#J%A%B#J#J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEO$FFFFOGE5FEFFE5H#J%A%B#J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFPMFEE5E5FFH#J%A%B5@#E# FFFEQ E5FEE5FFFEE5FFE5PEFFFEDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEE5FEFFE5H#J%A%B#z?#E# FEFFQ FEE5FFE5E5FEE5FFFEFFPDDEFEE5E5FFH#J%A%B#J"@":$J$J"J#E# FFFEQ E5FEE5FFFEE5FFE5FFFE4FEFEFEFEFE9FEFEFE;FEJE5FEFFE5H#J%A%B#I):":#C%?#J"="G&J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFEDEFEFEFEFEFEFEDEDEDEFEFEFEFEDEDE4FEDEFEFEFEFEFE4FEE5E5FFH#J%A%B#J&J%J'I#E# FFFEQ E5FEE5FFFEE5FFE5FFFE5DEFEDEDEDE8FEDEDEDEO,DEFEDEDEDEFEE5FEFFE5H#J%A%B#8$:$<#:":$B$="9$A$:$9&8$;$8&A$8#?#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFEFEFEFEFEFEFEDEFEFEFEFEFEFEFEDEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEFEFEFEFEFEFEFEFEFEE5E5FFH#J%A%B)8&@"8"8#B&9#:&?&8&8&8#;-9%8)?#E# FFFEQ E5FEE5FFFEE5FFE5FFFEDEFEDEDEDEFEFEDEDEDEFEFEDEDEDEFEDEDEDEFEFEFEFEDEDEDEFEFEDEDEDEFEFEDEDEDEFEDEFEDEDEDEDEDEFEDEDEDEFEDEDEFEFEDEDEFEFEFEFEDEFEDEDEDEFEDEDEDEE5FEFFE5H#J%A%B#>&:#:"J$9&9$A$="J"<%I#E# FEFFQ FEE5FFE5E5FEE5FFFEFFDEFEFEFEDEFEDEDE4FEFEFEDEDEFEFEFEFEFEFEFEFEFEDE8DEDEDEDEFEFEE5E5FFH#J%A%B#?%A"I%:#:%@%J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEDEDEDEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEO/E5FEFFE5H#J%A%B#>"=#J"8"@"C"<"="J"?#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFEFEDE=FEFEFEFEFEFEDFEFEE5E5FFH#J%A%B)8&>%:&8-9%8&8-8&9,8*9(8(@#E# FFFEQ E5FEE5FFFEE5FFE5FFFEDEDEFEFEFEDEDEFEFEFEDEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEDEFEFEFEDEFEFEFEDEDEFEFEFEDEFEFEFEFEFEFEDEDEFEFEFEDEDEFEFEFEDEDEFEFEFEDEDEFEFEFEFEFEDEFEFEFEDEDEFEFEFEFEFEFEFEFEFEDEDEFEFEFEDEDEFEE5FEFFE5H#J%A%B#8$:$9#:%:&8'8$9%:$9'8$:$;$8&9$8$8r:$8#?#E# FEFFQ FEE5FFE5E5FEE5FFFEFFDEDEDEDEDEDEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEE5E5FFH#J%A%B#E"J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEDEP=E5FEFFE5H#J%A%B#J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFPMFEE5E5FFH#J%A%B#J#E# FFFEQ E5FEE5FFFEE5FFE5FFFEPME5FEFFE5H#J%A%B5@#E# FEFFQ FEE5FFE5E5FEE5FFPEFEFFFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEFEE5E5FFH#J%A%B#Z?#E# FFFEQ E5FEE5FFFEE5FFE5FFFEPDE5FEFFE5H#J%A%B#J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFPMFEE5E5FFH#J%A%B#J"@":$J$J"J"D#E# FFFEQ E5FEE5FFFEE5FFE5FFFE4FEFEFEFEFE9FEFEFE;FE;FEE5FEFFE5H#J%A%B#I):":#C%?#J"="G&;"D#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFEFFFEFEFEFEFEFEFFFFFFFEFEFEFEFFFF4FEFFFEFEFEFEFEFFFEE5E5FFH#J%A%B#J&J%J'I#E# FFFEQ E5FEE5FFFEE5FFE5FFFE5FFFEFFFFFF8FEFFFFFFO,FFFEFFFFFFFEE5FEFFE5H#J%A%B#8$:$<#:":$B$="9$A$:$9&8$;$8&@$:"?#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEE5E5FFH#J%A%B)8&@"8"8#B&9#:&?&8&8&8#;-?#;"?#E# FFFEQ E5FEE5FFFEE5FFE5FFFEFFFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFFFFFEFEFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFEFFFFFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFFFFFFE5FEFFE5H#J%A%B#>&:#:"J$9&9$A$="J"J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFFFEFEFEFFFEFFFF4FEFEFEFFFFFEFEFEFEFEFEFEFEFEFF8FF=FEE5E5FFH#J%A%B#?%A"I%:#:%@%J"?#E# FFFEQ E5FEE5FFFEE5FFE5FFFEFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFO%FEE5FEFFE5H#J%A%B#>"=#J"8"@"C"<"="J#E# FEFFQ FEE5FFE5E5FEE5FFFEFFFEFEFF=FEFEFEFEFEFEO FEE5E5FFH#J%A%B)8&>%:&8-9%8&8-8&9,8*9(8&8"?#E# FFFEQ E5FEE5FFFEE5FFE5FFFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFFE5FEFFE5H#J4B#8$:$9#:%:P8Q8$9%:$9Q8$:$;$8P9$8$8R9PB#E# FEFFQ FEE5FFE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE5E5FFH#J4B#E"J#E# FFFEQ E5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFE5FFFEFFP=E5FEFFE5H#J#z#B#J#E# FEFFQ FEE5/DEE5FFFEFFPMFEE5E5FFH#J4B#J4 FFFEQ E5FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFFEPME5FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5H#J4B#J4 FEFFQ FEE5DEE5FFE5FFE5FFE5FFE5FFE5FFE5FEE5FFFEFFPMFEE5DEE5FFE5FFE5FFE5FFE5FFE5FFE5FEE5FFH#J%v%B#J%v% FFFEQ E5FEDEFFE5FEDEFFE5FFFEPME5FEDEFFE5FEDEFFE5H#J&?&B#J&?& FEFFQ FEE5DEDEFFFEE5DEE5FFFEFFPMFEE5DEDEFFFEE5DEE5FFH#J#8#='B#J"D#C$D#A"=#J#8#=' FFFEQ E5FEE5FFFEE5DEDEFFE5FFFE4FEFEFEFEFEFEFEFEFEFEFEO!E5FEE5FFFEE5DEDEFFE5H#J#8$<#8#B#I&A"D#E"8(9"="H"J#8$<#8# FEFFQ FEE5DEE5FFE5FEE5FFFEFFFEFFFEFEFEFFFFFFFFFEFEFEFFFEFEFEFFFFFE=FEE5DEE5FFE5FEE5FFH#J#9#<#8#B#J$J(J#9#<#8# FFFEQ E5FEFFE5FEDEFFE5FFFE5FFFEFFO FFFEFFFFFFFEFFO.E5FEFFE5FEDEFFE5H#J#9#;#9#B#8$:$<#?%:$:$A$:$;":$;$:&8$9&J#9#;#9# FEFFQ FEE5DEFFFEE5E5FFFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFE:FEE5DEFFFEE5E5FFH#J#:#9$9#B)8&F&9%8&?&8%@#;%9-8&J#:#9$9# FFFEQ E5FEE5FFFEE5DEFFE5FFFEFFFEFFFFFFFEFEFFFFFFFEFFFFFFFFFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFFFFFFFEFFFEFFFFFF:E5FEE5FFFEE5DEFFE5H#J#:$8#:#B#>&:#A$A$A$J$J#:$8#:# FEFFQ FEE5DEE5FFE5FEE5FFFEFFFFFEFEFEFFFEFFFEFEFEFEFEFEFEFEFEGFEFEFEBFEE5DEE5FFE5FEE5FFH#J#;#8#:#B#?%C"8%A%@%@$J%J#;#8#:# FFFEQ E5FEFFE5FEDEFFE5FFFEFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFEFFFE9FFFFFFFFAE5FEFFE5FEDEFFE5H#J#;&;#B#>"=#J"C"?"9"J"="J#;&;# FEFFQ FEE5DEFFE5FEE5E5FFFEFFFEFEFF=FEFEFFFF;FEFE9FEE5DEFFE5FEE5E5FFH#J#<%;#B)8&>&9-8&8-8'>&8,9&9&J#<%;# FFFEQ E5FEE5FEE5DEFFE5FFFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFFFEFEFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFF9E5FEE5FEE5DEFFE5H#J#<$<#B#8$:$9#:Q9U:$9Q8$:P8$9P9P8$:$;$J#<$<# FEFFQ FEE5DEE5FEE5FFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FEE5DEE5FEE5FFH#J#=#<#B#E"J#=#<# FFFEQ E5FEFEDEFFE5FFFEFFP=E5FEFEDEFFE5H#J4B#J"J4 FEFFQ FEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFFEFFP$FFHFEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFH"J4B"J4 FFQ!E5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFQ E5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5Hz>zCz>z PIE51E5PHE51E5 I5J5 PGFEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEHPGFEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEH5J5 PIFEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFFPHFEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5H#y"z5x#J#y"z5x# E5FEDEE5O:DE=FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5DEE5FFDEFFE5FE5FEDEE5O9DE=E5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5DEDEDEDEDEDEFFE5DEE5FFH#B$J5A#J#B$J5<%A# FEE5FFE5FEO:?E5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FEDEFFE5FFE5E5FFFFEE5FFE5FEO95FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FEE5FFE5FFFFE5H#@&J"z*?#J#@&J#z#<'?# E5FEE5FFE5FEE5O:FF7E5FEE5DEE5FFE5FFE5FFFFE5FE5FEE5FFE5FEE5O9E5FF1E5FEE5FFE5FFE5FFE5E5FFH#>(J#J,=#J#>(J#G#<)=# FEE5FFE5FFE5E5E5FEO:E5FF6E5FEDEFFE5E5E5FFE5FFE5E5FFFFEE5FFE5FFE5E5E5FEO9FFE5E5FEE5FFE5E5E5FFE5FFFFE5H#<&8#J#J&8';#J#<&8#J#G#<#9&;# E5FEE5FFE5FFE5FEE5O:FFE56FEE5DEE5FFE5E5E5FFE5FFFFE5FE5FEE5FFE5FFE5FEE5O9E5FFFEE5FFE5E5FFE5FFE5E5FFH#:'9#J#J&;&9#J#:'9#J#G#<#:'9# FEE5FFE5FFE5E5E5E5FEO:E5FF6E5FEDEFFE5E5FFE5FFE5E5FFFFEE5FFE5FFE5E5E5E5FEO9FFE5E5FEE5FFE5E5E5FFE5FFFFE5H#8&<#J#J&<*J#8&<#J#G#<#=) E5FEE5FFE5FFE5FEE5O:FFE56FEE5DEE5FFE5E5E5FFE5FFDEFFE5FE5FEE5FFE5FFE5FEE5O9E5FFFEE5FFE5E5FFE5FFE5DEE5FFH)=#J#J&?'J)=#J#G#<#>( FEE5FEE5FEE5E5E5E5FEO:E5FF6E5FEDEFFE5E5FEE5FEE5FFFFEE5FEE5FEE5E5E5E5FEO9FFE5E5FEE5FFE5FEE5FEE5FFE5H)=#J#J&?'J)=#J#G#<#>( E5FEDEDEE5FEE5FEFEE5O:FFE56FEE5DEE5FFFEE5FEDEFFE5FE5FEDEDEE5FEE5FEFEE5O9E5FFFEE5FFE5FEE5FEE5DEE5FFH#8&<#J#J&<*J#8&<#J#G#<#=) FEE5DEDEFEE5FEE5FEO:E5FF6E5FEDEFFE5FEE5FEE5DEDEDEE5FFFFEE5DEDEFEE5FEE5FEO9FFE5E5FEE5FFFEE5FEDEDEDEFFE5H#:'9#J#J&;&9#J#:'9#J#G#<#:'9# E5FEDEDEE5FEE5FEFEE5O:FFE56FEE5DEE5FFFEE5FEDEDEFFE5FE5FEDEDEE5FEE5FEFEE5O9E5FFFEE5FFE5FEE5FEE5DEDEE5FFH#<&8#J#J&8';#J#<&8#J#G#<#9&;# FEE5DEDEFEE5FEE5FEO:E5FF6E5FEDEFFE5FEE5FEE5DEDEE5FFFFEE5DEDEFEE5FEE5FEO9FFE5E5FEE5FFFEE5FEDEDEFFE5H#>(J#J,=#J#>(J#G#<)=# E5FEDEDEE5FEE5FEE5O:FFE56FEE5DEE5FFE5FEE5FEDEDEFFE5FE5FEDEDEE5FEE5FEE5O9E5FFFEE5FFE5FEE5FEE5DEDEE5FFH#@&J5?#J#@&J5<'?# FEE5DEDEFEE5FEO:AE5FFE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEDEFFE5FEE5DEDEE5FFFFEE5DEDEFEE5FEO95FFE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFE5FEDEDEFFE5H#B$J5A#J#B$J5<%A# E5FEDEDEE5O:?FFE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5DEE5FEDEDEFFE5FE5FEDEDEE5O95E5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FEE5FFE5DEDEE5FFH5J5 PIFEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFFPHFEE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5H5J5 PIE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FPHE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFE5FFIzJz PGE5HPGE5 J&?#F#8# 5FEFEFEFEFEFEFEFEFEFEFEJ(J# 4FEFEE5E5E5FEFE>E5E5J%<%9%8"8%8%8& =FEFEFEFEFEFEFEFEFEFEFEFEFEFEE5FEFEFEFEFEFEFEFEE5FEFEJ/:08":'9% 4E5FEFEFEE5E5E5E5FEFEE5E5FEFEFEFEE5E5FEFEE5FEFEE5E5FEFEE5E5E5FEFEE5E5FEFEFEE5FEFEJ&J#H" 5E5E5FEFEFE7E5E5E5J"8"9#># 7E5FEFEFEFEFEJ#8";%<% 4FEFEE5E5E5E5E5E5E5E5E5J#>#;#;" @FEFEFEFEFEFEFEJ/:.8%9' 4E5FEFEFEFEFEE5E5E5FEFEFEFEE5E5FEFEFEFEE5E5E5FEFEFEFEE5E5FEFEE5E5FEFEFEFEE5J&9%8#8%9%:&8%8#8# 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 Fz U*FE H5 U%FFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFH5 U&FEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFH#Z FFFEU#H#J# FEFFO1FEFEH#J"J"9"C"=#J"B$8#A":#J"@":$J$J" FFFE5FEO"FEFEFEFEFEGFEFEFEFEFEFEFEFEFECFEFEFEFEFE9FEFEFE;FEH#J#J#9"C"="H"I#B(A#:"J):":#C%?#J"="G& FEFF4FEFFO!FEFFFFFFFFFEFEFEFEFFFFFFFEFFFFFEFFFFCFEFFFEFEFEFEFEFEFFFFFFFEFEFEFEFFFF4FEFFFEFEFEFEFEH#J#J&J%J' FFFEPKFFFFO<FFFEFFFFFF8FEFFFFFFO,FFFEFFFFFFFEH#8&9$<#9$:$8&8&:$8&<#8$9,;$:&8$9&9$J$<#9$:$8&:$:$<#:":$B$="9$A$:$9&8$;$8&A$8( FEFFFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFE@FEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEH#8&8&?&848-?#:+;%9-8&8&J%?%9-8&8&@"8"8#B&9#:&?&8&8&8#;-9%8)9# FFFEFFFEFFFFFFFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFFFEFFFEFFFEFFFFFEFFFEFFFEFEFFFFFFFEFFFFFEFEFFFFFEFFFFFFFEFFFFFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFFFFFFFEFFFEFFFFFFFEFFFFFFFE?FFFFFFFEFEFFFFFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFFFFFEFEFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFEFFFFFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFEFEFEFFFEFFFFFFFEFFFFFFFFFFH#C":#="J"=#B"J$@&8&J#A$G&:#:"J$9&9$A$="J"<%@$ FEFFFFFEFFFF?FFFEFFFE:FEFEFEFFFEFEFEFFFEFEFEFEFE@FEFFFEFEFEFFFEFEFEFFFEFFFF4FEFEFEFFFFFEFEFEFEFEFEFEFEFEFF8FFFFFFFFFEFFFEFFH#J%@%8PJ%G%A"I%:#:%@%J$ FFFEP0FFFFFFFFFFFFFFFEMFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFO&FEFFFEH#C"9#>"J#A&J"=$J#E"F"=#J"8"@"C"<"="J& FEFFFEFEFFFEFFEFFFFFEFFFEFF;FEFEFFFEJFEFFFEFEFEFF=FEFEFEFEFEFEDFEFFFFFFFEH#8%9&?&8(;#;,B&?&8,9&9,?&9";-?/;(8&>%:&8-9%8&8-8&9,8*9(8(;" FFFEFEFEFEFEFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFFFEFFFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFFFEFE&C#8%:$9#<$:$8Y8$8$8"8#;P9$9P9P8$:$;$9$@P9"<$8P9#<P8$8R8$:$9#:%:P8Q8$9%:$9Q8$:$;$8P9$8$8R:$8#9#F% F7F7F7F7F7FEFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7&C#F"J"J"J"J& F6F6F6F6F6FFFEFFO"FFP%FFIFFPIF6F6F6F6F68$C#J%J% F9F9F9FEFFP)FEFEFEFFS%F9F9F9F7H#J#J$ FFFEO1FFFFDFFFFFFH# FEFFH" FFHz U&FE Fz U*E5 <z"z"z 0F6F7TJF6F71F6;z8z8z 1F9TIF91F9 7z8z8z 5F7TIF74F7"J"J" F76F7TJF7 ENDBITMAP %%EndBinary 117 510 261 528 R 7 X V 4 8 Q 0 X (f) 117 522.67 T (ileselectionbox .fsb) 121.8 522.67 T (pack .fsb -padx 10 -pady 10) 117 512.67 T 0 10 Q (FIGURE 30) 118.67 485.17 T 1 F ( - Fileselectionbox) 170.06 485.17 T 0 0 612 792 C 0 12 Q 0 X 0 0 0 1 0 0 0 K (Pr) 392.27 377.71 T (omptdialog) 404.72 377.71 T 1 10 Q (Based on the Dialog class, the Promptdialog provides a) 315 359.05 T (Motif style prompt dialog.) 315 347.05 T 315 403.71 540 720 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 430.57 540 716.86 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N 331.57 439.43 529.57 558.71 R 7 X V 4 8 Q 0 X (messagedialog .cr -title Copyright \134) 331.57 553.38 T ( -bitmap @dsc.xbm -imagepos n \134) 331.57 543.38 T ( -text \322Copyright 1995\134) 331.57 533.38 T ( DSC Communications Corporation\134n\134) 331.57 523.38 T ( All rights reserved\323) 331.57 513.38 T (.cr hide Apply) 331.57 503.38 T (.cr hide Cancel) 331.57 493.38 T (.cr hide Help) 331.57 483.38 T (.cr activate) 331.57 463.38 T (update) 331.57 453.38 T (after 10000 \322.cr deactivate\323) 331.57 443.38 T 0 10 Q (FIGURE 31) 373.47 412.6 T 1 F ( - Messagedialog) 424.86 412.6 T %%BeginBinary: 11506 368 342 147.2 136.8 0 356.8 566.43 /red < 3EC472FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD3557F9765E1A36FE700FF5500B22EAFB4CD73E6A24DBF0087F599FFFFB07A FFCCB088439D58D750D080C0C080C0808060C000FFA000FF20C0A040C040D060 F0E010B4BE8BD28BD9B3FF7299FFA00019BF2FFF6223852F465F4770FF0000FF > store /green < 57D79F00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B56B7F9765E1A36FE700FF1A00B28BEEEE0073E6A24DBF00CEF599FFFFB094 FFF730884DB358D78080C0C080C080808060C08000A080402070A0402040D0F0 F0E010B4BE5BB477D9B3FF7789E4A0FF19264F00B641DE4F829E4780FF0000FF > store /blue < 8CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B52F7F9765E1A36FE7BFCC8BEEB257EEB40073E6A24DBF80FAF56BFBB3B015 3224608856CA58D7D050C080C08080C08060C080FF0000402070C0802040D060 50E010B4BE7A8C65D9B3E08576C4A00070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7TMF6F76F6F7J" ULF78z8z8z 4F9TLF94F9 ;z" UCF7F6<z"z 0F6F7U0F6=z8z /F9U/F9 J'J#?$>" Q8FEFEFEFEF9FE?FEFEFEFEFEFEJ'J"?" Q7FEFEF9F9F9FEKF9FEJ$9"J#<# Q6FEFEF9F9@F9F9FEFEJ$8'829&;#9"8# QAFEFEFEFEFEFEF9FEFEFEFEFEFEF9FEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEF9FEFEFEFEFE@s"J+8'8'8"8":':%8"8# F6F7Q*F9F9FEFEFEF9FEFEFEF9FEF9FEFEFEF9F9F9F9FEF9F9FEF9FEFEF9F9FEFEFEF9FEFEF9F9F9ArJ$;$9':$E" F9Q/F9F9F9F9F9F9F9FEFEF9FEF9F9F9F9F9@sJ"J' F7Q+FECF9FEFEFEFEF9@tJ$9":$;$:%C& F9Q#F9FEFEFEFEF9FEFEF9FEF9FEFEF9FEF9F9F9F9J09&>"8"8"8"8(8"9"8$ Q7F9FEFEFEFEFEF9F9F9F9FEFEFEF9F9F9FEFEF9F9FEFEFEFEFEFEFEFEFEF9FEFEFEF9FEFEJ&:$<#<"9%8';"s9# Q8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FEF9F9F9J%E& R FEFEFEF9FEF9F9F9F9J"8"<"F( QFFEFEF9F9FEFEFEFEFEF9=z8z /F7U/F7rF"J% F7F7U0F7F7F7F7'z& F6F6F6F6F6F7UBEDF6F6F6F6F68$J% F9F9F9UDF9F9F9F7 J"9"9"9" R$FEFEFEFEJzJz R 5FEO7;FEJ"9z8"J%J%J'J' O'FEEFEFEOEFEFEFEFE5FEFEFEFEO-FEFEFEFEFEFE;FEFEFEFEFEFEJrJzJ$J&J$J& O$FEE/FEO6FEFEFE=FEFEFEFEFEO%FEFEFEGFEFEFEFEFEJ'J#J"J$J% P1FEFEFEFEFEFEO.FEFEEFEO!FEFEFEO!FEFEFEFEJ"J%J"J$J% O#FEO3FEFEFEFEO)FEOFFEFEFEO(FEFEFEFEJ%J#AwJ$HzJ" P;FEFEFEFEO#FEFEEDO-FEFEFE1ED:FEJ"J$J"@$B%D"J#F&G%J" O"FEO<FEFEFEMFEEDEDEDEDEDEDEDFEFFEFEEDEDEDEDEDEDEDEDED6EDJ#JzJ#J#?#J"J#D%J$I" O"EDED@2ED:FEFEIFEFEEDED4EDO#FEFEEDEDEDED:EDEDEDFEJ&J&H'J%J"@"J$J"D#J# O$EDEDEDEDED6EDEDEDEDEDEDEDEDEDEDED6FEFEEDFEDFEED5EDEDEDO!FEEDEDAEDEDJ#H#J%J"J"?"J#J#B$J# O)EDEDEDED=EDEDEDED4FEDFEED:EDEDKFEFEEDEDEDEEDEDJ"F"J$I#J"A"J#J#B#J# O+EDEDCEDEDEDFEFE@FEED:FEEDHFEFEEDEDJEDEDJ"J$H#J"J$>"J"C"J" O,EDO(EDEDEDFEFEHED<EDEDEDFE=FEEDO EDJ"H"J"?"J"J#B#J" P9EDFE<FEED?FEDFEFEEDEDO"EDJ%G$J"J#J"C"J" P8EDEDEDEDFEFEFE8FEJEDEDBFEEDO%EDJ"J"J"J"J"B#J" O-EDO.EDO'EDBED@FEEDEDO'EDJ#G"J"J"B"J" P=EDEDFE6FEO?FEEDO*EDJ#F"J"J"J"B"J" P?EDEDFE?EDDED=FEEDO,EDJ"F$G"J"B"J" PAEDFEEDFEFEO>FEEDO.EDJ"F#J"B"J" PBEDFEEDP!FEEDO7FEJ"F"J"J"B"J" PCEDFEO4ED9FEEDO1EDJ"J"J"H"B" Q'FE:EDLFEFEEDJ#F"D"J":"G"B"J" PDEDEDFEFEO$EDEDFEEDO4EDJ"F"J" PFEDFEOHFEJ"F"J"J"8"J"J" PGEDFE7FEHEDED>EDO6EDJ"J#G"B" PHEDOCEDEDFEEDJ"E"J" PIEDFEODFEJ"F"J" PIFEFEP"EDJ#J"B"J":" PIEDEDP$FEEDO:EDFEJ"E#J"J"J" PKEDFEFE4FEO*FEOMEDJ"J"J% Q.EDOLEDO<EDEDEDEDJ"E"J" PLEDFEO>FEJ" QDFEJ"E"J"J"C" PMEDFE5FEO&FEEDJ" PMFEJ#E"<"D"J"C" PMEDEDFEEDFEO$FEEDJ" QGFEJ" QHFEJ"E"<"F"J" Q!EDFEEDFEO FEJ"J" QJFEO-EDJ" QKFEJ"E"<"H$J" Q"EDFEEDFEFEFEHFEJ" Q:EDJ#J" R!FEFEO&EDJ"J" Q;ED5FEJ"J#J#J" Q#ED7FEED5FEFEBFEJ"J$ Q;ED8FEEDFEJ"J" Q=ED7FEJ"@"J# Q3FEED8FEFEJ"J" Q?ED9FEJ"J# Q@ED9FEFEJ"J"J$J" Q$ED<ED:FEEDFE6FEJ"J" QBED:FEJ"J"J" Q$FE>ED;FEJ"J"J$ Q$ED?ED;FEFEFEJ# QEEDEDJ#J" QGEDED:FEJ"J$ QIED:FEEDFEJ"J# QKED9FEEDJ"J$J# Q$FEEEDEDED9FEFEJ"J#J" Q$EDHEDED:FEJ"J"J# Q$FEJED8FEEDJ#J" R"EDED7FEJ"J"J"@" Q3ED>ED7FEEDJ#J" R%EDED6FEJ" R'EDJ"J"J" R)ED4FE8FEJ$J" R(EDEDED4FEJ"J# Q2EDFEDEDJ"J" Q#FEO)EDJ"G"=" R.EDFEEDJ"J" R/EDHFEJ"J"F" Q1EDLEDFEJ"J" Q"FEO.EDJ#J"E" R1FEED6EDFEJ"J"F" Q0EDO EDFEJ" R3EDJ"J"E" Q!FEOHEDFEJ"J" Q/EDO$EDJ"J"E" R4FE6EDFEJ"C"J# Q FEEDO%EDEDJ" RLEDJ"C":#J" PMFEEDFEFEOHFEJ"8"J"E"J" Q1FEFEO8EDFEO>FEJ"C">"J% PLFEEDFEQ7FEFEFEFEJ"C"J"E"J" PKFEEDOBEDFEO;FEJ" R6EDJ"C"A#J"E"J" PJFEEDFEFEO7EDFEO9FEJ"C"J"A"C"E" Q)EDEDLFEEDEDFEJ"B#C"J"J"E"J";" PIFEEDFEFELED:EDFEO6FEEDJ"D"="J" PHFEEDEDO$FEJ"C"F"J"E"J" PGFEEDFEO9EDFEO4FEJ"C"J"G"E"J" PFFEEDO:EDEDFEO2FEJ"C"I"J"E"J" PEFEEDFEO:EDFEO8EDJ"J"C"J"E"J" O<FEO'FEEDP"EDFEO/FEJ"C"J"J"@"J"E"J" PCFEED6FEHFEED5EDFEO-FEJ"C"J"J"E#J" PBFEED8FEO;EDFEFEO*FEJ#J"B#F"?"J"@"J"F"J"?" O=FEFEO"FEEDEDEDFEEFEED8EDFEO(FEEDJ"F"J#B#J#J"F"J" O-FEEDO FEFEEDFEO=EDFE9EDFEO&FEJ"J"C$J$J"A"J"F#J"@" O>FEMFEEDEDED<FEEDFEAFEED:EDFEFEO#FEEDJ"J#B#J#J"@"J#F"J# O?FEJFEFEEDED@FEED@FEED=EDEDFEO FEFEJ"I"J$C"J"A$J"@"J"F#J"B" O,FEFEFFEFEFEED7EDFEEDFE=FEED@EDFEFEKFEEDJ$J#D#J"J"@"J#F#J# OAFEEDFEAFEFEEDEDEFE=FEEDBEDEDFEFEGFEFEJ"J"J$D"J"D"J"@"J"G$J# O+FE6FE?FEFEFEED;FEFE:FEEDEEDFEFEFEBFEFEJ$J$J%E"8"J#D$J#@"J#H#J#F" O(FEFEFE9FEFEFE7FEFEFEFEEDED:EDEDFEFEFE5FEFEEDGEDEDFEFE>FEFEEDJ&Jr8":tG"8"J#G#A"J#H%J$ O#FEFEFEFEFE?FEFEFEEDEDO!FEFEFEFEEDJEDEDFEFEFEFE7FEFEFEJ$JrJ&J%?%A"J#J&C&J" O FEFEFEKFE7EDEDEDEDEDO%FEFEFEFEFEFEFEFEEDO EDED4FEFEFEFEFEFEFEFEFEFE4EDJ#J$JtD$J$JxJ$ P;EDEDFEDEDED4FEEDEDEDO!EDEDED6FE6EDEDEDJ"J$8"J"J#J$J$ O EDO7EDEDEDEDHEDHEDEDO'EDEDEDO%EDEDEDJ&J%J#J$J$ P3EDEDEDEDEDO!EDEDEDEDBEDEDO,EDEDEDMEDEDEDJ"JrJ$J$J%J& O!EDO*EDO*EDEDED<EDEDEDO1EDEDEDEDDEDEDEDEDEDJzJ&I%J'J' O"O*EDO4EDEDEDEDEDEDEDEDEDO8EDEDEDEDEDED8EDEDEDEDEDEDJzJz QE3EDOB8ED Jz O"SHFE Jz O"SHED J"H"J"8"J"@#J# O+FEFEP@FEFE=FEFEFEO4FEFEJ#9%A#8%A%>%>&=%>&<$=&=$=%B%9#C"Bw>&A#9$A&=$>( O&FEFEEDFEFEFEFEFEEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDFEFEFEJ%:"A%9%@"9"@">"D">"9"<$="C"="D%9%A$C$9%>"9"?%9&?"C"=$8"8" O$FEFEFEEDEDFEFEEDEDEDEDFEFEEDFEEDEDEDEDEDEDFEEDEDEDEDFEFEEDEDEDEDFEFEFEFEFEEDEDEDEDEDEDEDEDEDFEFEEDEDEDEDFEFEFEEDEDFEFEEDEDFEJ"8"<"?$=$J"J"<"J%="J"@#I"?"8"C"J$ O#FEEDEDFEFEEDEDFEFE4FEO0FEED6FEFEFEEDED;EDEDEDFEEDFEFE6EDFEEDJ"8">"="C"C"<"F";#8"J"9"J"J"J"J"9"J" O"FEEDEDFEFEFEEDFEFEEDFE?EDFEHED9EDBED5EDFE6EDJ"8"?"J"B"J"9":"J"8"J"9"J"A"8"@"9"C"8" OBEDFEED7EDED@EDFEFE5FEED4FEFEJFEEDFEEDFEFEFEJ"J"J"9#E"8"9#J"9"9"J"J"J"F"9# O!FE6ED:FEFEEDEDFEFEEDEEDFEEDO EDO!ED8EDEDFEFEJ"F"J"J"J"J$8"J"J"8"C":# O$EDFE:EDCFEBEDO&EDEDEDFEKFE9EDFEEDFEFEJ":"J"8"J"J"J"8"C";" P)EDFEO-EDFEO!FEO#ED:EDFEEDFEJ"F"J"8$;"B"8%J":"8"J$J"J"C#:" O$FEED;EDFEEDFEEDEDFEEDFEEDDFEEDFEO!FEFEFEO FE>FEEDEDFEJ"J"J"J"J">#J'8"J"9"D# O!ED6FE<FE7FEFEDFEFEKFEFEEDEDEDEDFEO8EDFEEDEDJ"8"B"9";"C"9"J"J"8"I"J"E" OBFEEDEDEDFEEDEDKED9EDFEEDO0EDEDJ"8">"="8"J"<"J"="<"8"J"8">"I"A"<" O"EDFEFEEDFEOLFEEDEFEFEEDFEGEDFEFEEDFEEDJ"I"?"8"J#H"J"8"="?"J"B"H"A";$ O#EDEDFEEDO5FEEDED8EDFEFEEDO#EDEDEDFEFEFEEDJ%;"@%:%?";$E";$F"8";"J"J"8";$<"A"J$<$A"J" O$EDFEFEFEFEEDFEFEFEFEFEEDEDFEEDFEEDFEEDFEEDEDFEFE5ED8EDFEFEFEEDFEFEHEDFEFEFEFEEDFE4FEJ%8%@*@"8#9"9#9"<"8#9":"9"?+?"8"G#9"@+<"8#:":">#9#?#9"@+?#8"="?"8' O%EDEDFEFEFEFEFEEDEDEDFEFEFEFEFEEDEDFEFEFEEDFEFEFEFEFEFEEDFEFEEDEDFEFEFEFEFEFEEDEDFEFEFEFEFEEDEDEDFEFEEDFEFEFEEDFEFEFEFEFEFEFEFEFEFEFEFEEDEDFEFEFEFEFEFEEDEDFEFEFEEDEDFEFEFEFEEDEDJ#8$C&B&='<&>&A'A%>#='C'=&:'>r?'B'A&>#>' O'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED J%J#>#<#>#:%9%9&<&;&;%>%J#F#8#J%J#8# IFEFEFEFE<FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFELFEFEFEFEFEFE=FEFEFEFEHFEFEFEFEJ'J#J#;.:$>%9(9'<'J#J#J'J# HFEFEEDEDFEFE;EDED8FEFEFEFEEDEDFEFEEDFEFEEDEDFEFEEDEDEDEDEDFEFEFEFEEDEDEDFEFEFEFEEDEDFEFEFEFEEDEDFEFEKEDED4EDED<FEFEEDEDFEFEKEDEDJ$8(8&8#9+8&:#8"8";#I$C$A$8#;$8(8*8*8#8)8#8%9%8"8%8%8&9%=$8(8+9%8+8"8%8%8& GFEFEEDEDEDEDFEFEFEFEFEFEEDFEFEFEFEFEFEEDFEFEEDFEFEFEFEFEFEEDFEFEFEFEFEFEEDEDFEFEEDEDFEFEFEFEEDEDEDFEFEEDEDEDEDFEFEFEFEFEEDFEFEFEEDFEFEFEFEEDFEFEFEEDFEFEFEFEFEFEFEEDFEFEEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDFEFEFEFEFEFEFEFEEDFEFEFEFEFEFEFEFEEDEDEDEDFEFEFEFEFEFEEDFEFEFEFEEDFEFEFEFEFEFEFEFEEDFEFEEDFEFEFEFEFEFEEDFEFEFEFEFEFEFEFEEDFEFEJ'9%A";%;'8"J$F(J'8*8*@%:08":'9,C'9":,9"8)8":'9% O FEFEEDEDFEFEFEEDFEFEFEFEFEEDFEFEEDFEFEEDEDED<FEFEFEEDFEFEFEEDEDED5FEFEEDEDFEFEFEEDEDFEFEEDEDFEFEFEEDEDFEFEEDEDFEFEFEEDFEFEFEFEEDEDFEFEEDFEFEEDEDFEFEEDEDEDFEFEEDEDFEFEFEEDFEFEEDFEFEEDEDFEFEFEFEEDEDFEFEFEFEEDFEFEEDFEFEEDEDFEFEFEFEFEEDEDFEFEEDEDEDFEFEEDEDFEFEFEEDFEFEJ":(:#<";"J%9%9'F&J"A&J"<%J#8"D%J" O)EDEDFEFEEDFEFEEDEDEDEDED4EDFEFEFEEDFEFEFEEDEDEDEDFEFEEDEDFEFEFEO.EDEDEDEDEDED6EDFEEDEDED7EDEDEDEDEDEDED6EDJ"J$:$J"8"J$J&J"H"9$ O8EDDEDEDEDEDEDED;EDFEO=FEFEFE9EDEDFEFEFE7EDEDFEFEFEJ&J#I#8"J%J"8"J% O/EDFEFEFEEDO(FEFEFEFEEDO>FEFEEDED;EDFELFEFEEDEDJ$8#?"J"D"A#;#J$A$8#;$8#J"G#B"G%>$8#D"J" GEDFEFEFEFEFE7FEFEFEFEFEFE5FEFEEDEDFEFEFEFEEDFEFEFEFE@FEFEFEFEFEFEEDEDEDFEFEFEFEFE;FEJ-9%9"C%A%A5>%9(9'<-J%C49'>'=->,<-9' HEDFEFEFEFEEDEDFEFEFEFEEDEDFEFEEDEDEDFEFEEDEDFEFEED4EDFEFEFEFEEDEDEDFEFEFEFEEDEDEDFEFEFEFEEDFEFEFEEDEDFEFEFEFEFEEDEDFEFEFEFEEDEDFEFEFEFEEDEDFEFEFEFEED7EDFEFEEDEDFEFEFEFEEDEDEDFEFEFEEDFEFEEDEDFEFEEDEDFEFEFEFEEDEDFEFEFEFEEDEDFEFEFEFEEDEDFEFEFEFEEDEDFEFEEDEDEDFEFEFEFEEDEDFEFEFEEDFEFEEDEDFEFEEDEDFEFEFEFEEDJ%8%;#<"9#9#8#:#8#9#=#:%9%9%=&;&;%>%8%8#8#8&8#8#8s8&8%9'8&8%8#8#8%?%8%8#<#9%8#:'8&8%8#8# IEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDJ"C# O0FEFEFEJ$B' O/FEFEEDEDFEFEFEFEEDJ#<#D%J# O'EDEDEDEDEDEDEDEDR1EDED J#9&@#>#<#J# PJFEFEFEFEEDFEFEFEFEFEFEFEFEO1FEFEJ"8"G# PIFEFEEDEDJ#C(8&:#8"8"8%<+9%9%8(9#8%9# PJEDEDFEFEEDFEFEFEFEFEFEEDFEFEFEFEFEFEFEFEFEFEFEFEEDFEFEEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDFEFEFEFEFEFEFEFEFEFEFEFEJ":"C";%;'8)="859"@, PHFEFEFEFEFEEDFEFEEDFEFEEDEDEDEDFEFEEDEDFEFEFE4FEFEEDEDFEFEEDFEFEEDEDFEFEEDFEFEEDEDFEFEFEFEFEEDEDFEFEEDFEFEEDFEJ#<";"A%>#?%A*A" Q.EDEDEDEDFEEDEDEDEDEDFEEDEDEDEDEDEDFEFEEDFEFEEDEDJ#E"J&>":#9&:#;"B# PJFEFEED8EDEDFEFEFEEDFEFEEDEDFEFEFEFEFEEDFEFEJ)J"8"B%9"8"9%=&:% PGFEFEEDEDEDEDFEFEGEDFEEDEDEDEDEDFEEDEDEDEDEDFEFEFEEDEDEDEDEDJ"D&F(=#H#:" Q6FEFEFEFEEDEDFEFEEDFEFEEDEDFEFEFEFEFEJ%A+@5>$9, Q3EDFEFEEDEDFEFEEDEDFEFEFEFEED4EDFEFEFEFEEDEDEDFEFEFEFEEDEDEDFEFEFEFEEDEDFEEDEDFEFEFEFEEDEDEDFEFEEDJ#:r;#9#8#:#8#9#8%<#:%9%9%8#<";%9& PGEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDJ# Q3FEFEJ' Q3EDFEFEFEFEEDJ% Q4EDEDEDED <z UBEC=z" U@EDFF=Z U@<z UBED Jz Q0O-ECJ" R<FFJz" Q2O)EDFF JZ Q6O!J" R6ECJz" Q8KEDEC J%:#9# QFFEFEFEFEFEFEFEFEJ'=$ QEFEFEEDEDFEFEFEFEEDJ$8$;$ QDFEFEEDEDFEFEFEFEEDJ$ R"FEFEED J$ R"EDFEFEJ$ R#EDFEFEJ$8$<$ QDEDFEFEFEFEEDEDFEFEJ'>$ QEEDFEFEFEFEEDEDFEFEJ%:#:# QFEDEDEDEDEDEDEDED &J% F7F7F7F7F7UCF7F7F7F7&JzJ& F6F6F6F6F6Q3KECQ3F6F6F6F6F68$J"J% F9F9F9Q2ECR1F9F9F9F7Jz Q6O!ED JZ Q2O)J" Q1FFJz Q0O-ED <z"z"z 0F6F7TMF6F71F6;z8z8z 1F9TLF91F9 7z8z8z 5F7TLF74F7"J"J" F76F7TMF7 ENDBITMAP %%EndBinary 0 0 612 792 C 315 72 540 720 C 315 183.73 540 343.71 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 206.57 540 334.71 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 4263 283 155 145.54 79.71 0 351 246 /red < 7266F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700557FFF5500B22E99FFFFB07AFFB0CC0087AFB4CD73E6A2 4DBF88F5439D58D750D080C0C080C0808060C000FFA000FF20C0A040C040D060 F0E010B499FFA0BE8BD28BD9B3FF720019BF2FFF6223852F465F4770FF0000FF > store /green < 9F99DE00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE7006B7FFF1A00B28B99FFFFB094FF30F700CEEEEE0073E6A2 4DBF88F54DB358D78080C0C080C080808060C08000A080402070A0402040D0F0 F0E010B489E4A0BE5BB477D9B3FF77FF19264F00B641DE4F829E4780FF0000FF > store /blue < FFFFB3FFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BF2F7FCC8BEEB2576BFBB3B01532602480FAEEB40073E6A2 4DBF88F556CA58D7D050C080C08080C08060C080FF0000402070C0802040D060 50E010B476C4A0BE7A8C65D9B3E0850070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7S&F6F76F6F7J" T%F78z8z8z 4F9S%F94F9 ;z" SJF7F6<z"z 0F6F7S7F6=z8z /F9S6F9 JrJ"<r:#@$ P*FEGFEFEFEFEFEFEFEJ"8&J"="8&E" P*F9F9F9F9FEFEEFEF9F9F9F9FEFEF9J$8#J# Q7F9FEFEF9F9;FEFEJ'8$9'8#8'9"8#D$9%@$:& P3FEFEFEF9FEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9@s"J&8"8*8+8(8#D"<%=/ F6F7OJFEFEF9F9F9FEFEFEFEF9FEFEFEF9F9FEF9FEFEFEF9FEFEF9F9FEF9FEFEFEF9F9F9F9F9F9F9FEFEFEFEFEF9FEFEFEF9FEFEF9F9FEFEArJ%;$8$<"9"=$J$A$ F9OIFEFEFEF9F9F9F9F9F9F9F9F9F9F9F9<F9FEFEF9F9F9@sJ$J%G' F7OIF9F9F9O0FEFEF9F9F9FEFEFEFEF9@tJ$H$H$?"A$9& F9P(FEF9FEFEF9FEFEFEF9FEFEF9FEFEF9F9F9F9J"8";"8"8*8"9"9"9&8$;"8&8"8'8$8*8& P*FEFEFEFEF9F9FEFEFEF9F9F9FEFEFEFEF9FEFEF9F9F9FEFEFEFEFEFEFEF9FEFEF9F9FEFEF9FEF9FEFEF9F9F9FEFEFEF9F9FEFEFEFEFEJ%;%:$9w:#;#;r9%8v9$9";" P*F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FEJ& R'FEF9F9F9F9J"8"J( PMFEFEO$F9FEFEFEFEFEF9=z8z /F7S6F7rF"J% F7F7S7F7F7F7F7'z& F6F6F6F6F6F7SIE5F6F6F6F6F68$J% F9F9F9SKF9F9F9F7 J&?#F#8# 5FEFEFEFEFEFEFEFEFEFEFEJ(J# 4FEFEE5E5E5FEFE>E5E5J%<%9%8"8%8%8& =FEFEFEFEFEFEFEFEFEFEFEFEFEFEE5FEFEFEFEFEFEFEFEE5FEFEJ/:08":'9% 4E5FEFEFEE5E5E5E5FEFEE5E5FEFEFEFEE5E5FEFEE5FEFEE5E5FEFEE5E5E5FEFEE5E5FEFEFEE5FEFEJ&J#H" 5E5E5FEFEFE7E5E5E5J"8"9#># 7E5FEFEFEFEFEJ#8";%<% 4FEFEE5E5E5E5E5E5E5E5E5J#>#;#;" @FEFEFEFEFEFEFEJ/:.8%9' 4E5FEFEFEFEFEE5E5E5FEFEFEFEE5E5FEFEFEFEE5E5E5FEFEFEFEE5E5FEFEE5E5FEFEFEFEE5J&9%8#8%9%:&8%8#8# 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 Hz S0A2J" SAFFJZ 4S- I" FFHz S0E5 <z SIE4=z" SGE5FF=Z SG<z SIE5 Ez OAE4J" P!FFGz" O=E5FF JZJZJZ 5O54O54O5J"J"J" OIE4OHE4OHE4Jz"Jz"Jz" 7O1E5E47O1E5E47O1E5E4 J%:#9#J%J#J#9#># O!FEFEFEFEFEFEFEFEO0FEFEFEFE=FEFEO*FEFEFEFEFEFEJ'=$J' O FEFEE5E5FEFEFEFEE5O/FEFEE5E5FEFEJ$8$;$J$8(8&9%9%J%;& MFEFEE5E5FEFEFEFEE5O/FEFEE5E5E5E5FEFEFEFEFEFEE5FEFEFEFEFEFEFEFEFEFEO7FEFEFEFEFEFEE5FEFEJ$J'93J'<% O+FEFEE5O7FEFEE5E5FEFEFEE5FEFEE5FEFEE5E5FEFEE5FEFEE5E5FEFEO5FEFEE5E5FEFEFEE5FEFEJ#=">#J$E" PEE5E5E5E5E5O6FEFEFEE5J$J$I#J$;# O+E5FEFEO8FEFEFEFEFEO1E5E5E5FEFEJ$J%I%J% O,E5FEFEO6FEFEE5E5E5E5E5E5O7E5E5E5E5J$8$<$J$8#H#;#J#<" ME5FEFEFEFEE5E5FEFEO.E5FEFEFEFEFEFEFEFEO9FEFEFEJ'>$J.=.J'<% O E5FEFEFEFEE5E5FEFEO.E5FEFEFEFEE5E5FEFEFEE5FEFEE5FEFEFEFEE5E5E5FEFEFEFEE5O5E5FEFEFEFEE5E5FEFEE5J%:#:#J%8s8#8%9%8#J#9#8%8#:# O!E5E5E5E5E5E5E5E5O/E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5O*E5E5E5E5E5E5E5E5E5E5E5E5 J# S#E5E5 &J% F7F7F7F7F7SJF7F7F7F7&HzJzJzG& F6F6F6F6F6O1E48O1E48O1E4F6F6F6F6F68$G"J"J"J% F9F9F9E4OHE4OHE4OCF9F9F9F7JzJzJz 5O5E54O5E54O5E5 GZ O=F" FFEz OAE5 <z"z"z 0F6F7S&F6F71F6;z8z8z 1F9S%F91F9 7z8z8z 5F7S%F74F7"J"J" F76F7S&F7 ENDBITMAP %%EndBinary 378 217.71 477 235.71 R 7 X V 4 8 Q 0 X (promptdialog .pd) 378 230.38 T (.pd activate) 378 220.38 T 0 10 Q (FIGURE 32) 368.58 188.61 T 1 F ( - Promptdialog) 419.97 188.61 T 315 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "16" 16 %%Page: "17" 17 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 12 Q 0 X 0 0 0 1 0 0 0 K (Selectiondialog) 145.83 712 T 1 10 Q -0.19 (The Selectiondialog class provides a dialog based Selec-) 72 693.33 P (tionbox.) 72 681.33 T 72 377.72 297 720 C 72 440.98 297 678 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 72 471 297 669 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 5294 262 379 104.8 151.6 0 135 508.4 /red < 7266F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700557FFF5500B22E99FFFFB07AFFB0CC0087AFB4CD73E6A2 4DBF88F5439D58D750D080C0C080C0808060C000FFA000FF20C0A040C040D060 F0E010B499FFA0BE8BD28BD9B3FF720019BF2FFF6223852F465F4770FF0000FF > store /green < 9F99DE00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE7006B7FFF1A00B28B99FFFFB094FF30F700CEEEEE0073E6A2 4DBF88F54DB358D78080C0C080C080808060C08000A080402070A0402040D0F0 F0E010B489E4A0BE5BB477D9B3FF77FF19264F00B641DE4F829E4780FF0000FF > store /blue < FFFFB3FFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BF2F7FCC8BEEB2576BFBB3B01532602480FAEEB40073E6A2 4DBF88F556CA58D7D050C080C08080C08060C080FF0000402070C0802040D060 50E010B476C4A0BE7A8C65D9B3E0850070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7R?F6F76F6F7J" S>F78z8z8z 4F9R>F94F9 ;z" S5F7F6<z"z 0F6F7S"F6=z8z /F9S!F9 J'>$H"9#Jr:#@$ OHFEFEFEFEF9FEFEFEFEFEFEFE7FEFEFEFEFEFEJ'?"I"J"8&E" OGFEFEF9F9F9FEF9FE=F9F9F9F9FEFEF9J"J#J$8#J# OLF9BF9F9=F9FEFEF9F9;FEFEJ#8"9$?$:$8"8&:$9'G$9%@$:& OIFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9@s"J"9#8'<08$:*8%F"<%=/ F6F7O4F9FEFEFEFEFEF9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9F9F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEF9F9F9FEFEFEFEFEF9FEFEFEF9FEFEF9F9FEFEArJ#9":"A";%C$<"J$A$ F9O6F9F9FEFEFEF9F9F9F9F9F9F9F99F9FEFEF9F9F9@sJ"8#;%>%J%G' F7O5FEF9F9F9F9F9F9F9F9F9F9O(FEFEF9F9F9FEFEFEFEF9@tJ">%>%9%C$J$?"A$9& F9O5FEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FE6FEFEF9FEFEF9FEFEF9F9F9F9J0808&8,8"9";"8&8"8'8$8*8& OHF9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEF9FEFEF9F9F9FEFEFEF9F9F9FEFEFEFEFEFEFEFEF9FEFEF9F9FEFEF9FEF9FEFEF9F9F9FEFEFEF9F9FEFEFEFEFEJ':$8%9$:$:r9$9s;r9%8v9$9";" OGF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FEJ& R"FEF9F9F9F9J( R"F9FEFEFEFEFEF9=z8z /F7S!F7rF"J% F7F7S"F7F7F7F7'z& F6F6F6F6F6F7S4E5F6F6F6F6F68$J% F9F9F9S6F9F9F9F7 J#8# 4FEFEFEFE J"8"8%8*9% 7FEFEFEFEFEFEFEE5FEFEFEE5FEFEFEFEFEFEFEJ"8)81 7E5E5E5FEFEE5E5FEFEFEE5E5FEFEE5E5FEFEE5FEFEE5E5FEFEJ% O"FEE5E5E5J#D& >FEFEE5E5FEFEFEJ%D"8" >E5E5E5E5E5FEJ":#B% ;FEFEFEFEFEE5E5J+B' 8E5FEFEE5E5FEFEFEFEE5E5FEFEFEFEE5J#9#8%8#8#8#8% 4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 Hz=z R0A23E4J"J" RAFF9FFJZ@r"r" 4R-DEE4DEFFJ" S#FFJ" S%E4J" S"FFJ$ S$E5E4E4J$ S!FFFFE5J$ S%E5E4E4J$ S FFFFE5J$ S&E5E4E4J$ RMFFFFE5J$ S'E5E4E4J$ RLFFFFE5J$ S(E5E4E4J#u RKFFFFE4J"B" RLE4E4Jz RK/DEJZ RK/J" S+E4Jv" RME5E4 Jv RME4J" RLE4Jz RK/DEJZ RK/J"C" RKDEE4Jt$ S E5E4E4DEJ$ RLDEFFFFJ$ S(E4E4DEJ$ RMDEFFFFJ$ S'E4E4DEJ$ S DEFFFFJ$ S&E4E4DEJ$ S!DEFFFFJ$ S%E4E4DEJ$ S"DEFFE4J" S&DEJ" S#DEJ" S%DEJZ RK/I"J" FFR6FFHz=z R0E53E5 J&?#F#8# 5FEFEFEFEFEFEFEFEFEFEFEJ(J# 4FEFEE5E5E5FEFE>E5E5J%<%9%8"8%8%8& =FEFEFEFEFEFEFEFEFEFEFEFEFEFEE5FEFEFEFEFEFEFEFEE5FEFEJ/:08":'9% 4E5FEFEFEE5E5E5E5FEFEE5E5FEFEFEFEE5E5FEFEE5FEFEE5E5FEFEE5E5E5FEFEE5E5FEFEFEE5FEFEJ&J#H" 5E5E5FEFEFE7E5E5E5J"8"9#># 7E5FEFEFEFEFEJ#8";%<% 4FEFEE5E5E5E5E5E5E5E5E5J#>#;#;" @FEFEFEFEFEFEFEJ/:.8%9' 4E5FEFEFEFEFEE5E5E5FEFEFEFEE5E5FEFEFEFEE5E5E5FEFEFEFEE5E5FEFEE5E5FEFEFEFEE5J&9%8#8%9%:&8%8#8# 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 Hz RIA2J" S,FFJZ 4RF I" FFHz RIE5 <z S4E4=z" S2E5FF=Z S2<z S4E5 Ez O:E4J" OHFFGz" O6E5FF JZJZJZ 5O.4O.4O.J"J"J" OBE4OAE4OAE4Jz"Jz"Jz" 7O*E5E47O*E5E47O*E5E4 J%:#9#J%J#J#9#># KFEFEFEFEFEFEFEFEO)FEFEFEFE=FEFEO$FEFEFEFEFEFEJ'=$J' JFEFEE5E5FEFEFEFEE5O(FEFEE5E5FEFEJ$8$;$J$8(8&9%9%J%;& IFEFEE5E5FEFEFEFEE5O(FEFEE5E5E5E5FEFEFEFEFEFEE5FEFEFEFEFEFEFEFEFEFEO1FEFEFEFEFEFEE5FEFEJ$J'93J'<% O'FEFEE5O0FEFEE5E5FEFEFEE5FEFEE5FEFEE5E5FEFEE5FEFEE5E5FEFEO/FEFEE5E5FEFEFEE5FEFEJ#=">#J$E" P:E5E5E5E5E5O0FEFEFEE5J$J$I#J$;# O'E5FEFEO1FEFEFEFEFEO+E5E5E5FEFEJ$J%I%J% O(E5FEFEO/FEFEE5E5E5E5E5E5O1E5E5E5E5J$8$<$J$8#H#;#J#<" IE5FEFEFEFEE5E5FEFEO'E5FEFEFEFEFEFEFEFEO3FEFEFEJ'>$J.=.J'<% JE5FEFEFEFEE5E5FEFEO'E5FEFEFEFEE5E5FEFEFEE5FEFEE5FEFEFEFEE5E5E5FEFEFEFEE5O/E5FEFEFEFEE5E5FEFEE5J%:#:#J%8s8#8%9%8#J#9#8%8#:# KE5E5E5E5E5E5E5E5O(E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5O$E5E5E5E5E5E5E5E5E5E5E5E5 J# R@E5E5 &J% F7F7F7F7F7S5F7F7F7F7&HzJzJzG& F6F6F6F6F6O*E48O*E48O*E4F6F6F6F6F68$G"J"J"J% F9F9F9E4OAE4OAE4O<F9F9F9F7JzJzJz 5O.E54O.E54O.E5 GZ O6F" FFEz O:E5 <z"z"z 0F6F7R?F6F71F6;z8z8z 1F9R>F91F9 7z8z8z 5F7R>F74F7"J"J" F76F7R?F7 ENDBITMAP %%EndBinary 135 480 243 498 R 7 X V 4 8 Q 0 X (selectiondialog .sd) 135 492.67 T (.sd activate) 135 482.67 T 0 10 Q (FIGURE 33) 123.53 453.1 T 1 F ( - Selectiondialog) 174.92 453.1 T 72 377.72 297 720 C 0 0 612 792 C 0 12 Q 0 X 0 0 0 1 0 0 0 K (Fileselectiondialog) 380.17 712 T 1 10 Q (The Fileselectiondialog is a dialog based Fileselection-) 315 687.33 T (box.) 315 675.33 T 315 406.97 540 672 C 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 315 438 540 663 R 7 X 0 0 0 1 0 0 0 K V 0.5 H 2 Z 0 X N %%BeginBinary: 33477 462 429 184.8 171.6 0 337.2 482.4 /red < 7266F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF80808080 8080808080808080808080808080808080808080404040404040404040404040 4040404040404040404040000000000000000000000000000000000039C069DD 00FF0000003333330033CCDD9999112277005544FFCC66AABBFF33EE9999CC7A EFD39765E1A36FE700557FFF5500B22E99FFFFB07AFFB0CC0087AFB4CD73E6A2 4DBF88F5439D58D750D080C0C080C0808060C000FFA000FF20C0A040C040D060 F0E010B499FFA0BE8BD28BD9B3FF720019BF2FFF6223852F465F4770FF0000FF > store /green < 9F99DE00000000000000000000000000FFFFFFBFBFBFBFBF8080808080404040 40000000FFFFFFFFFFBFBFBFBF808080808040404040400000000000FFFFFFFF FFBFBFBFBFBF8080808040404040400000000000FFFFFFFFFFBFBFBFBFBF8080 8080804040400000000000FFFFFFBFBFBFBFBF80808040404040400063E0B500 996699FF00663399BBFF99DD99FF112277005544CCCC66AABB6600EE6600CC69 E3B59765E1A36FE7006B7FFF1A00B28B99FFFFB094FF30F700CEEEEE0073E6A2 4DBF88F54DB358D78080C0C080C080808060C08000A080402070A0402040D0F0 F0E010B489E4A0BE5BB477D9B3FF77FF19264F00B641DE4F829E4780FF0000FF > store /blue < FFFFB3FFFFFFFFFFFFFFFFFFFFFFFFFFBF8040FFBF804000FFBF804000FFBF80 00BF8040FFBF804000FF804000FFBF804000FFBF804000FFBF804000FFBF8040 00FFBF804000FFBF4000FFBF804000FFBF804000FFBF804000FFBF804000FFBF 804000FFBF00FFBF804000BF8040FFBF804000FFBF40FFBF8040004063E0B500 FF3399FF88666666009966DDFFFF112277DD554499FFCCAABBCC99EE9966CC69 E3B59765E1A36FE7BF2F7FCC8BEEB2576BFBB3B01532602480FAEEB40073E6A2 4DBF88F556CA58D7D050C080C08080C08060C080FF0000402070C0802040D060 50E010B476C4A0BE7A8C65D9B3E0850070264F00FC5AE050B4A0FF9000FF00FF > store BEGINBITMAPCOLORc z"z"z" 6F6F7W!F6F76F6F7J" X F78z8z8z 4F9W F94F9 ;z" WEF7F6<z"z 0F6F7W2F6=z8z /F9W1F9 Js8#8$D'>$H"9#Jr:#@$ Q@FEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFE7FEFEFEFEFEFEJ"8$>"E'?"I"J"8&E" Q@F9F9F9F9F9FEFEF9F9F9FEF9FE=F9F9F9F9FEFEF9J"9#J"J#J$8#J# QFF9F9F97F9BF9F9=F9FEFEF9F9;FEFEJ"9$?$>#8"9$?$:$8"8&:$9'G$9%@$:& QEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9@s"J#8$?';"9#8'<08$:*8%F"<%=/ F6F7Q0FEFEF9F9F9FEFEFEF9FEFEF9FEFEFEFEFEF9FEFEFEFEFEF9FEFEF9FEFEFEF9FEFEF9F9F9F9F9FEFEFEF9FEFEFEF9F9FEF9FEFEF9F9F9FEFEFEFEFEF9FEFEFEF9FEFEF9F9FEFEArJ#G">#9":"A";%C$<"J$A$ F9Q1F9F9FEF9F9FEFEFEF9F9F9F9F9F9F9F99F9FEFEF9F9F9@sJ"E%;"8#;%>%J%G' F7Q3F9F9F9F9F9FEF9F9F9F9F9F9F9F9F9F9O(FEFEF9F9F9FEFEFEFEF9@tJ%<">%>%9%C$J$?"A$9& F9QBFEF9FEFEFEFEF9FEFEFEF9FEFEFEF9FEFEFEF9FE6FEFEF9FEFEF9FEFEF9F9F9F9J"8";"8$8)<0808&8,8"9";"8&8"8'8$8*8& Q@FEFEFEFEF9FEFEF9F9F9FEFEFEF9F9FEFEFEFEF9F9F9F9FEFEFEF9F9FEFEF9F9F9FEFEFEF9F9F9F9FEFEFEF9F9FEFEF9FEFEF9F9F9FEFEFEF9F9F9FEFEFEFEFEFEFEFEF9FEFEF9F9FEFEF9FEF9FEFEF9F9F9FEFEFEF9F9FEFEFEFEFEJ%;t9$<':$8%9$:$:r9$9s;r9%8v9$9";" Q@F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FEJ& T9FEF9F9F9F9J( T9F9FEFEFEFEFEF9=z8z /F7W1F7rF"J% F7F7W2F7F7F7F7'z& F6F6F6F6F6F7WDE5F6F6F6F6F68$J% F9F9F9WFF9F9F9F7 Js$8# 4FEE5FEFEFEFEJ' 6E5E5E5E5E5E5J#:"8"8%8& :FEFEFEFEFEFEFEFEFEFEE5FEFEJ"8)9" @E5E5E5FEFEE5E5FEFEFEJ$J# 6FEFEFE6E5E5J$D#;" 6E5E5E5FEFEE5J% GE5E5E5E5J":# DFEFEFEJ+ AE5FEFEE5E5FEFEFEFEE5J#:&9#8%8# 4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 H5 W+FFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFH5 W*FEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFH#Z FFFEW'H# FEFFH#J$J"J":&9$>"E$<$J"J"J"9"C"=#J"B$8#A":#J" FFFECFEFEFE@FE8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECFEBFEO"FEFEFEFEFEGFEFEFEFEFEFEFEFEFECFEH#J"?$J#J#<%8&<#E#<%G"F#J#J#9"C"="H"I#B(A#:"J#9" FEFF8FEFEFFFF@FEFF6FEFEFFFFFFFFFEFFFFFFFEFEFFFFFFFEFFFFFFFEFEFFAFEFFO!FEFFFFFFFFFEFEFEFEFFFFFFFEFFFFFEFFFFCFEFFFEH#J#J# FFFEP!FFFFS&FFFFH#>&8&9&;#:#:$8&:$<#9$8#8)J)8#8#?&9$9&8&9$<):$9&9$<#9$:$8&8&:$8&<#8$9,;$:&8$9&9$J$<#9$:$8&:$:$<#8& FEFFFEFEFEFFFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEFFFEFEFEFEFEFEFEFFFEFFFEFEFE;FEFFFFFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFE@FEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEH#>.8&@%8-8&?(9"8'@$9"8#>)9"@&8&8&8&8&>'8&8&8&?&848-?#:+;%9-8&8&J%?%9-8&8&?& FFFEFFFEFFFEFFFEFFFFFEFEFFFFFEFFFEFFFFFFFEFFFFFEFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFFFFFFFEFEFFFFFEFEFEFEFFFEFFFFFEFFFEFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFEFFFEFFFEFEFFFFFFFEFFFEFFFFFFFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFFFEFFFEFFFEFFFFFEFFFEFFFEFEFFFFFFFEFFFFFEFEFFFFFEFFFFFFFEFFFFFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFFFFFFFEFFFEFFFFFFFEFFFFFFFE?FFFFFFFEFEFFFFFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFFFEFFFFH#G"D#:"J$;#9&@"B&:#;#J$G&:#A$D":#="J"=#B"J$@&8&J#A$G&:#:$ FEFFFFFEFFFF4FEFEFEFEFFFFFEFEFEFFFFFFFFFFFFFEFEFFFEFF@FEFEFEFFFEFEFEFFFEFFFEFEFEFFFEFFFF?FFFEFFFE:FEFEFEFFFEFEFEFFFEFEFEFEFE@FEFFFEFEFEFFFEFEFEFFFEFFFEFFFEH#J%@%J#J%G%G%J%@%8PJ%G%@$ FFFEO-FFFFFFFFFFFFFFFE?FEFFHFFFFFFFFFFFFFFFEFFFFFFFFP0FFFFFFFFFFFFFFFEMFFFFFFFFFFFFFFFEFFFFFFH#J"8#J"9#:"J"=#8"9#J"D$=#E"C"9#>"J#A&J"=$J#E"F"=# FEFF<FEFEFF=FEFEFFFE:FEFEFFFEFEFFDFEFEFFFEFEFFFEFEFEFFFEFFEFFFFFEFFFEFF;FEFEFFFEJFEFFFEFEFEFFH#>";%9"8&=0;(?&8*9/9$?";59&8%:,>";(8%9&?&8(;#;,9">&?&8,9&9,?&9";-?/;(8& FFFEFEFEFEFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFEFEFFFFFEFEFEFEFFFEFEFEFE4FEFFFFFEFEFEFFFEFFFEFEFEFEFEFEFFFEFEFEFEFFFEFEFEFFFEFEFEFEFFFEFEFEFFFFFFFEFEFEFFFEFEFFFFFEFEFEFFFEFEFEFEFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFFFEFFFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFH#>U8#9$8#:R8$8R8$9#<$:S8S8%9P8#:R8Z:$9%;$9$9#:R8$9%:$9#<$:$8Y8$8$8&;P9$9P9P8$:$;$9$@P9"<$8P9#<P8$8R8$:$9# FEFFFFFFFFFFFFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFEFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFEFFH#J"J"J"J"J"J"J"J" FFFE>FFBFFO"FFO0FFBFFO"FFP%FFIFFH$rJ% FEFFFFFET-FEFEFEFFH#SJ$ FFFET-FFFFFFH# FEFFH" FFHz W+E5 J&9#J#D#Js$ 4FEFEFEFEFEFEFE5FEFEFEFEQ@FEE5FEFEJ%8#J#J' 6E5E5FEFEE5E5EE5E5QBE5E5E5E5E5E5J29%8"8"8%8(8%9%J#;%9% 8E5FEFEE5FEFEE5FEFEE5FEFEE5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5FEFEFEFEFEFEFEFEFEFEFEFEQ9FEFEFEFEFEFEFEFEFEFEJ"808)9";.J. AFEFEFEE5E5FEFEE5FEFEE5E5FEFEE5E5E5E5FEFEE5E5FEFEFEFEFEE5E5FEFEE5FEFEE5E5FEFEQ>FEFEE5E5FEFEE5FEFEE5E5FEFEJ#A#F#B%J$F% BE5E5E5E5E5E5FEE5E5E5Q4FEFEFEFEE5E5E5J":#J"=#9&J$?#9& AE5FEFE8E5FEFEE5E5FEFEFEQ5E5E5E5FEFEE5E5FEFEFEJ%J%9"8"J%9"8" FE5E5E5E5>E5E5E5E5E5FEQ@E5E5E5E5E5FEJ$C#;#;"I(J( 8FEFEE5FEFEFEFEFEFEFEE5FEFEE5E5QDFEFEE5FEFEE5E5J%@.8+?.J. 6FEFEFEE5E5FEFEFEFEE5E5E5FEFEFEFEE5E5FEFEE5E5FEFEFEFEE5E5FEFEFEFEE5E5E5FEFEFEFEE5Q>E5FEFEFEFEE5E5E5FEFEFEFEE5J&9&:%9%:#8%8#9#8%9%J#:&8%9% 4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5Q3E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 H5=zB5=z QKFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFF3E4QKFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFF3E4H5J"B5J" QJFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFF:FFQJFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFF:FFH5Ar"r"C#ZAr"r" QIFFFEDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEDEE4DEFFFFFEQGDEE4DEFFH#z"G"J#J" FEFFQFDEFEFF6FEFFR*FFH#<"9"C"=#J"B$8#A":#J"J"I"J#J"J" FFFEFEFEFEFEFEGFEFEFEFEFEFEFEFEFECFE=DEE44FFFEBFEQ7E4H#;#9"C"="H"I#B(A#:"J#J"F"J#J(A"<"H&J" FEFFFEDEDEDEDEFEFEFEFEDEDEDEFEDEDEFEDEDECFEDE=FEFF7FEFFAFEFFFEFEFEFEFEFEFEFEFEFEFEFEP3FFH#J#J"H$I#J'J'J$ FFFEO9DEDEP+DEE5E4E4FFFECFFFEFFFFFFFEDFFFEFFFFFFFEP4E5E4E4H#:#8$9,;$:&8$9&9$J$<#9$:$8&:$:$<#J"E$J#8$8&:$:$<#>#8#8&8&9$8&A$8(J$ FEFFFEDEFEFEFEFEFEFEDEFEFEFEDEFEFEFEFEFEFEFEFEFEDEFEFEFEFEFEFEFEFEFEFEFEFE@FEFEFEFEDEFEFEFEFEFEFEFEFEFEDEFEFEFEFEFEFEFEFEDE>FEFFFFE56FEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEP"FFFFE5H#>#:+;%9-8&8&J%?%9-8&8&J"I$H08&8&@'9"9&8&8-9%8)9#J$ FFFEDEDEDEFEDEDEDEFEDEDEDEDEFEDEDEDEFEDEDEDEFEDEDEFEDEDEDEFEDEFEDEDEDEFEDEDEDEFE?DEDEDEFEFEDEDEDEFEDEDEDEFEDEDEFEDEFEDEFEFEDEDEDEFEFEDEDEDEFEEDEE5E4E4FFFEFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFEFEFEFFFFFFFFFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFEFEFEFFFEFFFFFFFEFFFFFFFFFFP&E5E4E4H#9#B"J$@&8&J#A$G&:#J"D$J#8$G&:#:%J"<%@$J$ FEFFFEDEFE:FEFEFEDEFEFEFEDEFEFEFEFEFE@FEDEFEFEFEDEFEFEFEDEFEDE?FEFFFFE57FEFFFEFEFEFFFEFEFEFFFEFFFFFFFFFE?FFFFFFFFFEFFFEFFP#FFFFE5H#J%@%8&J%G%J"J$G#8%G%J$J$ FFFELDEDEDEDEDEDEDEFEDEDEDEDEDEMDEDEDEDEDEDEDEFEEDE4E5E4E4FFFEFFFFFFFFFFFFFFFEO4FEFFFEP)E5E4E4H#8#A&J"=$J#E"F"=#J"C$J#;"F"=#J"<"J&J$ FEFFFEDEDEFEDEFEDE;FEFEDEFEJFEDEFEFEFEDE@FEFFFFE58FEFFFEFEFEFF7FEFE=FEFFFFFFFEP!FFFFE5H#>&?&8,9&9,?&9";-?/;(8&@"J"J$F+;(8&>'8'8&809(8(;"J$ FFFEFEFEFEFEFEFEFEFEFEFEDEFEFEFEDEFEDEDEFEFEFEDEFEFEFEDEDEFEFEFEDEDEDEFEFEFEDEFEFEFEFEFEFEDEFEFEFEDEDEFEDEFEFEFEDEDEFEFEFEDEFEDEDEFEFEFEDEDEFEFEDEDEFEFEFEDEDEFEFEFEDEFE:DE5E5E4E4FFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFFFEFEFEFFFEFFFEFEFEFFFFFEFEFEFFFFFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEP(E5E4E4H&;&9$9&9&8$:$;$9$@&9"<$8&9#<&8$8r8$:$9#<"J"B$J#8$8R8$:$9#:P:P9$:$9$8$8R:$8#9#J$ FEFFDEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEDEDE:FEFFFFE59FEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFOMFFFFE5H%J"J"J"J$E#J"J$ FFFEDEDEP%DEIDEBDE6E5E4E4FFFE=FFQ?E5E4E4H#J%J"A#uG#J#u FEFFEFEFEFEDEPKFEFFFFE4FEFFR$FFFFE4H#J$J"B"B"D#J"B" FFFEEDEDEDEPLDEE4E4FFFER%E4E4H5AzD#Jz QIFEFFFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFE/DEFEFFR$/DEH#ZAZD#JZ FFFEQG/FFFER$/H#J"D#J" FEFFR2E4FEFFR2E4H#<"9"C"=#J"B$8#A":#J"Jv"E#J"@"A$Jv" FFFEFEFEFEFEFEGFEFEFEFEFEFEFEFEFECFEKE5E4FFFEBFEFEFEFEFEPFE5E4H#;#9"C"="H"I#B(A#:"J#J#J(;"A# FEFFFEFFFFFFFFFEFEFEFEFFFFFFFEFFFFFEFFFFCFEFFO8FEFFAFEFFFEFEFEFEFEFFFFFFH#J#J#J' FFFEO9FFFFQ&FFFECFFFEFFFFFFFEH#:#8$9,;$:&8$9&9$J$<#9$:$8&:$:$<#J#8$8&:$:$<#?$:%A$:& FEFFFEFFFEFEFEFEFEFEFFFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFE@FEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFO9FEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEH#>#:+;%9-8&8&J%?%9-8&8&J08&8&F#;&?&8' FFFEFFFFFFFEFFFFFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFFFFFFFEFFFEFFFFFFFEFFFFFFFE?FFFFFFFEFEFFFFFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEO@FFFEFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFFFFFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFH#9#B"J$@&8&J#A$G&:#J#8$G&:#H$ FEFFFEFFFE:FEFEFEFFFEFEFEFFFEFEFEFEFE@FEFFFEFEFEFFFEFEFEFFFEFFO:FEFFFEFEFEFFFEFEFEFFFEFFFEFEFEH#J%@%8PJ%G%J#8%G%J% FFFELFFFFFFFFFFFFFFFEMFFFFFFFFFFFFFFFEO@FFFEFFFFFFFFFFFFFFFE7FEFFFFFFH#8#A&J"=$J#E"F"=#J#;"F"=# FEFFFEFFFFFEFFFEFF;FEFEFFFEJFEFFFEFEFEFFO;FEFFFEFEFEFFH#>&?&8,9&9,?&9";-?/;(8&@"<"J+;(8&>'8&848% FFFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFFFEFFFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEO.FFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFEFEFFFEFEFEFFFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEH&;P9$9P9P8$:$;$9$@P9"<$8P9#<P8$8R8$:$9#<"<"J#8$8R8$:$9#:P9P9W8$:$ FEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFO.FEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFH%J"J"J#J" FFFEFFFFP%FFIFFO=FFFE=FFH#J%J#J% FEFFEFEFEFEFFQFFEFFO:FEFEFEFFH#J$J#J$ FFFEEFFFFFFQGFFFEO:FFFFFFH#J# FEFFRAFEFFH#J# FFFERAFFFEH#J# FEFFRAFEFFH#<"9"C"=#J"B$8#A":#J"J#J"@"A$J#C$:$ FFFEFEFEFEFEFEGFEFEFEFEFEFEFEFEFECFEO8FFFEBFEFEFEFEFE8FEFEFEFEFEFEFEFEH#;#9"C"="H"I#B(A#:"J#8$8(8%J#J(;"A#J'D#;# FEFFFEFFFFFFFFFEFEFEFEFFFFFFFEFFFFFEFFFFCFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEO$FEFFAFEFFFEFEFEFEFEFFFFFF4FEFEFEFEFFFFFFFFFFFFH#J#J3J#J'J% FFFEO9FFFFO=FEFFFFFFFEFFFFFEFFFFFFFEFFFFFEFFFFFFO%FFFECFFFEFFFFFFFEEFEFFFFFFH#:#8$9,;$:&8$9&9$J$<#9$:$8&:$:$<#J"J#8$8&:$:$<#?$:%A$:&;":#:$ FEFFFEFFFEFEFEFEFEFEFFFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFE@FEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFF4FFO$FEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFFFEFEFEFEFEH#>#:+;%9-8&8&J%?%9-8&8&C"9$:#J08&8&F#;&?&8'8#;%8& FFFEFFFFFFFEFFFFFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFFFFFFFEFFFEFFFFFFFEFFFFFFFE?FFFFFFFEFEFFFFFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFEFFFEFEFEO&FFFEFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFFFFFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFEFEFEFFFFFEFEFFFFFFFEH#9#B"J$@&8&J#A$G&:#@"9"8&J#8$G&:#H$J&9"<$ FEFFFEFFFE:FEFEFEFFFEFEFEFFFEFEFEFEFE@FEFFFEFEFEFFFEFEFEFFFEFFFFFFFFFFFEFEFEO$FEFFFEFEFEFFFEFEFEFFFEFFFEFEFE8FFFFFEFEFEFFFEFEFEH#J%@%8PJ%G%C"A#J#8%G%J%J#A% FFFELFFFFFFFFFFFFFFFEMFFFFFFFFFFFFFFFEFEFFFFO%FFFEFFFFFFFFFFFFFFFE7FEFFFFFF:FFFFFFFFFFFFH#8#A&J"=$J#E"F"=#C":"J#;"F"=#J"G" FEFFFEFFFFFEFFFEFF;FEFEFFFEJFEFFFEFEFEFFFEFEO(FEFFFEFEFEFFO FEFEH#>&?&8,9&9,?&9";-?/;(8&?&9$:%J+;(8&>'8&848%:38. FFFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFFFEFFFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFFFEFEFEFFO$FFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFEFEFFFEFEFEFFFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEH&;P9$9P9P8$:$;$9$@P9"<$8P9#<P8$8R8$:$9#<$;":%J#8$8R8$:$9#:P9P9W8$:$9%8R8$9X FEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFO%FEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFH%J"J"J#J" FFFEFFFFP%FFIFFO=FFFE=FFH#J%J#J% FEFFEFEFEFEFFQFFEFFO:FEFEFEFFH#J$J#J$ FFFEEFFFFFFQGFFFEO:FFFFFFH#J# FEFFRAFEFFH#J# FFFERAFFFEH#J# FEFFRAFEFFH#J#J"J"A$=# FFFERAFFFEBFEMFEFEFEFEFEFEH#J#J)@"H':"A#>" FEFFRAFEFFAFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFH#J#J&J& FFFERAFFFECFFFEFFFFFF>FFFEFFFFFFH#J#8$8&:$:$<#:*9&8.9":$;$A$ FEFFRAFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFFFFFFFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEH#J08&8&@":'8&8#P'8"8"8#;&?% FFFERAFFFEFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFEFFFEFEFFFFFEFFFEFFFFFFFFFEFEFFFFFFFEFFFEFFFFFFFEFFFFFFFEFEFFFFFFH#J#8$G&:#:"<"J"C$ FEFFRAFEFFFEFEFEFFFEFEFEFFFEFFFFFF;FFFEFEFEH#J#8%G%A"J&:"B% FFFERAFFFEFFFFFFFFFFFFFFFEFF9FFFEFFFEFFFFFFFFFFFFH#J#;"F"=#>"D"@"J" FEFFRAFEFFFEFEFEFFFEFEFE6FEH#J+;(8&>&8$9"8+:$8%:&8&8. FFFERAFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFFFFFEFEFEFEFFFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFEFEFEFEFEFFFFFEFEFEFFFEH#J#8$8R8$:$9#:U8#9$8%?%:P9$9Q8P FEFFRAFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFH#J#J" FFFERAFFFE=FFH#J#J$ FEFFRAFEFFO2FEFEFFH#J#J# FFFERAFFFEO2FFFFH#J# FEFFRAFEFFH#J# FFFERAFFFEH#J# FEFFRAFEFFH#J#J"@":$J$J" FFFERAFFFEBFEFEFEFEFE9FEFEFE;FEH#J#J):":#C%?#J"="G& FEFFRAFEFFAFEFFFEFEFEFEFEFEFFFFFFFEFEFEFEFFFF4FEFFFEFEFEFEFEH#J#J&J%J' FFFERAFFFECFFFEFFFFFF8FEFFFFFFO,FFFEFFFFFFFEH#J#8$8&:$:$<#:":$B$="9$A$:$9&8$;$8&A$8( FEFFRAFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEH#J08&8&@"8"8#B&9#:&?&8&8&8#;-9%8)9# FFFERAFFFEFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFFFFFEFEFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFEFFFFFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFEFEFEFFFEFFFFFFFEFFFFFFFFFFH#J#8$G&:#:"J$9&9$A$="J"<%@$ FEFFRAFEFFFEFEFEFFFEFEFEFFFEFFFF4FEFEFEFFFFFEFEFEFEFEFEFEFEFEFF8FFFFFFFFFEFFFEFFH#J#8%G%A"I%:#:%@%J$ FFFERAFFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFO&FEFFFEH#J#;"F"=#J"8"@"C"<"="J& FEFFRAFEFFFEFEFEFF=FEFEFEFEFEFEDFEFFFFFFFEH#J+;(8&>%:&8-9%8&8-8&9,8*9(8(;" FFFERAFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEH#J#8$8R8$:$9#:%:P8Q8$9%:$9Q8$:$;$8P9$8$8R:$8#9# FEFFRAFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFH#J#J" FFFERAFFFE=FFH#J# FEFFRAFEFFH#J#Jv FFFERAFFFER&E4H#J#J" FEFFRAFEFFR%E4H#J5Az FFFERAQIFFFEDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDEFFDE/DEH#J#z" FEFFRAFEFFQFDEFEH#J#J"@":$J$J"J"A$J" FFFERAFFFEBFEFEFEFEFE9FEFEFE;FE;FEFEFEFE9DEH#J#J):":#C%?#J"="G&;"A#J" FEFFRAFEFFAFEDEFEFEFEFEFEFEDEDEDEFEFEFEFEDEDE4FEDEFEFEFEFEFEDEDEDE:FEH#J#J&J%J'J" FFFERAFFFECDEFEDEDEDE8FEDEDEDEO,DEFEDEDEDEFELDEH#J#8$8&:$:$<#:":$B$="9$A$:$9&8$;$8&@$:%A$:&>" FEFFRAFEFFFEFEFEFEFEFEDEFEFEFEFEFEFEFEFEDEFEFEFEFEFEFEFEDEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEFEFEH#J08&8&@"8"8#B&9#:&?&8&8&8#;-?#;&?&8'>" FFFERAFFFEDEFEDEDEDEFEDEDEFEDEFEDEFEFEDEDEDEFEFEDEDEDEFEFEDEDEDEFEDEDEDEFEFEFEFEDEDEDEFEFEDEDEDEFEFEDEDEDEFEDEFEDEDEDEDEDEFEDEDEDEFEDEDEFEFEDEDEFEDEDEDEDEDEDEFEFEDEDEDEFEFEDEDEDEFEDEDEH#J#8$G&:#:"J$9&9$A$="J"J$J" FEFFRAFEFFFEFEFEDEFEFEFEDEFEDEDE4FEFEFEDEDEFEFEFEFEFEFEFEFEFEDE8DE4FEFEFE?FEH#J#8%G%A"I%:#:%@%J%J" FFFERAFFFEDEDEDEDEDEDEDEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEO%FEDEDEDE?DEH#J#;"F"=#J"8"@"C"<"="J" FEFFRAFEFFFEFEFEDE=FEFEFEFEFEFEO9FEH#J+;(8&>%:&8-9%8&8-8&9,8*9(8&848%@" FFFERAFFFEDEDEFEFEFEDEDEFEFEDEDEFEFEFEDEDEFEFEFEDEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEDEFEFEFEDEFEFEFEDEDEFEFEFEDEFEFEFEFEFEFEDEDEFEFEFEDEDEFEFEFEDEDEFEFEFEDEDEFEFEFEFEFEDEFEFEFEDEDEFEFEFEFEFEFEFEFEFEDEFEFEFEFEFEDEFEFEFEDEFEDEFEFEFEFEFEFEDEDEFEFEFEDEDEFEFEFEDEH#J#8$8r8$:$9#:%:&8'8$9%:$9'8$:$;$8&9$8$8r9&9w8$:$@" FEFFRAFEFFDEDEDEDEDEDEDEDEDEDEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEH#J#J"J" FFFERAFFFE=DEQ(DEH#J#J%?" FEFFRAFEFFQ9FEFEFEDEFEH#J#J$@" FFFERAFFFEQ9DEDEDEDEH#J5 FEFFRAQIFEFFFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEDEFEH#J#Z FFFERAFFFEQGH#J# FEFFRAFEFFH#J#J"D#C$D#A"=# FFFERAFFFEBFEFEFEFEFEFEFEFEFEFEFEH#J#J&A"D#E"8(9"="H" FEFFRAFEFFAFEFFFEFEFEFFFFFFFFFEFEFEFFFEFEFEFFFFFEH#J#J$J( FFFERAFFFECFFFEFFO FFFEFFFFFFFEFFH#J#8$8&:$:$<#?%:$:$A$:$;":$;$:&8$9& FEFFRAFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEH#J08&8&F&9%8&?&8%@#;%9-8& FFFERAFFFEFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFFFFFFFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFFFFFFFEFFFEFFFFFFH#J#8$G&:#A$A$A$J$ FEFFRAFEFFFEFEFEFFFEFEFEFFFEFFFEFEFEFEFEFEFEFEFEGFEFEFEH#J#8%G%C"8%A%@%@$J% FFFERAFFFEFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFEFFFE9FFFFFFFFH#J#;"F"=#J"C"?"9"J"=" FEFFRAFEFFFEFEFEFF=FEFEFFFF;FEFEH#J+;(8&>&9-8&8-8'>&8,9&9& FFFERAFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFFFEFEFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFH#J#8$8R8$:$9#:Q9U:$9Q8$:P8$9P9P8$:$;$ FEFFRAFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFH#J#J" FFFERAFFFE=FFH#J#J% FEFFRAFEFFP/FEFEFEFFH#J#J$ FFFERAFFFEP/FFFFFFH#J# FEFFRAFEFFH#J# FFFERAFFFEH#J# FEFFRAFEFFH#J#J"J"A$ FFFERAFFFEBFEO-FEFEFEFEH#J#J%9#J&;"A# FEFFRAFEFFAFEFFFEFEFEFEJFEFEFEFEFEFFFFFFH#J#J(J' FFFERAFFFECFFFEFEFFFEFEFFJFFFEFFFFFFFEH#J#8$8&:$:$<#@$:$:$9%:&8$@$:%A$:& FEFFRAFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEH#J08&8&@$9&8&8&8&8-?#;&?&8' FFFERAFFFEFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFEFFFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFFFFFFFEFEFFFFFFFEFFFFFEFFFFFFFEFFFFFFFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFH#J#8$G&:#A$9&8&9$A$H$ FEFFRAFEFFFEFEFEFFFEFEFEFFFEFFFEFEFEFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFEFEFEH#J#8%G%G%9%9%8%A%F% FFFERAFFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFEFFFFFFFEFEFFFFFFFFFFFFFFFEFFFFFFH#J#;"F"=#<">"8"<"J" FEFFRAFEFFFEFEFEFFFFFEFEFE8FEH#J+;(8&>.8&8&8,9-8&848% FFFERAFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFEFEFFFEFEFEFEFEFFFEFEFEFFFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEH#J#8$8R8$:$9#:R8$:$:$:P8$:$8P9P9W8$:$ FEFFRAFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFH#J#J" FFFERAFFFE=FFH#J#J%J% FEFFRAFEFFO:FEFEFEFFMFEFEFEFFH#J#J$J$ FFFERAFFFEO:FFFFFFO FFFFFFH#J# FEFFRAFEFFH#J# FFFERAFFFEH#J# FEFFRAFEFFH#J#J"J" FFFERAFFFEBFE8FEH#J#J#8$A"="G#9# FEFFRAFEFFAFEFFFEFEFEFEFFFEFEFEFEH#J#J&J( FFFERAFFFEDFEFFFFFFFEDFFFEFEFFFEFEFFH#J#8$8&:$:$<#>&9&8$;$8&A$8&8#8# FEFFRAFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEH#J08&8&E'8&8#;-9$9/9" FFFERAFFFEFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFFFEFFFFFFFEFFFEFFFFFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFFFEFFFEFFFFFFFEFFFFFEFEFFFFFEFFFFFFH#J#8$G&:#J"C$:" FEFFRAFEFFFEFEFEFFFEFEFEFFFEFFGFFFEFEFEFFH#J#8%G%J% FFFERAFFFEFFFFFFFFFFFFFFFEO-FFFFFFFFH#J#;"F"=#J"J">" FEFFRAFEFFFEFEFEFF7FE8FFFEH#J+;(8&?&9%9,8*939) FFFERAFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFFFEFEFEFFFFFEFEFEFEFEFEFEFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFFFFFEFEFEFFFEH#J#8$8R8$:$9#<$:$;$8P9$8$8T8$8$8#8P FEFFRAFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFH#J#J" FFFERAFFFE=FFH#J#J$ FEFFRAFEFFJFEFEFEH#JvF#J$ FFFER&E4FFFEJFFFFFFH#J"J# FEFFR%E4;FEFFH#JzD# FFFER$/DEFFFEH#JZD#JZ FEFFR$/FEFFR$/H#J"C"D#J"J#A"D#J"C" FFFER$DEE4FFFEBFE@FEFEFEFEFEOMDEE4H#Jt$D#J(J"8(9"D"Jt$ FEFFR'E5E4E4DEFEFFAFEFFFEFEFEFEFE;FFFEFEFEFFFEFEFEFFFFP#E5E4E4DEH#J$J#J'J(J$ FFFER%DEFFFF9FFFECFFFEFFFFFEFE=FFFEFFFFFFFEFFP4DEFFFFH#J$E#8$8&:$:$<#;"9%8&:$:$;":$9&:$:$8(J$ FEFFR/E4E4DEFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFFFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEOIE4E4DEH#J$J08&8&B"9-8&8%@#:'8%9.J$ FFFER&DEFFFF8FFFEFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFFFEFFFFFEFEFFFFFEFEFFFFFFFEFEFFFFFFFFFFFFFEFEFFFFFEFEFFFFFFFEFFFFFFFEFFFFFEFFFFFFFEFFO@DEFFFFH#J$F#8$G&:#:%9$:"<$J"J"J$ FEFFR.E4E4DEFEFFFEFEFEFFFEFEFEFFFEFFFEFEFEFFFEFEFEFFFEFEFE9FF5FEOKE4E4DEH#J$J#8%G%@$9%A%@$J$ FFFER'DEFFFF7FFFEFFFFFFFFFFFFFFFEFFFFFFFEFFFFFFFFFFFFFFFEFFFEP8DEFFFFH#J$G#;"F"=#J"?"9"J&J$ FEFFR-E4E4DEFEFFFEFEFEFF=FEFFFF>FFFEFFFEFFOHE4E4DEH#J$J+;(8&>%:*9(8'>*9/J$ FFFER(DEFFFF6FFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFFFEFEFEFFFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFOJDEFFFFH#J$H#8$8R8$:$9#:%;S8#8$:P8$9T8#8P8$:$J$ FEFFR,E4E4DEFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFOHE4E4DEH#J$J#J"J$ FFFER)DEFFE45FFFE=FFQ9DEFFE4H#J"I#J" FEFFR-DEFEFFR-DEH#J"J#J" FFFER*DE6FFFER*DEH#J"J#J" FEFFR,DE4FEFFR,DEH#JZD#JZ FFFER$/FFFER$/H#J"J#J" FEFFR#FF=FEFFR#FFHz=zBz=z QKE53E5QKE53E5 HzJz QKE4FQKE4J"J" R.FFRBFFJy"zZ$x"Jy"zZ$x" 4DEFFP DEO(DEFFFFDEFFIDEFFP+DEKDEFFFFDEFFJ$J"9#J$J"9# @FFFFE4Q'E4FFFFO3FFFFE4Q'E4FFFFJ%Jz"<#J%Jz"<# >FFFFFFE4P#O$E5E4FFFFO/FFFFFFE4P.GE5E4FFFFJ#8"J#8#J#8"J#8# <FFFFE5Q-E5E5FFFFO+FFFFE5Q-E5E5FFFFJ#8#J#8#J#8#J#8# :FFFFE5E5Q0E5E5FFFFO'FFFFE5E5Q0E5E5FFFFJ#8#J#8#J#8#J#8# 8FFFFE5E5Q4E5E5FFFFO#FFFFE5E5Q4E5E5FFFFJ#8#J#8#J#8#J#8# 6FFFFE5E5Q8E5E5FFFFMFFFFE5E5Q8E5E5FFFFJ'J&J'J& 4E4E4E4E4E5E5Q<E5E4E4E4E4JE4E4E4E4E5E5Q<E5E4E4E4E4J#8#J"9"J#8#J"9" 4DEDEE4E4Q<E4DEJDEDEE4E4Q<E4DEJ#8#J#8#J#8#J#8# 6DEDEE4E4Q8E4E4DEDEMDEDEE4E4Q8E4E4DEDEJ#8#J#8#J#8#J#8# 8DEDEE4E4Q4E4E4DEDEO#DEDEE4E4Q4E4E4DEDEJ#8#J#8#J#8#J#8# :DEDEE4E4Q0E4E4DEDEO'DEDEE4E4Q0E4E4DEDEJ#8"J#8#J#8"J#8# <DEDEE4Q-E4E4DEDEO+DEDEE4Q-E4E4DEDEJ#Jz=#J#Jz=# >DEDEP%O$E4DEDEO/DEDEP0GE4DEDEJ#J"J$J#J"J$ @DEDEP"E4O(E4DEDEO3DEDEP-E4KE4DEDEJZJZ 4QGJQGI"J" FFRBFFHzJz QKE5FQKE5 J&?#F#8# 5FEFEFEFEFEFEFEFEFEFEFEJ(J# 4FEFEE5E5E5FEFE>E5E5J%<%9%8"8%8%8& =FEFEFEFEFEFEFEFEFEFEFEFEFEFEE5FEFEFEFEFEFEFEFEE5FEFEJ/:08":'9% 4E5FEFEFEE5E5E5E5FEFEE5E5FEFEFEFEE5E5FEFEE5FEFEE5E5FEFEE5E5E5FEFEE5E5FEFEFEE5FEFEJ&J#H" 5E5E5FEFEFE7E5E5E5J"8"9#># 7E5FEFEFEFEFEJ#8";%<% 4FEFEE5E5E5E5E5E5E5E5E5J#>#;#;" @FEFEFEFEFEFEFEJ/:.8%9' 4E5FEFEFEFEFEE5E5E5FEFEFEFEE5E5FEFEFEFEE5E5E5FEFEFEFEE5E5FEFEE5E5FEFEFEFEE5J&9%8#8%9%:&8%8#8# 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 Fz W/FE H5 W+FFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFH5 W*FEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFFEFFH#Z FFFEW'H#J# FEFFVMFEFEH#?$<$J"J"J"9"C"=#J"B$8#A":#J"@":$J$J"J"A$ FFFEFEFEFEFEFEFECFEBFEO"FEFEFEFEFEGFEFEFEFEFEFEFEFEFECFEFEFEFEFE9FEFEFE;FE;FEFEFEFEH#?#<%G"F#J#J#9"C"="H"I#B(A#:"J):":#C%?#J"="G&;"A# FEFFFFFFFEFFFFFFFEFEFFAFEFFO!FEFFFFFFFFFEFEFEFEFFFFFFFEFFFFFEFFFFCFEFFFEFEFEFEFEFEFFFFFFFEFEFEFEFFFF4FEFFFEFEFEFEFEFFFFFFH#J#J&J%J' FFFER5FFFFO<FFFEFFFFFF8FEFFFFFFO,FFFEFFFFFFFEH&8#?&9$9&8&9$<):$9&9$<#9$:$8&8&:$8&<#8$9,;$:&8$9&9$J$<#9$:$8&:$:$<#:":$B$="9$A$:$9&8$;$8&@$:%A$:$ FEFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFEFEFEFEFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFE@FEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEH%9"@&8&8&8&8&>'8&8&8&?&848-?#:+;%9-8&8&J%?%9-8&8&@"8"8#B&9#:&?&8&8&8#;-?#;&?&8& FFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFEFFFEFFFEFEFFFFFFFEFFFEFFFFFFFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFFFEFFFEFFFEFFFFFEFFFEFFFEFEFFFFFFFEFFFFFEFEFFFFFEFFFFFFFEFFFFFFFEFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFFFFFFFEFFFEFFFFFFFEFFFFFFFE?FFFFFFFEFEFFFFFFFEFFFFFFFEFFFFFEFFFEFFFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFFFFFEFEFEFEFFFFFFFEFEFFFFFFFEFEFFFFFFFEFFFEFFFFFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFFFFFFFFFFFFFEFEFFFFFFFEFEFFFFFFFEH#J$G&:#A$D":#="J"=#B"J$@&8&J#A$G&:#:"J$9&9$A$="J"J$ FEFF8FEFEFEFFFEFEFEFFFEFFFEFEFEFFFEFFFF?FFFEFFFE:FEFEFEFFFEFEFEFFFEFEFEFEFE@FEFFFEFEFEFFFEFEFEFFFEFFFF4FEFEFEFFFFFEFEFEFEFEFEFEFEFEFF8FF4FEFEFEH#J%G%G%J%@%8PJ%G%A"I%:#:%@%J% FFFE8FFFFFFFFFFFFFFFEFFFFFFFFP0FFFFFFFFFFFFFFFEMFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFO%FEFFFFFFH#J"D$=#E"C"9#>"J#A&J"=$J#E"F"=#J"8"@"C"<"=" FEFF;FEFEFFFEFEFFFEFEFEFFFEFFEFFFFFEFFFEFF;FEFEFFFEJFEFFFEFEFEFF=FEFEFEFEFEFEH#839&8%:,>";(8%9&?&8(;#;,9">&?&8,9&9,?&9";-?/;(8&>%:&8-9%8&8-8&9,8*9(8&848% FFFEFFFEFEFEFFFEFFFEFEFEFEFEFEFFFEFEFEFEFFFEFEFEFFFEFEFEFEFFFEFEFEFFFFFFFEFEFEFFFEFEFFFFFEFEFEFFFEFEFEFEFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFFFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFFFFFEFEFEFFFEFEFEFEFEFEFFFEFEFEFFFFFEFFFEFEFEFFFFFEFEFEFFFEFFFFFEFEFEFFFFFEFEFFFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFEFEFEFFFEFEFEFFFFFEFEFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFFFFFEFEFEFEFEFFFEFEFEFFFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFFFEFEFEFFFEFFFEFEFEFEFEFEFFFFFEFEFEFFFFFEFEFEH#9Z:$9%;$9$9#:R8$9%:$9#<$:$8Y8$8$8&;P9$9P9P8$:$;$9$@P9"<$8P9#<P8$8R8$:$9#:%:P8Q8$9%:$9Q8$:$;$8P9$8$8R9P9W8$:$ FEFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFH#J"J"J"J"J" FFFEO%FFBFFO"FFP%FFIFFH#J%J% FEFFQAFEFEFEFFS$FEFEFEFFH#J$JQ FFFEQAFFFFFFS%H# FEFFH" FFHz W+FE Fz W/E5 <z WDE4=z" WBE5FF=Z WB<z WDE5 Jz AOAE4J" P3FFJz" CO=E5FF JZJZJZJZ GO5FO5FO5FO5J"J"J"J" P-E4P,E4P,E4P,E4Jz"Jz"Jz"Jz" IO1E5E4IO1E5E4IO1E5E4IO1E5E4 J%:#9#Js$8#J%J#J#9#># O3FEFEFEFEFEFEFEFEODFEE5FEFEFEFEOJFEFEFEFE=FEFEO<FEFEFEFEFEFEJ'=$J'J' O2FEFEE5E5FEFEFEFEE5OFE5E5E5E5E5E5P"FEFEE5E5FEFEJ$8$;$J#:"8"8%8&J$8(8&9%9%J%;& O1FEFEE5E5FEFEFEFEE5OKFEFEFEFEFEFEFEFEFEFEE5FEFEO:FEFEE5E5E5E5FEFEFEFEFEFEE5FEFEFEFEFEFEFEFEFEFEOIFEFEFEFEFEFEE5FEFEJ$J"8)9"J'93J'<% O=FEFEE5P$E5E5E5FEFEE5E5FEFEFEOCFEFEE5E5FEFEFEE5FEFEE5FEFEE5E5FEFEE5FEFEE5E5FEFEOGFEFEE5E5FEFEFEE5FEFEJ$J#J#=">#J$E" Q:FEFEFE6E5E5OAE5E5E5E5E5OHFEFEFEE5J$J$D#;"J$I#J$;# O=E5FEFEOHE5E5E5FEFEE5ODFEFEFEFEFEOCE5E5E5FEFEJ$J%J%I%J% O>E5FEFEP*E5E5E5E5OGFEFEE5E5E5E5E5E5OIE5E5E5E5J$8$<$J":#J$8#H#;#J#<" O1E5FEFEFEFEE5E5FEFEP&FEFEFEO@E5FEFEFEFEFEFEFEFEOKFEFEFEJ'>$J+J.=.J'<% O2E5FEFEFEFEE5E5FEFEP"E5FEFEE5E5FEFEFEFEE5OAE5FEFEFEFEE5E5FEFEFEE5FEFEE5FEFEFEFEE5E5E5FEFEFEFEE5OGE5FEFEFEFEE5E5FEFEE5J%:#:#J#:&9#8%8#J%8s8#8%9%8#J#9#8%8#:# O3E5E5E5E5E5E5E5E5OCE5E5E5E5E5E5E5E5E5E5E5E5E5E5E5O?E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5O<E5E5E5E5E5E5E5E5E5E5E5E5 J# V8E5E5 &J% F7F7F7F7F7WEF7F7F7F7&JzJzJzJzJ& F6F6F6F6F6DO1E4JO1E4JO1E4JO1E4EF6F6F6F6F68$J"J"J"J"J% F9F9F9CE4P,E4P,E4P,E4P)F9F9F9F7JzJzJzJz GO5E5FO5E5FO5E5FO5E5 JZ CO=J" BFFJz AOAE5 <z"z"z 0F6F7W!F6F71F6;z8z8z 1F9W F91F9 7z8z8z 5F7W F74F7"J"J" F76F7W!F7 ENDBITMAP %%EndBinary 369 447 495 465 R 7 X V 4 8 Q 0 X (f) 369 459.67 T (ileselectiondialog .fsd) 373.8 459.67 T (.fsd activate) 369 449.67 T 0 10 Q (FIGURE 34) 359.58 420.1 T 1 F ( - Fileselectiondialog) 410.98 420.1 T 0 0 612 792 C FMENDPAGE %%EndPage: "17" 17 %%Trailer %%BoundingBox: 0 0 612 792 %%PageOrder: Ascend %%Pages: 17 %%DocumentFonts: Times-Bold %%+ Times-Roman %%+ Times-BoldItalic %%+ Times-Italic %%+ Courier %%+ Courier-Bold %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/panedwindow.n��������������������������������������������������������������������0000644�0036047�0045461�00000023714�07476742024�015215� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) panedwindow.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::panedwindow iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::panedwindow \- Create and manipulate a paned window widget .SH SYNOPSIS \fBiwidgets::panedwindow\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Panedwindow .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the overall height of the paned window in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10 pixels. .LP .nf Name: \fBorient\fR Class: \fBOrient\fR Command-Line Switch: \fB-orient\fR .fi .IP Specifies the orientation of the separators: \fBvertical\fR or \fBhorizontal\fR. The default is horizontal. .LP .nf Name: \fBsashBorderWidth\fR Class: \fBBorderWidth\fR Command-Line Switch: \fB-sashborderwidth\fR .fi .IP Specifies a value indicating the width of the 3-D border to draw around the outside of the sash in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 2 pixels. .LP .nf Name: \fBsashCursor\fR Class: \fBCursor\fR Command-Line Switch: \fB-sashcursor\fR .fi .IP Specifies the type of cursor to be displayed in the sash. The default is crosshair. .LP .nf Name: \fBsashHeight\fR Class: \fBHeight\fR Command-Line Switch: \fB-sashheight\fR .fi .IP Specifies the height of the sash in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10 pixels. .LP .nf Name: \fBsashIndent\fR Class: \fBSashIndent\fR Command-Line Switch \fBsashindent\fR .fi .IP Specifies the placement of the sash along the panes in any of the forms acceptable to \fBTk_GetPixels\fR. A positive value causes the sash to be offset from the near (left/top) side of the pane, and a negative value causes the sash to be offset from the far (right/bottom) side. If the offset is greater than the width, then the sash is placed flush against the side. The default is -10 pixels. .LP .nf Name: \fBsashWidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-sashwidth\fR .fi .IP Specifies the width of the sash in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10 pixels. .LP .nf Name: \fBshowHandle\fR Class: \fBShowHandle\fR Command-Line Switch: \fB-showhandle\fR .fi .IP Specifies whether or not to display the sashes on the window panes. The default is 1, and valid options are 0 and 1. .LP .nf Name: \fBthickness\fR Class: \fBThickness\fR Command-Line Switch: \fB-thickness\fR .fi .IP Specifies the thickness of the separators in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 3 pixels. .LP .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the overall width of the paned window in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10 pixels. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::panedwindow\fR command creates a multiple paned window widget capable of orienting the panes either vertically or horizontally. Each pane is itself a frame acting as a child site for other widgets. The border separating each pane contains a sash which allows user positioning of the panes relative to one another. .SH "METHODS" .PP The \fBiwidgets::panedwindow\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP Many of the widget commands for the \fBpanedwindow\fR take as one argument an indicator of which pane of the paned window to operate on. These indicators are called \fIindexes\fR and allow reference and manipulation of panes regardless of their current map state. Paned window indexes may be specified in any of the following forms: .TP 12 \fInumber\fR Specifies the pane numerically, where 0 corresponds to the nearest (top/left-most) pane of the paned window. .TP 12 \fBend\fR Indicates the farthest (bottom/right-most) pane of the paned window. .TP 12 \fIpattern\fR If the index doesn't satisfy one of the above forms then this form is used. \fIPattern\fR is pattern-matched against the tag of each pane in the panedwindow, in order from left/top to right/left, until a matching entry is found. The rules of \fBTcl_StringMatch\fR are used. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBadd\fR \fItag\fR ?\fIoption value option value\fR? Adds a new pane to the paned window on the far side (right/bottom). The following options may be specified: .RS .TP \fB-margin\fR \fIvalue\fR Specifies the border distance between the pane and pane contents is any of the forms acceptable to \fBTk_GetPixels\fR. The default is 8 pixels. .TP \fB-minimum\fR \fIvalue\fR Specifies the minimum size that a pane's contents may reach not inclusive of twice the margin in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10 pixels. The \fBadd\fR method returns the path name of the pane. .RE .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::panedwindow\fR command. .TP \fIpathName \fBchildsite\fR ?\fIindex\fR? Returns a list of the child site path names or a specific child site given an index. The list is constructed from the near side (left/top) to the far side (right/bottom). .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::panedwindow\fR command. .TP \fIpathName \fBdelete\fR \fIindex\fR Deletes a specified pane given an \fIindex\fR. .TP \fIpathName \fBfraction\fR \fIpercentage\fR \fIpercentage\fR ?\fIpercentage percentage ...\fR? Sets the visible percentage of the panes. Specifies a set of percentages which are applied to the visible panes from the near side (left/top). The number of percentages must be equal to the current number of visible (mapped) panes and add up to 100. .TP \fIpathName \fBhide\fR \fIindex\fR Changes the visiblity of the specified pane, allowing a previously displayed pane to be visually removed rather than deleted. .TP \fIpathName \fBindex\fR \fIindex\fR Returns the numerical index corresponding to index. .TP \fIpathName \fBinsert \fIindex\fR \fItag\fR ?\fIoption value option value ...\fR? Same as the \fBadd\fR command except that it inserts the new pane just before the one given by \fIindex\fR, instead of appending to the end of the panedwindow. The \fIoption\fR, and \fIvalue\fR arguments have the same interpretation as for the \fBadd\fR widget command. .TP \fIpathName \fBpaneconfigure\fR \fIindex\fR ?\fIoptions\fR? This command is similar to the \fBconfigure\fR command, except that it applies to the options for an individual pane, whereas \fBconfigure\fR applies to the options for the paned window as a whole. \fIOptions\fR may have any of the values accepted by the \fBadd\fR widget command. If \fIoptions\fR are specified, options are modified as indicated in the command and the command returns an empty string. If no \fIoptions\fR are specified, returns a list describing the current options for entry \fIindex\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). .TP \fIpathName \fBreset\fR Redisplays the pane window using default percentages. .TP \fIpathName \fBshow\fR \fIindex\fR Changes the visiblity of the specified pane, allowing a previously hidden pane to be displayed. .SH "NOTES" .IP Dynamic changing of the margin and or minimum options to values which make the current configuration invalid will block subsequent sash movement until the fractions are modified via the fraction method. For example a panedwindow is created with three panes and the minimum and margin options are at their default settings. Next the user moves the sashes to compact the panes to one side. Now, if the minimum is increased on the most compressed pane via the paneconfigure method to a large enough value, then sash movement is blocked until the fractions are adjusted. This situation is unusual and under normal operation of the panedwindow, this problem will never occur. .LP .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::panedwindow .pw -width 300 -height 300 .pw add top .pw add middle -margin 10 .pw add bottom -margin 10 -minimum 10 pack .pw -fill both -expand yes foreach pane [.pw childSite] { button $pane.b -text $pane -relief raised -borderwidth 2 pack $pane.b -fill both -expand yes } .pw fraction 50 30 20 .pw paneconfigure 0 -minimum 20 .pw paneconfigure bottom -margin 15 .DE .SH ACKNOWLEDGEMENTS: .LP Jay Schmidgall .IP 1994 - Base logic posted to comp.lang.tcl .LP Joe Hidebrand <hildjj@fuentez.com> .IP 07/25/94 - Posted first multipane version to comp.lang.tcl .LP .IP 07/28/94 - Added support for vertical panes .LP Ken Copeland <ken@hilco.com> .IP 09/28/95 - Smoothed out the sash movement and added squeezable panes. .LP .SH AUTHOR Mark L. Ulferts .SH KEYWORDS panedwindow, widget ����������������������������������������������������iwidgets-4.1.1/doc/promptdialog.n�������������������������������������������������������������������0000644�0036047�0045461�00000012371�07476742024�015374� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) promptdialog.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::promptdialog iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::promptdialog \- Create and manipulate a prompt dialog widget .SH SYNOPSIS \fBiwidgets::promptdialog\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Dialogshell <- iwidgets::Dialog <- iwidgets::Promptdialog .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth relief selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBshow\fR .fi .LP See the "entry" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBinvalid\fR \fBtextBackground\fR \fBtextFont\fR \fBvalidate\fR .fi .LP See the "entryfield" widget manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR \fBlabelPos\fR \fBlabelText\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBbuttonBoxPadX\fR \fBbuttonBoxPadY\fR \fBbuttonBoxPos\fR \fBpadX\fR \fBpadY\fR \fBseparator\fR \fBthickness\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBheight\fR \fBmaster\fR \fBmodality\fR \fBwidth\fR .fi .LP See the "shell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" widget manual entry for details on the above inherited options. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::promptdialog\fR command creates a prompt dialog similar to the OSF/Motif standard prompt dialog composite widget. The promptdialog is derived from the dialog class and is composed of a EntryField with commands to manipulate the dialog buttons. .SH "METHODS" .PP The \fBiwidgets::promptdialog\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for promptdialog widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBdelete\fR \fBget\fR \fBicursor\fR \fBindex\fR \fBinsert\fR \fBscan\fR \fBselection\fR \fBxview\fR .fi .LP See the "entry" widget manual entry for details on the above associated methods. .LP .nf .ta 4c 8c 12c \fBclear\fR .fi .LP See the "entryfield" widget manual entry for details on the above associated methods. .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBadd\fR \fBbuttonconfigure\fR \fBdefault\fR \fBhide\fR \fBinvoke\fR \fBshow\fR .fi .LP See the "buttonbox" widget manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBchildsite\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBcenter\fR \fBdeactivate\fR .fi .LP See the "shell" widget manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::promptdialog\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::promptdialog\fR command. .SH "COMPONENTS" .LP .nf Name: \fBprompt\fR Class: \fBEntryfield\fR .fi .IP The prompt component is the entry field for user input in the prompt dialog. See the "entryfield" widget manual entry for details on the prompt component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 option add *textBackground white iwidgets::promptdialog .pd -modality global -title Password -labeltext Password: -show * .pd hide Apply if {[.pd activate]} { puts "Password entered: [.pd get]" } else { puts "Password prompt cancelled" } .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS promptdialog, dialog, dialogshell, shell, widget �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/canvasprintdialog.n��������������������������������������������������������������0000644�0036047�0045461�00000011305�07476742024�016377� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" iwidgets::canvasprintdialog (c) 1995 Mark L. Ulferts '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) canvasprintdialog.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::canvasprintdialog iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::canvasprintdialog \- Create and manipulate a canvas print dialog widget .SH SYNOPSIS \fBiwidgets::canvasprintdialog\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Dialogshell <- iwidgets::Dialog <- iwidgets::Canvasprintdialog .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor foreground highlightBackground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth relief repeatDelay repeatInterval selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBfilename\fR \fBhpagecnt\fR \fBorient\fR \fBoutput\fR \fBpagesize\fR \fBposterize\fR \fBprintcmd\fR \fBprintregion\fR \fBvpagecnt\fR .fi .LP See the "canvasprintbox" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBbuttonBoxPadX\fR \fBbuttonBoxPadY\fR \fBbuttonBoxPos\fR \fBpadX\fR \fBpadY\fR \fBseparator\fR \fBthickness\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBmaster\fR \fBmodality\fR .fi .LP See the "shell" widget manual entry for details on the above inherited options. .LP .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" widget manual entry for details on the above inherited options. .LP .SH "WIDGET-SPECIFIC OPTIONS" .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::canvasprintdialog\fR command creates a print dialog for printing the contents of a canvas widget to a printer or a file. It is possible to specify page orientation, the number of pages to print the image on and if the output should be stretched to fit the page. .SH "METHODS" .PP The \fBiwidgets::canvasprintdialog\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for canvasprintdialog widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBgetoutput\fR \fBsetcanvas\fR \fBrefresh\fR \fBprint\fR .fi .LP See the "canvasprintbox" class manual entry for details on the associated methods. .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBadd\fR \fBbuttonconfigure\fR \fBdefault\fR \fBhide\fR \fBinsert\fR \fBinvoke\fR \fBshow\fR .fi .LP See the "buttonbox" widget manual entry for details on the above inherited methods. .LP .nf .ta 4c 8c 12c \fBactivate\fR \fBdeactivate\fR .fi .LP See the "dialogshell" widget manual entry for details on the above inherited methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::canvasprintdialog\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::canvasprintdialog\fR command. .SH "COMPONENTS" .LP .nf Name: \fBcpb\fR Class: \fBCanvasprintbox\fR .fi .IP The cpb component is the canvas print box for the canvas print dialog. See the "canvasprintbox" widget manual entry for details on the cpb component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::canvasprintdialog .cpb .cpb activate .DE .SH AUTHOR Tako Schotanus .LP Tako.Schotanus@bouw.tno.nl .SH KEYWORDS canvasprintdialog, canvasprintbox, dialog, widget ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/CVS/�����������������������������������������������������������������������������0000755�0036047�0045461�00000000000�13153526747�013144� 5����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/CVS/Repository�������������������������������������������������������������������0000644�0036047�0045461�00000000015�13136711010�015216� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets/doc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/CVS/Entries����������������������������������������������������������������������0000644�0036047�0045461�00000005254�13153526747�014506� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/buttonbox.n/1.4/Mon Jun 3 19:31:31 2002// /calendar.n/1.6/Mon Jun 3 19:31:31 2002// /canvasprintbox.n/1.4/Mon Jun 3 19:31:31 2002// /canvasprintdialog.n/1.4/Mon Jun 3 19:31:32 2002// /checkbox.n/1.5/Mon Jun 3 19:31:32 2002// /combobox.n/1.5/Mon Jun 3 19:31:32 2002// /dateentry.n/1.6/Mon Jun 3 19:31:32 2002// /datefield.n/1.6/Mon Jun 3 19:31:32 2002// /dialog.n/1.4/Mon Jun 3 19:31:32 2002// /dialogshell.n/1.4/Mon Jun 3 19:31:32 2002// /disjointlistbox.n/1.5/Mon Jun 3 19:31:32 2002// /entryfield.n/1.6/Mon Jun 3 19:31:32 2002// /extbutton.n/1.4/Mon Jun 3 19:31:32 2002// /extfileselectionbox.n/1.4/Mon Jun 3 19:31:32 2002// /extfileselectiondialog.n/1.3/Wed Aug 22 14:45:20 2001// /feedback.n/1.5/Mon Jun 3 19:31:32 2002// /fileselectionbox.n/1.4/Mon Jun 3 19:31:32 2002// /fileselectiondialog.n/1.3/Wed Aug 22 14:45:39 2001// /finddialog.n/1.4/Mon Jun 3 19:31:32 2002// /generateHtml.sh/1.1/Tue Aug 11 16:03:56 1998// /hierarchy.n/1.7/Mon Jun 3 19:31:32 2002// /hyperhelp.n/1.4/Mon Jun 3 19:31:32 2002// /iwidgets.ps/1.1/Thu Sep 10 20:55:04 1998/-kb/ /labeledframe.n/1.5/Mon Jun 3 19:31:32 2002// /labeledwidget.n/1.5/Mon Jun 3 19:31:32 2002// /mainwindow.n/1.4/Mon Jun 3 19:31:32 2002// /man.macros/1.1/Mon Jul 27 18:50:36 1998// /menubar.n/1.4/Mon Jun 3 19:31:32 2002// /messagebox.n/1.4/Mon Jun 3 19:31:32 2002// /messagedialog.n/1.4/Mon Jun 3 19:31:32 2002// /mkitclman/1.1/Mon Jul 27 18:50:41 1998// /notebook.n/1.4/Mon Jun 3 19:31:32 2002// /optionmenu.n/1.7/Mon Jun 3 19:31:32 2002// /panedwindow.n/1.5/Mon Jun 3 19:31:32 2002// /promptdialog.n/1.4/Mon Jun 3 19:31:32 2002// /pushbutton.n/1.4/Mon Jun 3 19:31:32 2002// /radiobox.n/1.5/Mon Jun 3 19:31:32 2002// /scopedobject.n/1.3/Mon Jun 3 19:31:32 2002// /scrolledcanvas.n/1.5/Mon Jun 3 19:31:32 2002// /scrolledframe.n/1.5/Mon Jun 3 19:31:32 2002// /scrolledhtml.n/1.6/Tue Sep 10 03:05:25 2002// /scrolledlistbox.n/1.7/Mon Jun 3 19:31:32 2002// /scrolledtext.n/1.7/Tue Sep 10 03:05:25 2002// /selectionbox.n/1.5/Mon Jun 3 19:31:32 2002// /selectiondialog.n/1.4/Mon Jun 3 19:31:32 2002// /shell.n/1.4/Mon Jun 3 19:31:32 2002// /spindate.n/1.3/Wed Aug 22 14:49:34 2001// /spinint.n/1.5/Mon Jun 3 19:31:32 2002// /spinner.n/1.5/Mon Jun 3 19:31:32 2002// /spintime.n/1.3/Wed Aug 22 14:49:53 2001// /tabnotebook.n/1.4/Mon Jun 3 19:31:32 2002// /tabset.n/1.4/Mon Jun 3 19:31:32 2002// /timeentry.n/1.5/Mon Jun 3 19:31:32 2002// /timefield.n/1.5/Mon Jun 3 19:31:32 2002// /tk2html/1.1/Mon Jul 27 18:51:09 1998// /tk2html.awk/1.1/Mon Jul 27 18:51:09 1998// /tk2html.perl/1.1/Mon Jul 27 18:51:10 1998// /tk2html2.awk/1.1/Mon Jul 27 18:51:11 1998// /toolbar.n/1.5/Mon Jun 3 19:31:32 2002// /watch.n/1.3/Wed Aug 22 14:50:33 2001// D ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/CVS/Root�������������������������������������������������������������������������0000644�0036047�0045461�00000000066�13136711010�013770� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/man.macros�����������������������������������������������������������������������0000644�0036047�0045461�00000010117�06557145774�014501� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" The definitions below are for supplemental macros used in Tcl/Tk '\" manual entries. '\" '\" .HS name section [date [version]] '\" Replacement for .TH in other man pages. See below for valid '\" section names. '\" '\" .AP type name in/out [indent] '\" Start paragraph describing an argument to a library procedure. '\" type is type of argument (int, etc.), in/out is either "in", "out", '\" or "in/out" to describe whether procedure reads or modifies arg, '\" and indent is equivalent to second arg of .IP (shouldn't ever be '\" needed; use .AS below instead) '\" '\" .AS [type [name]] '\" Give maximum sizes of arguments for setting tab stops. Type and '\" name are examples of largest possible arguments that will be passed '\" to .AP later. If args are omitted, default tab stops are used. '\" '\" .BS '\" Start box enclosure. From here until next .BE, everything will be '\" enclosed in one large box. '\" '\" .BE '\" End of box enclosure. '\" '\" .VS '\" Begin vertical sidebar, for use in marking newly-changed parts '\" of man pages. '\" '\" .VE '\" End of vertical sidebar. '\" '\" .DS '\" Begin an indented unfilled display. '\" '\" .DE '\" End of indented unfilled display. '\" '\" @(#) man.macros 1.1 94/08/09 13:07:19 .\" '\" # Heading for Tcl/Tk man pages .de HS .ds ^3 \\0 .if !"\\$3"" .ds ^3 \\$3 .if '\\$2'cmds' .TH "\\$1" 1 "\\*(^3" "\\$4" "\\$5" .if '\\$2'lib' .TH "\\$1" 3 "\\*(^3" "\\$4" "\\$5" .if '\\$2'ncmds' .TH "\\$1" n "\\*(^3" "\\$4" "\\$5" .if '\\$2'tcl' .TH "\\$1" n "\\*(^3" Tcl "Tcl Built-In Commands" .if '\\$2'tk' .TH "\\$1" n "\\*(^3" Tk "Tk Commands" .if '\\$2'tclc' .TH "\\$1" 3 "\\*(^3" Tcl "Tcl Library Procedures" .if '\\$2'tkc' .TH "\\$1" 3 "\\*(^3" Tk "Tk Library Procedures" .if '\\$2'tclcmds' .TH "\\$1" 1 "\\*(^3" Tk "Tcl Applications" .if '\\$2'tkcmds' .TH "\\$1" 1 "\\*(^3" Tk "Tk Applications" .if '\\$2'iwid' .TH "\\$1" 1 "\\*(^3" Tk "[incr Widgets]" .if t .wh -1.3i ^B .nr ^l \\n(.l .ad b .. '\" # Start an argument description .de AP .ie !"\\$4"" .TP \\$4 .el \{\ . ie !"\\$2"" .TP \\n()Cu . el .TP 15 .\} .ie !"\\$3"" \{\ .ta \\n()Au \\n()Bu \&\\$1 \\fI\\$2\\fP (\\$3) .\".b .\} .el \{\ .br .ie !"\\$2"" \{\ \&\\$1 \\fI\\$2\\fP .\} .el \{\ \&\\fI\\$1\\fP .\} .\} .. '\" # define tabbing values for .AP .de AS .nr )A 10n .if !"\\$1"" .nr )A \\w'\\$1'u+3n .nr )B \\n()Au+15n .\" .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n .nr )C \\n()Bu+\\w'(in/out)'u+2n .. '\" # BS - start boxed text '\" # ^y = starting y location '\" # ^b = 1 .de BS .br .mk ^y .nr ^b 1u .if n .nf .if n .ti 0 .if n \l'\\n(.lu\(ul' .if n .fi .. '\" # BE - end boxed text (draw box now) .de BE .nf .ti 0 .mk ^t .ie n \l'\\n(^lu\(ul' .el \{\ .\" Draw four-sided box normally, but don't draw top of .\" box if the box started on an earlier page. .ie !\\n(^b-1 \{\ \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .el \}\ \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .\} .fi .br .nr ^b 0 .. '\" # VS - start vertical sidebar '\" # ^Y = starting y location '\" # ^v = 1 (for troff; for nroff this doesn't matter) .de VS .mk ^Y .ie n 'mc \s12\(br\s0 .el .nr ^v 1u .. '\" # VE - end of vertical sidebar .de VE .ie n 'mc .el \{\ .ev 2 .nf .ti 0 .mk ^t \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n' .sp -1 .fi .ev .\} .nr ^v 0 .. '\" # Special macro to handle page bottom: finish off current '\" # box/sidebar if in box/sidebar mode, then invoked standard '\" # page bottom macro. .de ^B .ev 2 'ti 0 'nf .mk ^t .if \\n(^b \{\ .\" Draw three-sided box if this is the box's first page, .\" draw two sides but no top otherwise. .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .\} .if \\n(^v \{\ .nr ^x \\n(^tu+1v-\\n(^Yu \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c .\} .bp 'fi .ev .if \\n(^b \{\ .mk ^y .nr ^b 2 .\} .if \\n(^v \{\ .mk ^Y .\} .. '\" # DS - begin display .de DS .RS .nf .sp .. '\" # DE - end display .de DE .fi .RE .sp .. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/extbutton.n����������������������������������������������������������������������0000644�0036047�0045461�00000010213�07476742024�014720� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) extbutton.n 1.21 01/04/23 16:04:44 '\" .so man.macros .HS iwidgets::extbutton iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::extbutton \- Extends the behavior of the Tk button by allowing a bitmap or image to coexist with text. .SH SYNOPSIS \fBiwidgets::extbutton\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Extbutton .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activebackground activeforeground bitmap background bd cursor disabledforeground font foreground image justify relief text\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .ta 4c 8c 12c .LP .nf Name: \fBbitmapforeground\fR Class: \fBForeground\fR Command-Line Switch: \fB-bitmapforeground\fR .fi .IP Configures the foreground color of the bitmap. .LP .nf Name: \fBcommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-command\fR .fi .IP Associate a command with the extbutton. Simulates a Tk button's -command option. Invoked by either <1> events or by explicitly calling the public invoke() method. .LP .nf Name: \fBdefaultring\fR Class: \fBDefaultRing\fR Command-Line Switch: \fB-defaultring\fR .fi .IP Boolean describing whether the extbutton displays its default ring given in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is false. .LP .nf Name: \fBdefaultringpad\fR Class: \fBPad\fR Command-Line Switch: \fB-defaultringpad\fR .fi .IP Specifies the amount of space to be allocated to the indentation of the default ring ring given in any of the forms acceptable to \fBTcl_GetPixels\fR. The option has no effect if the defaultring option is set to false. The default is 4 pixels. .LP .nf Name: \fBimagePos\fR Class: \fBPosition\fR Command-Line Switch: \fB-imagepos\fR .fi .IP Specifies the image position relative to the message text: \fBn\fR, \fBne\fR, \fBnw\fR, \fBs\fR, \fBse\fR, \fBsw\fR, \fBw\fR, \fBwn\fR, \fBws\fR, \fBe\fR, \fBen\fR, or \fBes\fR. The default is w. .LP .nf Name: \fBringBackground\fR Class: \fBBackground\fR Command-Line Switch: \fB-ringbackground\fR .fi .IP Configures the background color of the default ring frame (if -defaultring is set to boolean true). .LP .BE .SH DESCRIPTION .PP The \fBextbutton\fR extends the behavior of the atomic Tk button by allowing text and an image or bitmap to coexist. The user may use the -image or -bitmap options to specify an image as well as the -imagepos option to specify image position relative to the text. Note that the extbutton is not intended to be used without an image/bitmap. There will be an emtpy space next to the text if no image/bitmap is specified. .SH "METHODS" .PP The \fBiwidgets::extbutton\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE .SH "INHERITED METHODS" Each of the following methods are inherited from itk::Archetype. See that man page for details. .DS C \fIpathName \fBcget\fR \fIpathName \fBcomponent\fR \fIpathName \fBconfig\fR \fIpathName \fBconfigure\fR .DE .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBinvoke\fR Evaluates the command fragment associated with the -command option. .TP \fIpathName \fBflash\fR Simulates the Tk button's flash command. .DE .SH EXAMPLES .DS package require Iwidgets 4.0 iwidgets::extbutton .eb -text "Bitmap example" -bitmap info \\ -background bisque -activeforeground red -bitmapforeground blue \\ -defaultring 1 -command {puts "Bisque is beautiful"} pack .eb -expand 1 iwidgets::extbutton .eb -text "Image example" -relief ridge -image \\ [image create photo -file $itk::library/../iwidgets/demos/images/clear.gif] \\ -font 9x15bold -background lightgreen -imagepos e \\ -activebackground lightyellow pack .eb -expand 1 .DE .SH AUTHOR Chad Smith .SH KEYWORDS button, pushbutton �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/buttonbox.n����������������������������������������������������������������������0000644�0036047�0045461�00000015065�07476742023�014721� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) buttonbox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::buttonbox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::buttonbox \- Create and manipulate a manager widget for buttons .SH SYNOPSIS \fBiwidgets::buttonbox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::buttonbox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .ta 4c 8c 12c .LP .nf Name: \fBorient\fR Class: \fBOrient\fR Command-Line Switch: \fB-orient\fR .fi .IP Orientation of the button box: \fBhorizontal\fR or \fBvertical\fR. The default is horizontal. .LP .nf Name: \fBpadX\fR Class: \fBPadX\fR Command-Line Switch: \fB-padx\fR .fi .IP Specifies a non-negative padding distance to leave between the button group and the outer edge of the button box in the x direction. The value may be given in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 5 pixels. .LP .nf Name: \fBpadY\fR Class: \fBPadY\fR Command-Line Switch: \fB-pady\fR .fi .IP Specifies a non-negative padding distance to leave between the button group and the outer edge of the button box in the y direction. The value may be given in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 5 pixels. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::buttonbox\fR command creates a manager widget for controlling buttons. The button box also supports the display and invocation of a default button. The button box can be configured either horizontally or vertically. .SH "METHODS" .PP The \fBiwidgets::buttonbox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP Many of the widget commands for the buttonbox take as one argument an indicator of which button of the button box to operate on. These indicators are called \fIindexes\fR and allow reference and manipulation of buttons regardless of their current map state. buttonbox indexes may be specified in any of the following forms: .TP 12 \fInumber\fR Specifies the button numerically, where 0 corresponds to the left/top-most button of the button box. .TP 12 \fBend\fR Indicates the right/bottom-most button of the button box. .TP 12 \fBdefault\fR Indicates the current default button of the button box. This is the button with the default ring displayed. .TP 12 \fIpattern\fR If the index doesn't satisfy one of the above forms then this form is used. \fIPattern\fR is pattern-matched against the tag of each button in the button box, in order from left/top to right/left, until a matching entry is found. The rules of \fBTcl_StringMatch\fR are used. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBadd\fR \fItag\fR \fIargs\fR Add a button distinguished by \fItag\fR to the end of the button box. If additional arguments are present they specify options to be applied to the button. See \fBPushButton\fR for information on the options available. .TP \fIpathName \fBbuttonconfigure\fR \fIindex\fR ?\fIoptions\fR? This command is similar to the \fBconfigure\fR command, except that it applies to the options for an individual button, whereas \fBconfigure\fR applies to the options for the button box as a whole. \fIOptions\fR may have any of the values accepted by the \fBPushButton\fR command. If \fIoptions\fR are specified, options are modified as indicated in the command and the command returns an empty string. If no \fIoptions\fR are specified, returns a list describing the current options for entry \fIindex\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::buttonbox\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::buttonbox\fR command. .TP \fIpathName \fBdefault\fR \fIindex\fR Sets the default button to the button given by \fIindex\fR. This causes the default ring to appear arround the specified button. .TP \fIpathName \fBdelete\fR \fIindex\fR Deletes the button given by \fIindex\fR from the button box. .TP \fIpathName \fBhide\fR \fIindex\fR Hides the button denoted by \fIindex\fR. This doesn't remove the button permanently, just inhibits its display. .TP \fIpathName \fBindex \fIindex\fR Returns the numerical index corresponding to \fIindex\fR. .TP \fIpathName \fBinsert \fIindex\fR \fItag\fR ?\fIoption value option value ...\fR? Same as the \fBadd\fR command except that it inserts the new button just before the one given by \fIindex\fR, instead of appending to the end of the button box. The \fIoption\fR, and \fIvalue\fR arguments have the same interpretation as for the \fBadd\fR widget command. .TP \fIpathName \fBinvoke\fR \fI?index?\fR Invoke the command associated with a button. If no arguments are given then the current default button is invoked, otherwise the argument is expected to be a button \fIindex\fR. .TP \fIpathName \fBshow\fR \fIindex\fR Display a previously hidden button denoted by \fIindex\fR. .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::buttonbox .bb .bb add Yes -text Yes -command "puts Yes" .bb add No -text No -command "puts No" .bb add Maybe -text Maybe -command "puts Maybe" .bb default Yes pack .bb -expand yes -fill both .DE .SH AUTHOR Bret A. Schuhmacher .DE Mark L. Ulferts .SH KEYWORDS buttonbox, pushbutton, button, widget ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/menubar.n������������������������������������������������������������������������0000644�0036047�0045461�00000051057�07476742024�014330� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) menubar.n '\" .so man.macros .HS iwidgets::menubar iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::menubar \- Create and manipulate menubar menu widgets .SH SYNOPSIS \fBiwidgets::menubar\fR \fIpathName\fR ?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Menubar .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground activeBorderWidth activeForeground anchor background borderWidth cursor disabledForeground font foreground highlightBackground hightlightColor highligthThickness justify relief padX padY wrapLength\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBhelpVariable\fR Class: \fBHelpVariable\fR Command-Line Switch: \fB-helpvariable\fR .fi .IP Specifies the global variable to update whenever the mouse is in motion over a menu entry. This global variable is updated with the current value of the active menu entry's \fBhelpStr\fR. Other widgets can "watch" this variable with the trace command, or as is the case with entry or label widgets, they can set their \fBtextVariable\fR to the same global variable. This allows for a simple implementation of a help status bar. Whenever the mouse leaves a menu entry, the helpVariable is set to the empty string {}. The mainwindow(1) associates its helpstatus and its menubar in this fashion. .LP .nf Name: \fBmenuButtons\fR Class: \fBMenuButtons\fR Command-Line Switch: \fB-menubuttons\fR .fi .IP The menuButton option is a string which specifies the arrangement of menubuttons on the menubar frame. Each menubutton entry is delimited by the newline character. .nf .IP .ta 2c 8c 12c iwidgets::menubar .mb -menubuttons { menubutton file -text File menubutton edit -text Edit menubutton options -text Options } .fi .IP specifies that three menubuttons will be added to the menubar (file, edit, options). Each entry is translated into an add command call. .IP The \fBmenuButtons\fR option can accept embedded variables, commands, and backslash quoting. Embedded variables and commands must be enclosed in curly braces ({}) to ensure proper parsing of the substituted values. .BE .SH DESCRIPTION .PP The \fBiwidgets::menubar\fR command creates a new window (given by the \fIpathName\fR argument) and makes it into a \fBmenubar\fR menu widget. Additional options, described above may be specified on the command line or in the option database to configure aspects of the menubar such as its colors and font. The \fBiwidgets::menubar\fR command returns its \fIpathName\fR argument. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist. .PP A \fBmenubar\fR is a widget that simplifies the task of creating menu hierarchies. It encapsulates a \fBframe\fR widget, as well as \fBmenubuttons\fR, \fBmenus\fR, and menu \fBentries\fR. The menubar allows menus to be specified and referenced in a more consistent manner than using Tk to build menus directly. \fBMenubar\fR allows a menu tree to be expressed in a hierachical "language". The \fBmenubar\fR accepts a \fBmenuButtons\fR option that allows a list of menubuttons to be added to the menubar. In turn, each menubutton accepts a \fBmenu\fR option that specifies a list of menu entries to be added to the menubutton's menu. Cascade entries also accept the \fBmenu\fR option for specifying a list of menu entries to be added to the cascade's menu. Additionally, the menubar allows each component of the menubar system to be referenced by a simple \fImenuPathName\fR syntax. The menubar also extends the set of options for menu entries to include a \fBhelpStr\fR option. .SH "MENU PATH NAMES" .PP A \fImenuPathName\fR is a series of component names separated by the `.' character. Each menubar component can be referenced via these \fImenuPathNames\fR. \fImenuPathNames\fR are similar to widget pathNames in Tk. Some correspond directly to a widget pathName (components of type \fBmenu\fR or \fBmenubutton\fR), others correspond to a menu entry type. Every widget and entry in a menubar can be referenced with the \fImenuPathName\fR naming convention. A menubar can have four types of components: .IP \fBframe\fR. A menubar holds exactly one frame which manages menubuttons. The frame is always signified by the `.' character as the path name. .IP \fBmenubutton\fR. A menubutton corresponds directly to a Tk menubutton. See menubutton(n). .IP \fBmenu\fR. A menu is attached to a menubutton and corresponds directly to Tk's menu widget. A menu is always signified by the \fImenuPathName\fR ending with the keyword \fBmenu\fR. See menu(n). .IP \fBentry\fR. An entry corresponds directly to Tk's menu widget entries. Menus consist of a column of one line entries. Entries may be of type: \fBcommand\fR, \fBcheckbutton\fR, \fBradiobutton\fR, \fBseparator\fR, or \fBcascade\fR. For a complete description of these types see the discussion on \fBENTRIES\fR in menu(n). .PP The suffix of a \fImenuPathName\fR may have the form of: .TP 14 \fItkWidgetName\fR Specifies the name of the component, either a \fBframe\fR, \fBmenubutton\fR, \fBmenu\fR, or an \fBentry\fR. This is the normal naming of widgets. For example, .file references a \fBmenubutton\fR named \fIfile\fR. .PP The \fImenuPathName\fR is a series of segment names, each separated by the '.' character. Segment names may be one of the following forms: .TP 14 \fInumber\fR Specifies the index of the the component. For menubuttons, 0 corresponds to the left-most menubutton of the menu bar frame. As an example, \fI.1\fR would correspond to the second menubutton on the menu bar frame. .IP For entries, 0 corresponds to the top-most entry of the menu. For example, .file.0 would correspond to the first entry on the menu attached to the menubutton named \fIfile\fR. .TP 14 \fBend\fR Specifes the last component. For menubuttons, it specifies the right-most entry of the menu bar frame. For menu entries, it specifies the bottom-most entry of the menu. .TP 14 \fBlast\fR Same as end. .PP Finally, menu components always end with the \fBmenu\fR keyword. These components are automatically created via the -menu option on menubuttons and cascades or via the \fBadd\fR or \fBinsert\fR commands. .TP 14 \fBmenu\fR Specifes the menu pane that is associated with the given menubutton prefix. For example, \fI.file.menu\fR specifies the menu pane attached to the \fI.file\fR menubutton. .PP For example, the path \fI.file.new\fR specifies the entry named new on the menu associated with the file menubutton located on the menu bar. The path \fI.file.menu\fR specifies the menu pane associated with the menubutton \fI.file\fR. The path \fI.last\fR specifies the last menu on the menu bar. The path \fI.0.last\fR would specify the first menu (file) and the last entry on that menu (quit), yielding \fI.file.quit\fR. As a restriction, the last name segment of \fImenuPathName\fR cannot be one of the keywords last, menu, end, nor may it be a numeric value (integer). .SH "WIDGET-SPECIFIC METHODS" .PP The \fBiwidgets::menubar\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIoption\fR and the \fIarg\fRs determine the exact behavior of the command. .PP In addition, many of the widget commands for menubar take as one argument a path name to a menu component. These path names are called \fImenuPathName\fRs. See the discussion on \fBMENUBAR PATH NAMES\fR above. .PP The following commands are possible for menubar widgets: .TP \fIpathName\fR \fBadd\fR \fItype\fR \fImenuPathName\fR ?\fIoption value option value\fR? Adds either a menu to the menu bar or a menu entry to a menu pane. .IP If additional arguments are present, they specify \fIoption\fRs available to component type \fBentry\fR. See the man pages for \fBmenu\fR(1) in the section on \fBENTRIES\fR. If \fItype\fR is one of \fBcascade\fR, \fBcheckbutton\fR, \fBcommand\fR, \fBradiobutton\fR, or \fBseparator\fR it adds a new entry to the bottom of the menu denoted by the prefix of \fImenuPathName\fR. If additonal arguments are present, they specify options available to menu \fBentry\fR widgets. In addition, the \fBhelpStr\fR option is added by the menubar widget to all components of type entry. .RS .TP \fB-helpstr\fR \fIvalue\fR Specifes the string to associate with the entry. When the mouse moves over the associated entry, the variable denoted by \fBhelpVariable\fR is set. Another widget can bind to the helpVariable and thus display status help. .RE .IP If the type of the component added is \fBmenubutton\fR or \fBcascade\fR, a menubutton or cascade is added to the menubar. If additional arguments are present, they specify options available to menubutton or cascade widgets. In addition, the \fBmenu\fR option is added by the menubar widget to all menubutton and cascade widgets. .RS .TP \fB-menu\fR \fImenuSpec\fR This is only valid for \fImenuPathName\fRs of type \fBmenubutton\fR or \fBcascade\fR. Specifes an option set and/or a set of entries to place on a menu and associate with the menubutton or cascade. The \fBoption\fR keyword allows the menu widget to be configured. Each item in the \fImenuSpec\fR is treated as add commands (each with the possibility of having other -menu options). In this way a menu can be recursively built. .IP The last segment of \fImenuPathName\fR cannot be one of the keywords \fBlast\fR, \fBmenu\fR, \fBend\fR. Additionally, it may not be a \fInumber\fR. However the \fImenuPathName\fR may be referenced in this manner (see discussion of \fBCOMPONENT PATH NAMES\fR). .IP Note that the same curly brace quoting rules apply to \fB-menu\fR option strings as did to \fB-menubuttons\fR option strings. See the earlier discussion on \fBumenubuttons\fR in the "\fBWIDGET-SPECIFIC OPTIONS\fR" section. .RE .TP \fIpathName\fR \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. .TP \fIpathName\fR \fBconfigure\fR ?\fIoptions\fR \fIvalue\fR \fIoption\fR \fIvalue\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fBpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. .TP \fIpathName\fR \fBdelete\fR \fImenuPathName\fR ?\fImenuPathName2\fR? If \fImenuPathName\fR is of component type \fBMenubutton\fR or \fBMenu\fR, delete operates on menus. If \fImenuPathName\fR is of component type \fBEntry\fR, delete operates on menu entries. This command deletes all components between \fImenuPathName\fR and \fImenuPathName2\fR inclusive. If \fImenuPathName2\fR is omitted then it defaults to \fImenuPathName\fR. Returns an empty string. If \fImenuPathName\fR is of type menubar, then all menus and the menu bar frame will be destroyed. In this case \fImenuPathName2\fR is ignored. .TP \fIpathName\fR \fBindex\fR \fImenuPathName\fR If \fImenuPathName\fR is of type menubutton or menu, it returns the position of the menu/menubutton on the menubar frame. If \fImenuPathName\fR is of type \fBcommand\fR, \fBseparator\fR, \fBradiobutton\fR, \fBcheckbutton\fR, or \fBcascade\fR, it returns the menu widget's numerical index for the entry corresponding to \fImenuPathName\fR. If path is not found or the path is equal to ".", a value of -1 is returned. .TP \fIpathName\fR \fBinsert\fR \fImenuPathName\fR \fItype\fR \fIname\fR ?\fIoption\fR \fIvalue\fR? Insert a new component named name before the component specified by \fImenuPathName\fR. .IP If \fImenuPathName\fR is of type \fBMenubutton\fR or \fBMenu\fR, the new component inserted is of type \fBMenu\fR and given the name name. In this case valid \fIoption\fR \fIvalue\fR pairs are those accepted by menubuttons. .IP If \fImenuPathName\fR is of type \fBEntry\fR, the new component inserted is of type \fBentry\fR and given the name \fIname\fR. In this case, valid \fIoption\fR \fIvalue\fR pairs are those accepted by menu entries. \fIName\fR cannot be one of the keywords \fBlast\fR, \fBmenu\fR, \fBend\fR. Additionally, it may not be a number. However the \fImenuPathName\fR may be referenced in this manner (see discussion of \fBCOMPONENT PATH NAMES\fR). .TP \fIpathName\fR \fBinvoke\fR \fImenuPathName\fR Invoke the action of the menu entry denoted by \fImenuPathName\fR. See the sections on the individual entries in the menu(1) man pages. If the menu entry is disabled then nothing happens. If the entry has a command associated with it then the result of that command is returned as the result of the \fBinvoke\fR widget command. Otherwise the result is an empty string. If \fImenuPathName\fR is not a menu entry, an error is issued. .TP \fIpathName\fR \fBmenucget\fR \fImenuPathName\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. The component type of \fImenuPathName\fR determines the valid available options. .TP \fIpathName\fR \fBmenuconfigure\fR \fImenuPathName\fR ?\fIoption\fR \fIvalue\fR? Query or modify the configuration options of the componet of the menubar specified by \fImenuPathName\fR. If no \fIoption\fR is specified, returns a list describing all of the available options for \fImenuPathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. The component type of \fImenuPathName\fR determines the valid available options. .TP \fIpathName\fR \fBpath\fR ?\fImode\fR? \fIpattern\fR Returns a fully formed \fImenuPathName\fR that matches \fIpattern\fR. If no match is found it returns -1. The \fImode\fR argument indicates how the search is to be matched against \fIpattern\fR and it must have one of the following values: .RS .TP \fB-glob\fR Pattern is a glob-style pattern which is matched against each component path using the same rules as the string match command. .TP \fB-regexp\fR Pattern is treated as a regular expression and matched against each component of the \fImenuPathName\fR using the same rules as the regexp command. The default mode is -glob. .RE .TP \fIpathName\fR \fBtype\fR \fImenuPathName\fR Returns the type of the component specified by \fImenuPathName\fR. For menu entries, this is the type argument passed to the \fBadd\fR/\fBinsert\fR widget command when the entry was created, such as \fBcommand\fR or \fBseparator\fR. Othewise it is either a \fBmenubutton\fR or a \fBmenu\fR. .TP \fIpathName\fR \fByposition\fR \fImenuPathName\fR Returns a decimal string giving the y-coordinate within the menu window of the topmost pixel in the entry specified by \fImenuPathName\fR. If the \fImenuPathName\fR is not an entry, an error is issued. .SH "EXAMPLE ONE: USING GRAMMAR" .PP The following example creates a menubar with "File", "Edit", "Options" menubuttons. Each of these menubuttons has an associated menu. In turn the File menu has menu entries, as well as the Edit menu and the Options menu. The Options menu is a tearoff menu with selectColor (for radiobuttons) set to blue. In addition, the Options menu has a cascade titled More, with several menu entries attached to it as well. An entry widget is provided to display help status. .DS package require Iwidgets 4.0 iwidgets::menubar .mb -helpvariable helpVar -menubuttons { menubutton file -text File -menu { options -tearoff false command new -label New \\ -helpstr "Open new document" \\ -command {puts NEW} command close -label Close \\ -helpstr "Close current document" \\ -command {puts CLOSE} separator sep1 command exit -label Exit -command {exit} \\ -helpstr "Exit application" } menubutton edit -text Edit -menu { options -tearoff false command undo -label Undo -underline 0 \\ -helpstr "Undo last command" \\ -command {puts UNDO} separator sep2 command cut -label Cut -underline 1 \\ -helpstr "Cut selection to clipboard" \\ -command {puts CUT} command copy -label Copy -underline 1 \\ -helpstr "Copy selection to clipboard" \\ -command {puts COPY} command paste -label Paste -underline 0 \\ -helpstr "Paste clipboard contents" \\ -command {puts PASTE} } menubutton options -text Options -menu { options -tearoff false -selectcolor blue radiobutton byName -variable viewMode \\ -value NAME -label "by Name" \\ -helpstr "View files by name order" \\ -command {puts NAME} radiobutton byDate -variable viewMode \\ -value DATE -label "by Date" \\ -helpstr "View files by date order" \\ -command {puts DATE} cascade prefs -label Preferences -menu { command colors -label Colors... \\ -helpstr "Change text colors" \\ -command {puts COLORS} command fonts -label Fonts... \\ -helpstr "Change text font" \\ -command {puts FONT} } } } .if .nf frame .fr -width 300 -height 300 entry .ef -textvariable helpVar pack .mb -anchor nw -fill x -expand yes pack .fr -fill both -expand yes pack .ef -anchor sw -fill x -expand yes .if .DE .SH "EXAMPLE TWO: USING METHODS" Alternatively the same menu could be created by using the add and configure methods: .PP .nf .ta 2c 4c 6c 8c 10c 12c 14c 16c .DS package require Iwidgets 4.0 iwidgets::menubar .mb .mb configure -menubuttons { menubutton file -text File -menu { command new -label New command close -label Close separator sep1 command quit -label Quit } menubutton edit -text Edit } .if .PP .mb add command .edit.undo -label Undo -underline 0 .mb add separator .edit.sep2 .mb add command .edit.cut -label Cut -underline 1 .mb add command .edit.copy -label Copy -underline 1 .mb add command .edit.paste -label Paste -underline 0 .mb add menubutton .options -text Options -menu { radiobutton byName -variable viewMode \\ -value NAME -label "by Name" radiobutton byDate -variable viewMode \\ -value DATE -label "by Date" } .mb add cascade .options.prefs -label Preferences -menu { command colors -label Colors... command fonts -label Fonts... } pack .mb -side left -anchor nw -fill x -expand yes .DE .SH CAVEATS The \fB-menubuttons\fR option as well as the \fB-menu\fR option is evaluated by menubar with the \fBsubst\fR command. The positive side of this is that the option string may contain variables, commands, and/or backslash substitutions. However, substitutions might expand into more than a single word. These expansions can be protected by enclosing candidate substitutions in curly braces ({}). This ensures, for example, a value for an option will still be treated as a single value and not multiple values. The following example illustrates this case: .nf .IP .ta 2c 4c 6c set fileMenuName "File Menu" set var {} iwidgets::menubar .mb -menubuttons { menubutton file -text {$fileMenuName} menubutton edit -text Edit -menu { checkbutton check \\ -label Check \\ -variable {[scope var]} \\ -onvalue 1 \\ -offvalue 0 } menubutton options -text Options } .fi .IP The variable \fIfileMenuName\fR will expand to "File Menu" when the \fBsubst\fR command is used on the menubutton specification. In addition, the [\fBscope\fR...] command will expand to @scope :: var. By enclosing these inside {} they stay as a single value. Note that only {} work for this. [list...], "" etc. will not protect these from the subst command. .SH ACKNOWLEDGMENTS .LP Bret Schumaker .IP 1994 - Early work on a menubar widget. .LP Mark Ulferts, Mark Harrison, John Sigler .IP Invaluable feedback on grammar and usability of the menubar widget .LP .SH AUTHOR Bill W. Scott .SH KEYWORDS frame, menu, menubutton, entries, help ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/spinner.n������������������������������������������������������������������������0000644�0036047�0045461�00000014265�07476742024�014355� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) spinner.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::spinner iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::spinner \- Create and manipulate a spinner widget .SH SYNOPSIS \fBiwidgets::spinner\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Labeledwidget <- iwidgets::Spinner .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth justify relief selectBackground selectBorderWidth selectForeground textVariable\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBshow\fR \fBstate\fR .fi .LP See the "entry" manual entry for details on the associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBchildSitePos\fR \fBcommand\fR \fBfixed\fR \fBfocusCommand\fR \fBinvalid\fR \fBtextBackground\fR \fBtextFont\fR \fBvalidate\fR \fBwidth\fR .fi .LP See the "entryfield" widget manual entry for details on the above inherited options. .LP .nf .ta 4c 8c 12c \fBdisabledForeground\fR \fBlabelBitmap\fR \fBlabelFont\fR \fBlabelImage\fR \fBlabelMargin\fR \fBlabelPos\fR \fBlabelText\fR \fBlabelVariable\fR \fBstate\fR \fBsticky\fR .fi .LP See the "labeledwidget" widget manual entry for details on the above inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBarrowOrient\fR Class: \fBOrient\fR Command-Line Switch: \fB-arroworient\fR .fi .IP Specifies placement of arrow buttons: \fBhorizontal\fR or \fBvertical\fR. The default is vertical. .LP .nf Name: \fBdecrement\fR Class: \fBCommand\fR Command-Line Switch: \fB-decrement\fR .fi .IP Tcl command to be executed when down arrow is pressed. .LP .nf Name: \fBincrement\fR Class: \fBCommand\fR Command-Line Switch: \fB-increment\fR .fi .IP Tcl command to be executed when up arrow is pressed. .LP .nf Name: \fBrepeatDelay\fR Class: \fBRepeatDelay\fR Command-Line Switch: \fB-repeatdelay\fR .fi .IP Specifies the initial delay in milliseconds before the spinner repeat action on the arrow buttons engages. The default is 300 milliseconds. .LP .nf Name: \fBrepeatInterval\fR Class: \fBRepeatInterval\fR Command-Line Switch: \fB-repeatinterval\fR .fi .IP Specifies the repeat delay in milliseconds between selections of the arrow buttons. A repeatinterval of 0 disables button repeat. The default is 100 milliseconds. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::spinner\fR command creates a spinner widget. The spinner is comprised of an entryfield plus up and down arrow buttons. Arrows may be drawn horizontally or vertically. .DE .SH "METHODS" .PP The \fBiwidgets::spinner\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for spinner widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBdelete\fR \fBget\fR \fBicursor\fR \fBindex\fR \fBinsert\fR \fBscan\fR \fBselection\fR \fBxview\fR .fi .LP See the "entry" manual entry for details on the associated methods. .SH "INHERITED METHODS" .LP .nf .ta 4c 8c 12c \fBchildsite\fR \fBclear\fR \fBpeek\fR .fi .LP See the "entryfield" manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::spinner\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::spinner\fR command. .TP \fIpathName \fBdown\fR Derived classes may overload this method to specialize functionality. .TP \fIpathName \fBup\fR Derived classes may overload this method to specialize functionality. .SH "COMPONENTS" .LP .nf Name: \fBdownarrow\fR Class: \fBCanvas\fR .fi .IP The downarrow component is the downward pointing button of the spinner. See the "canvas" widget manual entry for details on the downarrow component item. .LP .nf Name: \fBuparrow\fR Class: \fBCanvas\fR .fi .IP The uparrow component is the upward pointing button of the spinner. See the "canvas" widget manual entry for details on the uparrow component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 set months {January February March April May June July \\ August September October November December} proc blockInput {char} { return 0 } proc spinMonth {step} { global months set index [expr [lsearch $months [.sm get]] + $step] if {$index < 0} {set index 11} if {$index > 11} {set index 0} .sm delete 0 end .sm insert 0 [lindex $months $index] } iwidgets::spinner .sm -labeltext "Month : " -width 10 -fixed 10 \\ -validate blockInput -decrement {spinMonth -1} -increment {spinMonth 1} .sm insert 0 January pack .sm -padx 10 -pady 10 .DE .SH ACKNOWLEDGEMENTS: .LP Ken Copeland <ken@hilco.com> .IP 10/18/95 - Added auto-repeat action to spinner arrow buttons. .LP .SH AUTHOR Sue Yockey .SH KEYWORDS spinner, widget �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/labeledframe.n�������������������������������������������������������������������0000644�0036047�0045461�00000013534�07476742024�015300� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1997 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) labeledframe.n 1.21 97/1/30 16:04:44 '\" .so man.macros .HS iwidgets::labeledframe iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::labeledframe \- Create and manipulate a labeled frame widget .SH SYNOPSIS \fBiwidgets::labeledframe\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Archetype <- iwidgets::Labeledframe .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBborderwidth\fR \fBcursor\fR \fBforeground\fR \fBrelief\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBiPadX\fR Class: \fBIPad\fR Command-Line Switch: \fB-ipadx\fR .fi .IP Specifies horizontal padding space between the border and the childsite. The value may have any of the forms acceptable to \fBTk_GetPixels\fR. The default is 0. .LP .nf Name: \fBiPadY\fR Class: \fBIPad\fR Command-Line Switch: \fB-ipady\fR .fi .IP Specifies vertical padding space between the border and the childsite. The value may have any of the forms acceptable to \fBTk_GetPixels\fR. The default is 0. .LP .nf Name: \fBlabelBitmap\fR Class: \fBBitmap\fR Command-Line Switch: \fB-labelbitmap\fR .fi .IP Specifies a bitmap to display in the label, in any of the forms acceptable to \fBTk_GetBitmap\fR. This option overrides the \fIlabeltext\fR option. .LP .nf Name: \fBlabelImage\fR Class: \fBImage\fR Command-Line Switch: \fB-labelimage\fR .fi .IP Specifies a image to be used as the label. The image may be any of the values created by the \fBimage create\fR command. This option overrides both the \fIlabelbitmap\fR and \fIlabeletext\fR options. .LP .nf Name: \fBlabelMargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-labelmargin\fR .fi .IP Specifies the distance between the inner ede of the hull frames relief, and the label in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10 pixels. .LP .nf Name: \fBlabelText\fR Class: \fBText\fR Command-Line Switch: \fB-labeltext\fR .fi .IP Specifies the text of the label around the childsite. .LP .nf Name: \fBlabelVariable\fR Class: \fBVariable\fR Command-Line Switch: \fB-labelvariable\fR .fi .IP Specifies the text variable of the label around the childsite. .LP .nf Name: \fBlabelFont\fR Class: \fBFont\fR Command-Line Switch: \fB-labelfont\fR .fi .IP Specifies the font of the label around the childsite. .LP .nf Name: \fBlabelPos\fR Class: \fBPosition\fR Command-Line Switch: \fB-labelpos\fR .fi .IP Specifies the position of the label within the grooved relief of the hull widget. \fB ne, n, nw, se, s, sw, en, e, es, wn, w, ws\fR Default is \fBn\fR. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::labeledframe\fR command creates a hull frame with a grooved relief, a label positioned within the grooved relief of the hull frame, and a frame childsite. The frame childsite can filled with any widget via a derived class or though the use of the childsite method. This class was designed to be a general purpose base class for supporting the combination of labeled frame and a childsite. The options include the ability to position the label at configurable locations within the grooved relief of the hull frame, and control the display of the label. .SH "METHODS" .PP The \fBiwidgets::labeledframe\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for labeledframe widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBchildsite\fR Return the path name of the child site. .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::labeledframe\fR command. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::labeledframe\fR command. .SH "COMPONENTS" .LP .nf Name: \fBlabel\fR Class: \fBlabel\fR .fi .IP The label component provides the label for the labeled widget. See the "label" widget manual entry for details on the label component item. .fi .LP .SH EXAMPLE .IP The labeledframe was primarily meant to be a base class. The Radiobox is a good example of a derived classe of the labeledframe class. In order to provide equal support for composite classes, the 'childsite' methods also exists. The following is an example of 'childsite' method usage. .LP .DS package require Iwidgets 4.0 iwidgets::labeledframe .lw -labeltext "Entry Frame" -labelpos n pack .lw -fill both -expand yes -padx 10 -pady 10 set cs [.lw childsite] pack [iwidgets::entryfield $cs.entry1 -labeltext "Name:"] -side top -fill x pack [iwidgets::spinint $cs.entry2 -labeltext "Number:"] -side top -fill x pack [iwidgets::pushbutton $cs.entry3 -text "Details:"] -side top -fill x .DE .SH AUTHOR John A. Tucker .SH KEYWORDS labeledframe, widget ��������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/shell.n��������������������������������������������������������������������������0000644�0036047�0045461�00000014143�07476742024�014001� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) shell.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::shell iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::shell \- Create and manipulate a shell widget .SH SYNOPSIS \fBiwidgets::shell\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Toplevel <- iwidgets::Shell .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fBbackground\fR \fBcursor\fR \fBforeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c \fBtitle\fR .fi .LP See the "Toplevel" manual entry for details on the above inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the shell. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. A value of zero causes the height to be adjusted to the required value based on the size requests of the components placed in the childsite. Otherwise, the height is fixed. The default is zero. NOTE: This may cause some amount of flickering on slower machines. To prevent it simply set the width and height to a appropriate value. .LP .nf Name: \fBmaster\fR Class: \fBWindow\fR Command-Line Switch: \fB-master\fR .fi .IP Defines the shell as being a transient window with the master window given by the master option. The master window should be either another existing toplevel window or {} for no master. The default is {} for shells and "." for dialogs. .LP .nf Name: \fBmodality\fR Class: \fBModality\fR Command-Line Switch: \fB-modality\fR .fi .IP Allows the shell to grab control of the screen in one of three different ways: \fBapplication\fR, \fBsystem\fR, or \fBnone\fR. Application modal prevents any other toplevel windows within the application which are direct children of '.' from gaining focus. System modal locks the screen and prevents all windows from gaining focus regardless of application. A modality of none performs no grabs at all. The default is none. .LP .nf Name: \fBpadX\fR Class: \fBPad\fR Command-Line Switch: \fB-padx\fR .fi .IP Specifies a padding distance for the childsite in the X-direction in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10. .LP .nf Name: \fBpadY\fR Class: \fBPad\fR Command-Line Switch: \fB-pady\fR .fi .IP Specifies a padding distance for the childsite in the Y-direction in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 10. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the shell. The value may be specified in any of the forms acceptable to \fBTk_GetPixels\fR. A value of zero causes the width to be adjusted to the required value based on the size requests of the components placed in the childsite. Otherwise, the width is fixed. The default is zero. NOTE: This may cause some amount of flickering on slower machines. To prevent it simply set the width and height to a appropriate value. .BE .SH DESCRIPTION .PP The \fBiwidgets::shell\fR command creates a shell which is a top level widget which supports modal operation. .SH "METHODS" .PP The \fBiwidgets::shell\fR command create a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for shell widgets: .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBactivate\fR Display the shell and wait based on the modality. For application and system modal activations, perform a grab operation, and wait for the result. The result may be returned via an argument to the \fBdeactivate\fR method. .TP \fIpathName \fBcenter\fR \fI?widget?\fR Centers the shell with respect to another widget. The widget argument is optional. If provided, it should be the path of another widget with to center upon. If absent, then the shell will be centered on the screen as a whole. .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::shell\fR command. .TP \fIpathName \fBchildsite\fR Returns the pathname of the child site widget. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::shell\fR command. .TP \fIpathName \fBdeactivate\fR ?\fIarg\fR? Deactivate the display of the shell. The method takes an optional argument to be passed to the \fBactivate\fR method which returns the value. The optional argument is only effective for application and system modal dialogs. .SH "COMPONENTS" .LP .nf Name: \fBshellchildsite\fR Class: \fBframe\fR .fi .IP The shellchildsite component is the user child site for the shell. See the "frame" widget manual entry for details on the shellchildsite component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 iwidgets::shell .sh -modality application -padx 20 -pady 20 -title Shell pack [label [.sh childsite].l -text SHELL] .sh center .sh activate .DE .SH AUTHOR Mark L. Ulferts .DE Kris Raney .LP .SH KEYWORDS shell, widget �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/doc/selectionbox.n�������������������������������������������������������������������0000644�0036047�0045461�00000020723�07476742024�015371� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" '\" Copyright (c) 1995 DSC Technologies Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) selectionbox.n 1.21 94/12/17 16:04:44 '\" .so man.macros .HS iwidgets::selectionbox iwid .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME iwidgets::selectionbox \- Create and manipulate a selection box widget .SH SYNOPSIS \fBiwidgets::selectionbox\fI \fIpathName \fR?\fIoptions\fR? .SH "INHERITANCE" itk::Widget <- iwidgets::Selectionbox .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c \fB activeBackground background borderWidth cursor exportSelection foreground highlightColor highlightThickness insertBackground insertBorderWidth insertOffTime insertOnTime insertWidth relief repeatDelay repeatInterval selectBackground selectBorderWidth selectForeground\fR .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c \fBtextBackground\fR \fBtextFont\fR .fi .LP See the "entryfield" widget class manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBlabelFont\fR \fBlabelMargin\fR .fi .LP See the "labeledwidget" class manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBactiveRelief\fR \fBelementBorderWidth\fR \fBjump\fR \fBtroughColor\fR .fi .LP See the "scrollbar" widget class manual entry for details on the above associated options. .LP .nf .ta 4c 8c 12c \fBdblClickCommand\fR \fBhscrollMode\fR \fBsbWidth\fR \fBscrollMargin\fR \fBtextBackground\fR \fBtextFont\fR \fBvscrollMode\fR .fi .LP See the "scrolledlistbox" widget class manual entry for details on the above associated options. .SH "WIDGET-SPECIFIC OPTIONS" .LP .nf Name: \fBchildSitePos\fR Class: \fBPosition\fR Command-Line Switch: \fB-childsitepos\fR .fi .IP Specifies the position of the child site in the selection box: \fBn\fR, \fBs\fR, \fBe\fR, \fBw\fR, or \fB\fR. The default is center .LP .nf Name: \fBheight\fR Class: \fBHeight\fR Command-Line Switch: \fB-height\fR .fi .IP Specifies the height of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 320 pixels. .LP .nf Name: \fBitemsCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-itemscommand\fR .fi .IP Specifies a command to be evaluated following selection of an item. .LP .nf Name: \fBitemsLabel\fR Class: \fBText\fR Command-Line Switch: \fB-itemslabel\fR .fi .IP Specifies the text of the label for the items list. The default is "List". .LP .nf Name: \fBitemsLabelPos\fR Class: \fBPosition\fR Command-Line Switch: \fB-itemslabelpos\fR .fi .IP Specifies the position of the label along the side of the items list: \fBn\fR, \fBne\fR, \fBe\fR, \fBse\fR, \fBs\fR, \fBsw\fR, \fBw\fR, or \fBnw\fR. The default is nw. .LP .nf Name: \fBitemsOn\fR Class: \fBItemsOn\fR Command-Line Switch: \fB-itemson\fR .fi .IP Specifies whether or not to display the items list in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBmargin\fR Class: \fBMargin\fR Command-Line Switch: \fB-margin\fR .fi .IP Specifies distance between the items list and selection entry in any of the forms acceptable to \fBTk_GetPixels\fR. The default is 7 pixels. .LP .nf Name: \fBselectionCommand\fR Class: \fBCommand\fR Command-Line Switch: \fB-selectioncommand\fR .fi .IP Specifies a Tcl procedure to be associated with a return key press event in the selection entry field. .LP .nf Name: \fBselectionLabel\fR Class: \fBText\fR Command-Line Switch: \fB-selectionlabel\fR .fi .IP Specifies the text of the label for the selection entry field. The default is "Selection". .LP .nf Name: \fBselectionLabelPos\fR Class: \fBPosition\fR Command-Line Switch: \fB-selectionlabelpos\fR .fi .IP Specifies the position of the label along the side of the selection: \fBn\fR, \fBne\fR, \fBe\fR, \fBse\fR, \fBs\fR, \fBsw\fR, \fBw\fR, or \fBnw\fR. The default is nw. .LP .nf Name: \fBselectionOn\fR Class: \fBSelectionOn\fR Command-Line Switch: \fB-selectionon\fR .fi .IP Specifies whether or not to display the selection entry in any of the forms acceptable to \fBTcl_GetBoolean\fR. The default is true. .LP .nf Name: \fBwidth\fR Class: \fBWidth\fR Command-Line Switch: \fB-width\fR .fi .IP Specifies the width of the selection box. The value may be specified in any of the forms acceptable to Tk_GetPixels. The default is 260 pixels. .LP .BE .SH DESCRIPTION .PP The \fBiwidgets::selectionbox\fR command creates a scrolled list of items and a selection entry field. The user may choose any of the items displayed in the scrolled list of alternatives and the selection field will be filled with the choice. The user is also free to enter a new value in the selection entry field. Both the list and entry areas have labels. A child site is also provided in which the user may create other widgets to be used in conjunction with the selection box. .SH "METHODS" .PP The \fBiwidgets::selectionbox\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c \fBcurselection\fR \fBdelete\fR \fBindex\fR \fBnearest\fR \fBscan\fR \fBselection\fR \fBsize\fR .fi .LP See the "listbox" widget class manual entry for details on the associated methods. .SH "WIDGET-SPECIFIC METHODS" .TP \fIpathName \fBcget\fR \fIoption\fR Returns the current value of the configuration option given by \fIoption\fR. \fIOption\fR may have any of the values accepted by the \fBiwidgets::selectionbox\fR command. .TP \fIpathName \fBchildsite\fR Returns the child site widget path name. .TP \fIpathName \fBclear\fR \fIcomponent\fR Delete the contents of either the selection entry widget or items list. The \fIcomponent\fR argument may be either \fBitems\fR or \fBselection\fR. .TP \fIpathName\fR \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR? Query or modify the configuration options of the widget. If no \fIoption\fR is specified, returns a list describing all of the available options for \fIpathName\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). If \fIoption\fR is specified with no \fIvalue\fR, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no \fIoption\fR is specified). If one or more \fIoption\-value\fR pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. \fIOption\fR may have any of the values accepted by the \fBiwidgets::selectionbox\fR command. .TP \fIpathName \fBget\fR Returns the current value of the selection entry widget. .TP \fIpathName \fBinsert\fR \fIcomponent\fR \fIargs\fR Insert element(s) into either the selection entry widget or items list. The \fIcomponent\fR argument may be either \fBitems\fR or \fBselection\fR. The \fIargs\fR follow the rules of either an entry or list widget depending on the \fIcomponent\fR value. .TP \fIpathName \fBselectitem\fR Replace the selection entry field contents with the currently selected items value. .SH "COMPONENTS" .LP .nf Name: \fBchildsite\fR Class: \fBFrame\fR .fi .IP The childsite component is the user child site for the selection box. See the "frame" widget manual entry for details on the childsite component item. .LP .nf Name: \fBitems\fR Class: \fBScrolledlistbox\fR .fi .IP The items component provides the scrolled list box of items for the selection box. See the "scrolledlistbox" widget manual entry for details on the items component item. .LP .nf Name: \fBselection\fR Class: \fBEntryfield\fR .fi .IP The selection component provides the entry field in the selection box for display of the selected item in the items component. See the "entryfield" widget manual entry for details on the selection component item. .fi .SH EXAMPLE .DS package require Iwidgets 4.0 option add *textBackground white iwidgets::selectionbox .sb -items {Hello {Out There} World} pack .sb -padx 10 -pady 10 -fill both -expand yes set cs [label [.sb childsite].label -text "Child Site"] pack $cs -fill x -padx 10 -pady 10 .sb insert items 2 {Cruel Cruel} .sb selection set 1 .DE .SH AUTHOR Mark L. Ulferts .SH KEYWORDS selectionbox, widget ���������������������������������������������iwidgets-4.1.1/doc/mkitclman������������������������������������������������������������������������0000644�0036047�0045461�00000015326�06557146001�014411� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # \ exec itkwish "$0" ${1+"$@"} # # mkitclman "4 Dec 1995" # mkitclman - generate a man page from an itcl class # # SYNOPSIS # mkitclman classfile # # DESCRIPTION # Reads an [incr Tcl] or [incr Tk] class file as input, and outputs nroff. # mkitclman generates a standard format used for [incr Widget] classes. It # locates the class name, inheritance to one level, widget specific options, # and widget specific methods. Areas that the script cannot handle it # places and uppercased name delimited by leading and trailing '_' characters. # # [incr Tcl/Tk] 2.0 is the supported class format. # # CAVEATS # mkitlcman does not work with normal Tk or Tcl script files. # It expects only one class per file. In addition, it does not work on # namespace files. proc init { } { global _className global _inheritClass global _publicMethod global _publicVariable global _protectedMethod global _protectedVariable global _privateMethod global _privateVariable global _options set _className {} set _inheritClass {} } proc namespace { args } { global _className set _className [lindex $args 0] set classBody [lindex $args 1] eval $classBody } proc class { args } { global _className set _className [lindex $args 0] set classBody [lindex $args 1] eval $classBody } proc itk_option { action switch args } { global _options if { $action == "define" } { set _options($switch) $args } } proc inherit { inheritClass } { global _inheritClass set _inheritClass $inheritClass } # default is public method proc method { name args } { global _publicMethod set _publicMethod($name) $args } # pick up arrays later... proc common { name args } { global _commonVariable # set to defaults set _commonVariable($name) $args } proc public { type args } { global _publicMethod global _publicVariable switch $type { method { set _publicMethod([lindex $args 0]) [lindex $args 1] } variable { # _publicVariable(varName) = defaultValue set _publicVariable([lindex $args 0]) [lindex $args 1] } } } proc protected { type args } { global _protectedMethod global _protectedVariable switch $type { method { # _protectedMethod(methodName) = argList set _protectedMethod([lindex $args 0]) [lrange $args 1 end] } variable { # _protectedVariable(varName) = defaultValue set _protectedVariable([lindex $args 0]) [lindex $args 1] } } } proc private { type args } { global _privateMethod global _privateVariable switch $type { method { # _privateMethod(methodName) = argList set _privateMethod([lindex $args 0]) [lrange $args 1 end] } variable { # _privateVariable(varName) = defaultValue set _privateVariable([lindex $args 0]) [lindex $args 1] } } } proc body { args } { } proc configbody { args } { } proc destructor { args } { } proc constructor { args } { } proc gen { } { global _className global _classBody global _inheritClass global _publicMethod global _publicVariable global _protectedMethod global _protectedVariable global _privateMethod global _privateVariable global _methodSection global _optionSection global _manpage global _optionManFmt global _methodManFmt global _method global _options global _optionSwitch global _optionName global _optionClass if { $_inheritClass != {} } { set _inheritClass "$_inheritClass <-" } set _optionManFmt {} set _methodManFmt {} set _methodArgs {} foreach pbv [lsort [array names _publicVariable]] { set _optionSwitch "-$pbv" set _optionName $pbv set _optionClass "[string toupper [string index $pbv 0]][string range $pbv 1 end]" lappend _optionManFmt [subst -nobackslash -nocommand $_optionSection] } foreach opt [lsort [array names _options]] { set _optionSwitch $opt set _optionName [lindex $_options($opt) 0] set _optionClass [lindex $_options($opt) 1] lappend _optionManFmt [subst -nobackslash -nocommand $_optionSection] } foreach pbm [lsort [array names _publicMethod]] { set _method $pbm eval set _methodArgs [list $_publicMethod($pbm)] lappend _methodManFmt [subst -nobackslash -nocommand $_methodSection] } foreach ptm [lsort [array names _protectedMethod]] { } foreach ptv [lsort [array names _protectedVariable]] { } foreach pvm [lsort [array names _privateMethod]] { } foreach pvv [lsort [array names _privateVariable]] { } set _methodManFmt [join $_methodManFmt " "] set _optionManFmt [join $_optionManFmt " "] set _manpage [subst -nobackslash -nocommand $_manpage] puts $_manpage } set _manpage { '\" '\" Copyright (c) _AUTHOR_ '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" @(#) $_className.n '/" .so man.macros .HS $_className iwid .BS '\" Note: do not modify the .SH NAME line immediately below! '\" '\" .SH NAME $_className \- _NAME_DESCRIPTION_ .SH SYNOPSIS \fB$_className\fI \fIpathName\fR ?\fIoptions\fR? .SH "INHERITANCE" $_inheritClass $_className .SH "STANDARD OPTIONS" .LP .nf .ta 4c 8c 12c _STANDARD_OPTIONS_ .fi .LP See the "options" manual entry for details on the standard options. .SH "ASSOCIATED OPTIONS" .LP .nf .ta 4c 8c 12c _ASSOCIATED_OPTIONS_ .fi .LP See the "_ASSOCIATED_WIDGET_" widget manual entry for details on the above associated options. .SH "INHERITED OPTIONS" .LP .nf .ta 4c 8c 12c _INHERITED_OPTIONS_ .fi .LP See the "_INHERITED_WIDGET_" class manual entry for details on the inherited options. .SH "WIDGET-SPECIFIC OPTIONS" .LP $_optionManFmt .BE .SH DESCRIPTION .PP _DESCRIPTION_ .SH "METHODS" .PP The \fB$_className\fR command creates a new Tcl command whose name is \fIpathName\fR. This command may be used to invoke various operations on the widget. It has the following general form: .DS C \fIpathName option \fR?\fIarg arg ...\fR? .DE \fIOption\fR and the \fIarg\fRs determine the exact behavior of the command. The following commands are possible for $_className widgets: .SH "ASSOCIATED METHODS" .LP .nf .ta 4c 8c 12c _ASSOCIATED_METHODS_ .fi .LP See the "_ASSOCIATED_WIDGET_" manual entry for details on the standard methods. .SH "WIDGET-SPECIFIC METHODS" $_methodManFmt .SH "COMPONENTS" .LP .nf Name: \fB_COMPONENT_NAME_\fR Class: \fB_COMPONENT_CLASS_\fR .fi .IP _COMPONENT_DESCRIPTION_ See the "_COMPONENT_TYPE_" widget manual entry for details on the _COMPONENT_NAME_ component item. .fi .SH EXAMPLE .DS _EXAMPLE_CODE_ .DE .SH AUTHOR _AUTHOR_ .SH KEYWORDS _KEYWORDS_ } set _optionSection { .nf Name: \fB$_optionName\fR Class: \fB$_optionClass\fR Command-Line Switch: \fB$_optionSwitch\fR .fi .IP _OPTION_DESCRIPTION_ .LP } set _methodSection { .TP \fIpathName\fR \fB$_method\fR \fI$_methodArgs\fR _METHOD_DESCRIPTION_ } # Add these two lines up into the man page above to enable init source [lindex $argv 0] gen exit ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/iwidgets.tcl.in����������������������������������������������������������������������0000644�0036047�0045461�00000002573�13153526745�014701� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # iwidgets.tcl # ---------------------------------------------------------------------- # Invoked automatically by [incr Tk] upon startup to initialize # the [incr Widgets] package. # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@spd.dsccc.com # # @(#) $Id: iwidgets.tcl.in,v 1.8 2017/07/07 19:06:40 dgp Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 Mark L. Ulferts # ====================================================================== # See the file "license.terms" for information on usage and # redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. package require Tcl 8.0 package require Tk 8.0 package require Itcl @itcl_VERSION@ if {[string length [package provide Itk]] == 0} { package forget Itk package forget itk } package require Itk [string index @itcl_VERSION@ 0] namespace eval ::iwidgets { namespace export * variable library [file dirname [info script]] variable version @PACKAGE_VERSION@ lappend auto_path $iwidgets::library variable subdir foreach subdir {generic scripts} { if {[file isdirectory [file join $iwidgets::library $subdir]]} { lappend auto_path [file join $iwidgets::library $subdir] } } unset subdir } package provide Iwidgets $iwidgets::version �������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/Makefile.in��������������������������������������������������������������������������0000644�0036047�0045461�00000012432�13254753272�014010� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # This file is a Makefile for [incr Widgets]. If it has the name # "Makefile.in" then it is a template for a Makefile; to generate # the actual Makefile, run "./configure", which is a configuration # script generated by the "autoconf" program (constructs like # "@foo@" will get replaced in the actual Makefile. # # RCS: $Id: Makefile.in,v 1.17 2017/07/07 18:29:13 dgp Exp $ # Current [incr Widgets] version; used in various names. ITCL_VERSION = @itcl_VERSION@ #---------------------------------------------------------------- # Things you can change to personalize the Makefile for your own # site (you can make these changes in either Makefile.in or # Makefile, but changes to Makefile will get lost if you re-run # the configuration script). #---------------------------------------------------------------- # Pointer to lib dirs needed during testing: TCL_SRC_DIR = @TCL_SRC_DIR@ TK_SRC_DIR = @TK_SRC_DIR@ ITCL_SRC_DIR = @itcl_SRC_DIR@ ITK_SRC_DIR = @ITK_SRC_DIR@ #---------------------------------------------------------------- # The information below is modified by the configure script when # Makefile is generated from Makefile.in. You shouldn't normally # modify any of this stuff by hand. #---------------------------------------------------------------- srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ mandir = @mandir@ includedir = @includedir@ DESTDIR = PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ top_builddir = . PKG_DIR = $(PACKAGE_NAME)$(PACKAGE_VERSION) pkgdatadir = $(DESTDIR)$(datadir)/$(PKG_DIR) pkglibdir = $(DESTDIR)$(libdir)/$(PKG_DIR) pkgincludedir = $(DESTDIR)$(includedir)/$(PKG_DIR) # Top-level directory in which to install manual entries: MAN_INSTALL_DIR = $(DESTDIR)$(mandir)/mann INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ SHELL = @SHELL@ TOP_DIR = $(srcdir) GENERIC_DIR = $(TOP_DIR)/generic EXTRA_PATH = $(TCL_BIN_DIR):$(TK_BIN_DIR):$(ITCL_LIB_DIR):$(ITK_LIB_DIR) TCLSH_ENV = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library` \ TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library` \ ITCL_LIBRARY=`@CYGPATH@ @ITCL_LIB_DIR@` \ ITK_LIBRARY=`@CYGPATH@ @ITK_LIB_DIR@` \ IWIDGETS_LIBRARY=`@CYGPATH@ $(srcdir)` \ @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \ PATH="$(EXTRA_PATH):$(PATH)" \ TCLLIBPATH="$(top_builddir)" TCLSH_PROG = @TCLSH_PROG@ WISH_PROG = @WISH_PROG@ TCLSH = $(TCLSH_ENV) $(TCLSH_PROG) WISH = $(TCLSH_ENV) $(WISH_PROG) #---------------------------------------------------------------- # The information below should be usable as is. The configure # script won't modify it and you shouldn't need to modify it # either. #---------------------------------------------------------------- info: @echo "Please specify either 'make test' or 'make install'." all: @echo "Nothing to make for target 'all'. Run 'make test' to \ test the distribution" @echo "and 'make install' to install it." install: install-libraries install-doc install-demos test: $(WISH) `@CYGPATH@ $(srcdir)/tests/all.tcl` -load "package require -exact Itcl $(ITCL_VERSION); package forget Itk; package forget itk; package require -exact Iwidgets $(PACKAGE_VERSION)" $(TESTFLAGS) | cat shell: @$(WISH) $(SCRIPT) install-libraries: @mkdir -p $(pkglibdir)/scripts @echo "Installing source files from $(GENERIC_DIR) into $(pkglibdir)" @for i in $(GENERIC_DIR)/*.itk $(GENERIC_DIR)/*.itcl \ $(GENERIC_DIR)/tclIndex $(GENERIC_DIR)/*.gif ; do \ $(INSTALL_DATA) $$i $(pkglibdir)/scripts; \ done; @echo "Installing iwidgets.tcl and pkgIndex.tcl into $(pkglibdir)" @for i in iwidgets.tcl pkgIndex.tcl ; do \ $(INSTALL_DATA) $$i $(pkglibdir); \ done; install-demos: @mkdir -p $(pkglibdir)/demos/images @mkdir -p $(pkglibdir)/demos/html @echo "Installing demos from $(srcdir)/demos into $(pkglibdir)/demos" @for i in $(srcdir)/demos/*; do \ if test -f $$i ; then \ $(INSTALL_SCRIPT) $$i $(pkglibdir)/demos; \ fi; \ done; @echo "Installing images from $(srcdir)/demos/images into $(pkglibdir)/demos/images" @for i in $(srcdir)/demos/images/*; do \ if test -f $$i ; then \ $(INSTALL_DATA) $$i $(pkglibdir)/demos/images; \ fi; \ done; @echo "Installing html man pages from $(srcdir)/demos/html into $(pkglibdir)/demos/html" @for i in $(srcdir)/demos/html/*; do \ if test -f $$i ; then \ $(INSTALL_DATA) $$i $(pkglibdir)/demos/html; \ fi; \ done; install-doc: @mkdir -p $(MAN_INSTALL_DIR) @echo "Installing man pages from $(TOP_DIR)/doc into $(MAN_INSTALL_DIR)" @cd $(TOP_DIR)/doc; for i in *.n; do \ rm -f $(MAN_INSTALL_DIR)/`basename $$i`; \ rm -f $(MAN_INSTALL_DIR)/`basename iwidgets_$$i`; \ sed -e '/man\.macros/r man.macros' -e '/man\.macros/d' \ $$i > $(MAN_INSTALL_DIR)/`basename iwidgets_$$i`; \ chmod 444 $(MAN_INSTALL_DIR)/`basename iwidgets_$$i`; \ done; $(INSTALL_DATA) $(srcdir)/license.terms $(pkglibdir) Makefile: $(srcdir)/Makefile.in $(SHELL) config.status clean: rm -f core errs *~ \#* TAGS *.E a.out errors distclean: clean rm -f Makefile config.status config.cache config.log iwidgets.tcl pkgIndex.tcl depend: configure: configure.in autoconf # DO NOT DELETE THIS LINE -- make depend depends on it. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/outgoing/����������������������������������������������������������������������������0000755�0036047�0045461�00000000000�13136711011�013554� 5����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/outgoing/README����������������������������������������������������������������������0000644�0036047�0045461�00000001311�06557146247�014456� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������========================================================================== ----------------- [incr Widgets] Outgoing Widgets --------------------- ========================================================================== This directory contains mega-widgets which appear to be failing in public acceptance. The negative feedback has out paced the positive. They still have doc, test, and demos, but should be considered on their way out of the distribution. If you are one of the minority which feels differently as to the widgets usefullness, please copy it to a safe location. It will not be around long. LEAVING WIDGETS --------------------------------------------------------------------------- None �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/outgoing/CVS/������������������������������������������������������������������������0000755�0036047�0045461�00000000000�13153526747�014232� 5����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/outgoing/CVS/Repository��������������������������������������������������������������0000644�0036047�0045461�00000000022�13136711011�016303� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets/outgoing ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/outgoing/CVS/Entries�����������������������������������������������������������������0000644�0036047�0045461�00000000051�13153526747�015562� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/README/1.1/Mon Jul 27 18:53:27 1998// D ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/outgoing/CVS/Root��������������������������������������������������������������������0000644�0036047�0045461�00000000066�13136711011�015057� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:ext:dgp@incrtcl.cvs.sourceforge.net:/cvsroot/incrtcl ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/�����������������������������������������������������������������������������0000755�0036047�0045461�00000000000�13254733345�013354� 5����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/spindate.itk�����������������������������������������������������������������0000644�0036047�0045461�00000051756�07340752361�015710� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spindate # ---------------------------------------------------------------------- # Implements a Date spinner widget. A date spinner contains three # Spinner widgets: one Spinner for months, one SpinInt for days, # and one SpinInt for years. Months can be specified as abbreviated # strings, integers or a user-defined list. Options exist to manage to # behavior, appearance, and format of each component spinner. # # ---------------------------------------------------------------------- # AUTHOR: Sue Yockey EMAIL: yockey@actc.com # Mark L. Ulferts mulferts@austin.dsccc.com # # @(#) $Id: spindate.itk,v 1.5 2001/08/22 15:51:13 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Default resources. # option add *Spindate.monthLabel "Month" widgetDefault option add *Spindate.dayLabel "Day" widgetDefault option add *Spindate.yearLabel "Year" widgetDefault option add *Spindate.monthWidth 4 widgetDefault option add *Spindate.dayWidth 4 widgetDefault option add *Spindate.yearWidth 4 widgetDefault # # Usual options. # itk::usual Spindate { keep -background -cursor -foreground -labelfont -textbackground -textfont } # ------------------------------------------------------------------ # SPINDATE # ------------------------------------------------------------------ itcl::class iwidgets::Spindate { inherit itk::Widget constructor {args} {} destructor {} itk_option define -labelpos labelPos Position w itk_option define -orient orient Orient vertical itk_option define -monthon monthOn MonthOn true itk_option define -dayon dayOn DayOn true itk_option define -yearon yearOn YearOn true itk_option define -datemargin dateMargin Margin 1 itk_option define -yeardigits yearDigits YearDigits 4 itk_option define -monthformat monthFormat MonthFormat integer public { method get {{format "-string"}} method show {{date now}} } protected { method _packDate {{when later}} variable _repack {} ;# Reconfiguration flag. } private { method _lastDay {month year} method _spinMonth {direction} method _spinDay {direction} variable _monthFormatStr "%m" variable _yearFormatStr "%Y" variable _interior } } # # Provide a lowercased access method for the Spindate class. # proc ::iwidgets::spindate {pathName args} { uplevel ::iwidgets::Spindate $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Spindate::constructor {args} { set _interior $itk_interior set clicks [clock seconds] # # Create Month Spinner # itk_component add month { iwidgets::Spinner $itk_interior.month -fixed 2 -justify right \ -decrement [itcl::code $this _spinMonth -1] \ -increment [itcl::code $this _spinMonth 1] } { keep -background -cursor -arroworient -foreground \ -labelfont -labelmargin -relief -textbackground \ -textfont -repeatdelay -repeatinterval rename -labeltext -monthlabel monthLabel Text rename -width -monthwidth monthWidth Width } # # Take off the default bindings for selction and motion. # bind [$itk_component(month) component entry] <1> {break} bind [$itk_component(month) component entry] <Button1-Motion> {break} # # Create Day Spinner # itk_component add day { iwidgets::Spinint $itk_interior.day -fixed 2 -justify right \ -decrement [itcl::code $this _spinDay -1] \ -increment [itcl::code $this _spinDay 1] } { keep -background -cursor -arroworient -foreground \ -labelfont -labelmargin -relief -textbackground \ -textfont -repeatdelay -repeatinterval rename -labeltext -daylabel dayLabel Text rename -width -daywidth dayWidth Width } # # Take off the default bindings for selction and motion. # bind [$itk_component(day) component entry] <1> {break} bind [$itk_component(day) component entry] <Button1-Motion> {break} # # Create Year Spinner # itk_component add year { iwidgets::Spinint $itk_interior.year -fixed 2 -justify right \ -range {1900 3000} } { keep -background -cursor -arroworient -foreground \ -labelfont -labelmargin -relief -textbackground \ -textfont -repeatdelay -repeatinterval rename -labeltext -yearlabel yearLabel Text rename -width -yearwidth yearWidth Width } # # Take off the default bindings for selction and motion. # bind [$itk_component(year) component entry] <1> {break} bind [$itk_component(year) component entry] <Button1-Motion> {break} # # Initialize the widget based on the command line options. # eval itk_initialize $args # # Show the current date. # show now } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Spindate::destructor {} { if {$_repack != ""} {after cancel $_repack} } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -labelpos # # Specifies the location of all 3 spinners' labels. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spindate::labelpos { switch $itk_option(-labelpos) { n { $itk_component(month) configure -labelpos n $itk_component(day) configure -labelpos n $itk_component(year) configure -labelpos n # # Un-align labels # $itk_component(month) configure -labelmargin 1 $itk_component(day) configure -labelmargin 1 $itk_component(year) configure -labelmargin 1 } s { $itk_component(month) configure -labelpos s $itk_component(day) configure -labelpos s $itk_component(year) configure -labelpos s # # Un-align labels # $itk_component(month) configure -labelmargin 1 $itk_component(day) configure -labelmargin 1 $itk_component(year) configure -labelmargin 1 } w { $itk_component(month) configure -labelpos w $itk_component(day) configure -labelpos w $itk_component(year) configure -labelpos w } e { $itk_component(month) configure -labelpos e $itk_component(day) configure -labelpos e $itk_component(year) configure -labelpos e # # Un-align labels # $itk_component(month) configure -labelmargin 1 $itk_component(day) configure -labelmargin 1 $itk_component(year) configure -labelmargin 1 } default { error "bad labelpos option \"$itk_option(-labelpos)\",\ should be n, s, w or e" } } _packDate } # ------------------------------------------------------------------ # OPTION: -orient # # Specifies the orientation of the 3 spinners for Month, Day # and year. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spindate::orient { _packDate } # ------------------------------------------------------------------ # OPTION: -monthon # # Specifies whether or not to display the month spinner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spindate::monthon { _packDate } # ------------------------------------------------------------------ # OPTION: -dayon # # Specifies whether or not to display the day spinner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spindate::dayon { _packDate } # ------------------------------------------------------------------ # OPTION: -yearon # # Specifies whether or not to display the year spinner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spindate::yearon { _packDate } # ------------------------------------------------------------------ # OPTION: -datemargin # # Specifies the margin space between the month and day spinners # and the day and year spinners. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spindate::datemargin { _packDate } # ------------------------------------------------------------------ # OPTION: -yeardigits # # Number of digits for year display, 2 or 4 # ------------------------------------------------------------------ itcl::configbody iwidgets::Spindate::yeardigits { set clicks [clock seconds] switch $itk_option(-yeardigits) { "2" { $itk_component(year) configure -width 2 -fixed 2 $itk_component(year) clear $itk_component(year) insert 0 [clock format $clicks -format "%y"] set _yearFormatStr "%y" } "4" { $itk_component(year) configure -width 4 -fixed 4 $itk_component(year) clear $itk_component(year) insert 0 [clock format $clicks -format "%Y"] set _yearFormatStr "%Y" } default { error "bad yeardigits option \"$itk_option(-yeardigits)\",\ should be 2 or 4" } } } # ------------------------------------------------------------------ # OPTION: -monthformat # # Format of month display, integers (1-12) or brief strings (Jan - # Dec), or full strings (January - December). # ------------------------------------------------------------------ itcl::configbody iwidgets::Spindate::monthformat { set clicks [clock seconds] if {$itk_option(-monthformat) == "brief"} { $itk_component(month) configure -width 3 -fixed 3 $itk_component(month) delete 0 end $itk_component(month) insert 0 [clock format $clicks -format "%b"] set _monthFormatStr "%b" } elseif {$itk_option(-monthformat) == "full"} { $itk_component(month) configure -width 9 -fixed 9 $itk_component(month) delete 0 end $itk_component(month) insert 0 [clock format $clicks -format "%B"] set _monthFormatStr "%B" } elseif {$itk_option(-monthformat) == "integer"} { $itk_component(month) configure -width 2 -fixed 2 $itk_component(month) delete 0 end $itk_component(month) insert 0 [clock format $clicks -format "%m"] set _monthFormatStr "%m" } else { error "bad monthformat option\ \"$itk_option(-monthformat)\", should be\ \"integer\", \"brief\" or \"full\"" } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: get ?format? # # Return the current contents of the spindate widget in one of # two formats string or as an integer clock value using the -string # and -clicks options respectively. The default is by string. # Reference the clock command for more information on obtaining dates # and their formats. # ------------------------------------------------------------------ itcl::body iwidgets::Spindate::get {{format "-string"}} { set month [$itk_component(month) get] set day [$itk_component(day) get] set year [$itk_component(year) get] if {[regexp {[0-9]+} $month]} { set datestr "$month/$day/$year" } else { set datestr "$day $month $year" } switch -- $format { "-string" { return $datestr } "-clicks" { return [clock scan $datestr] } default { error "bad format option \"$format\":\ should be -string or -clicks" } } } # ------------------------------------------------------------------ # PUBLIC METHOD: show date # # Changes the currently displayed date to be that of the date # argument. The date may be specified either as a string or an # integer clock value. Reference the clock command for more # information on obtaining dates and their formats. # ------------------------------------------------------------------ itcl::body iwidgets::Spindate::show {{date "now"}} { # # Convert the date to a clock clicks value. # if {$date == "now"} { set seconds [clock seconds] } else { if {[catch {clock format $date}] == 0} { set seconds $date } elseif {[catch {set seconds [clock scan $date]}] != 0} { error "bad date: \"$date\", must be a valid date\ string, clock clicks value or the keyword now" } } # # Display the month based on the -monthformat option. # switch $itk_option(-monthformat) { "brief" { $itk_component(month) delete 0 end $itk_component(month) insert 0 [clock format $seconds -format "%b"] } "full" { $itk_component(month) delete 0 end $itk_component(month) insert 0 [clock format $seconds -format "%B"] } "integer" { $itk_component(month) delete 0 end $itk_component(month) insert 0 [clock format $seconds -format "%m"] } } # # Display the day. # $itk_component(day) delete 0 end $itk_component(day) insert end [clock format $seconds -format "%d"] # # Display the year based on the -yeardigits option. # switch $itk_option(-yeardigits) { "2" { $itk_component(year) delete 0 end $itk_component(year) insert 0 [clock format $seconds -format "%y"] } "4" { $itk_component(year) delete 0 end $itk_component(year) insert 0 [clock format $seconds -format "%Y"] } } return } # ---------------------------------------------------------------- # PRIVATE METHOD: _spinMonth direction # # Increment or decrement month value. We need to get the values # for all three fields so we can make sure the day agrees with # the month. Should the current day be greater than the day for # the spun month, then the day is set to the last day for the # new month. # ---------------------------------------------------------------- itcl::body iwidgets::Spindate::_spinMonth {direction} { set month [$itk_component(month) get] set day [$itk_component(day) get] set year [$itk_component(year) get] # # There appears to be a bug in the Tcl clock command in that it # can't scan a date like "12/31/1999 1 month" or any other date with # a year above 2000, but it has no problem scanning "07/01/1998 1 month". # So, we're going to play a game and increment by days until this # is fixed in Tcl. # if {$direction == 1} { set incrdays 32 set day 01 } else { set incrdays -28 set day 28 } if {[regexp {[0-9]+} $month]} { set clicks [clock scan "$month/$day/$year $incrdays day"] } else { set clicks [clock scan "$day $month $year $incrdays day"] } $itk_component(month) clear $itk_component(month) insert 0 \ [clock format $clicks -format $_monthFormatStr] set currday [$itk_component(day) get] set lastday [_lastDay [$itk_component(month) get] $year] if {$currday > $lastday} { $itk_component(day) clear $itk_component(day) insert end $lastday } } # ---------------------------------------------------------------- # PRIVATE METHOD: _spinDay direction # # Increment or decrement day value. If the previous day was the # first, then set the new day to the last day for the current # month. If it was the last day of the month, change it to the # first. Otherwise, spin it to the next day. # ---------------------------------------------------------------- itcl::body iwidgets::Spindate::_spinDay {direction} { set month [$itk_component(month) get] set day [$itk_component(day) get] set year [$itk_component(year) get] set lastday [_lastDay $month $year] set currclicks [get -clicks] $itk_component(day) delete 0 end if {(($day == "01") || ($day == "1")) && ($direction == -1)} { $itk_component(day) insert 0 $lastday return } if {($day == $lastday) && ($direction == 1)} { $itk_component(day) insert 0 "01" return } set clicks [clock scan "$direction day" -base $currclicks] $itk_component(day) insert 0 [clock format $clicks -format "%d"] } # ------------------------------------------------------------------ # PRIVATE METHOD: _packDate when # # Pack the components of the date spinner. If "when" is "now", the # change is applied immediately. If it is "later" or it is not # specified, then the change is applied later, when the application # is idle. # ------------------------------------------------------------------ itcl::body iwidgets::Spindate::_packDate {{when later}} { if {$when == "later"} { if {$_repack == ""} { set _repack [after idle [itcl::code $this _packDate now]] } return } elseif {$when != "now"} { error "bad option \"$when\": should be now or later" } # # Turn off the minsizes for all the rows and columns. # for {set i 0} {$i < 5} {incr i} { grid rowconfigure $_interior $i -minsize 0 grid columnconfigure $_interior $i -minsize 0 } set _repack "" # # Based on the orientation, use the grid to place the components into # the proper rows and columns. # switch $itk_option(-orient) { vertical { set row -1 if {$itk_option(-monthon)} { grid $itk_component(month) -row [incr row] -column 0 \ -sticky nsew } else { grid forget $itk_component(month) } if {$itk_option(-dayon)} { if {$itk_option(-dayon)} { grid rowconfigure $_interior [incr row] \ -minsize $itk_option(-datemargin) } grid $itk_component(day) -row [incr row] -column 0 \ -sticky nsew } else { grid forget $itk_component(day) } if {$itk_option(-yearon)} { if {$itk_option(-monthon) || $itk_option(-dayon)} { grid rowconfigure $_interior [incr row] \ -minsize $itk_option(-datemargin) } grid $itk_component(year) -row [incr row] -column 0 \ -sticky nsew } else { grid forget $itk_component(year) } if {$itk_option(-labelpos) == "w"} { iwidgets::Labeledwidget::alignlabels $itk_component(month) \ $itk_component(day) $itk_component(year) } } horizontal { set column -1 if {$itk_option(-monthon)} { grid $itk_component(month) -row 0 -column [incr column] \ -sticky nsew } else { grid forget $itk_component(month) } if {$itk_option(-dayon)} { if {$itk_option(-monthon)} { grid columnconfigure $_interior [incr column] \ -minsize $itk_option(-datemargin) } grid $itk_component(day) -row 0 -column [incr column] \ -sticky nsew } else { grid forget $itk_component(day) } if {$itk_option(-yearon)} { if {$itk_option(-monthon) || $itk_option(-dayon)} { grid columnconfigure $_interior [incr column] \ -minsize $itk_option(-datemargin) } grid $itk_component(year) -row 0 -column [incr column] \ -sticky nsew } else { grid forget $itk_component(year) } # # Un-align labels. # $itk_component(month) configure -labelmargin 1 $itk_component(day) configure -labelmargin 1 $itk_component(year) configure -labelmargin 1 } default { error "bad orient option \"$itk_option(-orient)\", should\ be \"vertical\" or \"horizontal\"" } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _lastDay month year # # Internal method which determines the last day of the month for # the given month and year. We start at 28 and go forward till # we fail. Crude but effective. # ------------------------------------------------------------------ itcl::body iwidgets::Spindate::_lastDay {month year} { set lastone 28 for {set lastone 28} {$lastone < 32} {incr lastone} { if {[regexp {[0-9]+} $month]} { if {[catch {clock scan "$month/[expr {$lastone + 1}]/$year"}] != 0} { return $lastone } } else { if {[catch {clock scan "[expr {$lastone + 1}] $month $year"}] != 0} { return $lastone } } } } ������������������iwidgets-4.1.1/generic/labeledframe.itk�������������������������������������������������������������0000644�0036047�0045461�00000042145�07336540123�016470� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Labeledframe # ---------------------------------------------------------------------- # Implements a hull frame with a grooved relief, a label, and a # frame childsite. # # The frame childsite can be filled with any widget via a derived class # or though the use of the childsite method. This class was designed # to be a general purpose base class for supporting the combination of # a labeled frame and a childsite. The options include the ability to # position the label at configurable locations within the grooved relief # of the hull frame, and control the display of the label. # # To following demonstrates the different values which the "-labelpos" # option may be set to and the resulting layout of the label when # one executes the following command with "-labeltext" set to "LABEL": # # example: # labeledframe .w -labeltext LABEL -labelpos <ne,n,nw,se,s,sw,en,e,es,wn,s,ws> # # ne n nw se s sw # # *LABEL**** **LABEL** ****LABEL* ********** ********* ********** # * * * * * * * * * * * * # * * * * * * * * * * * * # * * * * * * * * * * * * # ********** ********* ********** *LABEL**** **LABEL** ****LABEL* # # en e es wn s ws # # ********** ********* ********* ********* ********* ********** # * * * * * * * * * * * * # L * * * * * * L * * * * # A * L * * * * A * L * L # B * A * L * * B * A * A # E * B * A * * E * B * B # L * E * B * * L * E * E # * * L * E * * * * L * L # * * * * L * * * * * * * # ********** ********** ********* ********** ********* ********** # # ---------------------------------------------------------------------- # AUTHOR: John A. Tucker EMAIL: jatucker@spd.dsccc.com # # ====================================================================== # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Default resources. # option add *Labeledframe.labelMargin 10 widgetDefault option add *Labeledframe.labelFont \ "-Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-*" widgetDefault option add *Labeledframe.labelPos n widgetDefault option add *Labeledframe.borderWidth 2 widgetDefault option add *Labeledframe.relief groove widgetDefault # # Usual options. # itk::usual Labeledframe { keep -background -cursor -labelfont -foreground } itcl::class iwidgets::Labeledframe { inherit itk::Archetype itk_option define -ipadx iPadX IPad 0 itk_option define -ipady iPadY IPad 0 itk_option define -labelmargin labelMargin LabelMargin 10 itk_option define -labelpos labelPos LabelPos n constructor {args} {} destructor {} # # Public methods # public method childsite {} # # Protected methods # protected { method _positionLabel {{when later}} method _collapseMargin {} method _setMarginThickness {value} method smt {value} { _setMarginThickness $value } } # # Private methods/data # private { proc _initTable {} variable _reposition "" ;# non-null => _positionLabel pending variable itk_hull "" common _LAYOUT_TABLE } } # # Provide a lowercased access method for the Labeledframe class. # proc ::iwidgets::labeledframe {pathName args} { uplevel ::iwidgets::Labeledframe $pathName $args } # ----------------------------------------------------------------------------- # CONSTRUCTOR # ----------------------------------------------------------------------------- itcl::body iwidgets::Labeledframe::constructor { args } { # # Create a window with the same name as this object # set itk_hull [namespace tail $this] set itk_interior $itk_hull itk_component add hull { frame $itk_hull \ -relief groove \ -class [namespace tail [info class]] } { keep -background -cursor -relief -borderwidth rename -highlightbackground -background background Background rename -highlightcolor -background background Background } bind itk-delete-$itk_hull <Destroy> "itcl::delete object $this" set tags [bindtags $itk_hull] bindtags $itk_hull [linsert $tags 0 itk-delete-$itk_hull] # # Create the childsite frame window # _______ # |_____| # |_|X|_| # |_____| # itk_component add childsite { frame $itk_interior.childsite -highlightthickness 0 -bd 0 } # # Create the label to be positioned within the grooved relief # of the hull frame. # itk_component add label { label $itk_interior.label -highlightthickness 0 -bd 0 } { usual rename -bitmap -labelbitmap labelBitmap Bitmap rename -font -labelfont labelFont Font rename -image -labelimage labelImage Image rename -text -labeltext labelText Text rename -textvariable -labelvariable labelVariable Variable ignore -highlightthickness -highlightcolor } grid $itk_component(childsite) -row 1 -column 1 -sticky nsew grid columnconfigure $itk_interior 1 -weight 1 grid rowconfigure $itk_interior 1 -weight 1 bind $itk_component(label) <Configure> +[itcl::code $this _positionLabel] # # Initialize the class array of layout configuration options. Since # this is a one time only thing. # _initTable eval itk_initialize $args # # When idle, position the label. # _positionLabel } # ----------------------------------------------------------------------------- # DESTRUCTOR # ----------------------------------------------------------------------------- itcl::body iwidgets::Labeledframe::destructor {} { if {$_reposition != ""} { after cancel $_reposition } if {[winfo exists $itk_hull]} { set tags [bindtags $itk_hull] set i [lsearch $tags itk-delete-$itk_hull] if {$i >= 0} { bindtags $itk_hull [lreplace $tags $i $i] } destroy $itk_hull } } # ----------------------------------------------------------------------------- # OPTIONS # ----------------------------------------------------------------------------- # ------------------------------------------------------------------ # OPTION: -ipadx # # Specifies the width of the horizontal gap from the border to the # the child site. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledframe::ipadx { grid configure $itk_component(childsite) -padx $itk_option(-ipadx) _positionLabel } # ------------------------------------------------------------------ # OPTION: -ipady # # Specifies the width of the vertical gap from the border to the # the child site. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledframe::ipady { grid configure $itk_component(childsite) -pady $itk_option(-ipady) _positionLabel } # ----------------------------------------------------------------------------- # OPTION: -labelmargin # # Set the margin of the most adjacent side of the label to the hull # relief. # ---------------------------------------------------------------------------- itcl::configbody iwidgets::Labeledframe::labelmargin { _positionLabel } # ----------------------------------------------------------------------------- # OPTION: -labelpos # # Set the position of the label within the relief of the hull frame # widget. # ---------------------------------------------------------------------------- itcl::configbody iwidgets::Labeledframe::labelpos { _positionLabel } # ----------------------------------------------------------------------------- # PROCS # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- # PRIVATE PROC: _initTable # # Initializes the _LAYOUT_TABLE common variable of the Labeledframe # class. The initialization is performed in its own proc ( as opposed # to in the class definition ) so that the initialization occurs only # once. # # _LAYOUT_TABLE common array description: # Provides a table of the configuration option values # used to place the label widget within the grooved relief of the hull # frame for each of the 12 possible "-labelpos" values. # # Each of the 12 rows is layed out as follows: # {"-relx" "-rely" <rowconfigure|columnconfigure> <row/column number>} # ----------------------------------------------------------------------------- itcl::body iwidgets::Labeledframe::_initTable {} { array set _LAYOUT_TABLE { nw-relx 0.0 nw-rely 0.0 nw-wrap 0 nw-conf rowconfigure nw-num 0 n-relx 0.5 n-rely 0.0 n-wrap 0 n-conf rowconfigure n-num 0 ne-relx 1.0 ne-rely 0.0 ne-wrap 0 ne-conf rowconfigure ne-num 0 sw-relx 0.0 sw-rely 1.0 sw-wrap 0 sw-conf rowconfigure sw-num 2 s-relx 0.5 s-rely 1.0 s-wrap 0 s-conf rowconfigure s-num 2 se-relx 1.0 se-rely 1.0 se-wrap 0 se-conf rowconfigure se-num 2 en-relx 1.0 en-rely 0.0 en-wrap 1 en-conf columnconfigure en-num 2 e-relx 1.0 e-rely 0.5 e-wrap 1 e-conf columnconfigure e-num 2 es-relx 1.0 es-rely 1.0 es-wrap 1 es-conf columnconfigure es-num 2 wn-relx 0.0 wn-rely 0.0 wn-wrap 1 wn-conf columnconfigure wn-num 0 w-relx 0.0 w-rely 0.5 w-wrap 1 w-conf columnconfigure w-num 0 ws-relx 0.0 ws-rely 1.0 ws-wrap 1 ws-conf columnconfigure ws-num 0 } # # Since this is a one time only thing, we'll redefine the proc to be empty # afterwards so it only happens once. # # NOTE: Be careful to use the "body" command, or the proc will get lost! # itcl::body ::iwidgets::Labeledframe::_initTable {} {} } # ----------------------------------------------------------------------------- # METHODS # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- # PUBLIC METHOD:: childsite # # ----------------------------------------------------------------------------- itcl::body iwidgets::Labeledframe::childsite {} { return $itk_component(childsite) } # ----------------------------------------------------------------------------- # PROTECTED METHOD: _positionLabel ?when? # # Places the label in the relief of the hull. If "when" is "now", the # change is applied immediately. If it is "later" or it is not # specified, then the change is applied later, when the application # is idle. # ----------------------------------------------------------------------------- itcl::body iwidgets::Labeledframe::_positionLabel {{when later}} { if {$when == "later"} { if {$_reposition == ""} { set _reposition [after idle [itcl::code $this _positionLabel now]] } return } set pos $itk_option(-labelpos) # # If there is not an entry for the "relx" value associated with # the given "-labelpos" option value, then it invalid. # if { [catch {set relx $_LAYOUT_TABLE($pos-relx)}] } { error "bad labelpos option\"$itk_option(-labelpos)\": should be\ nw, n, ne, sw, s, se, en, e, es, wn, w, or ws" } update idletasks $itk_component(label) configure -wraplength $_LAYOUT_TABLE($pos-wrap) set labelWidth [winfo reqwidth $itk_component(label)] set labelHeight [winfo reqheight $itk_component(label)] set borderwidth $itk_option(-borderwidth) set margin $itk_option(-labelmargin) switch $pos { nw { set labelThickness $labelHeight set minsize [expr {$labelThickness/2.0}] set xPos [expr {$minsize+$borderwidth+$margin}] set yPos -$minsize } n { set labelThickness $labelHeight set minsize [expr {$labelThickness/2.0}] set xPos [expr {-$labelWidth/2.0}] set yPos -$minsize } ne { set labelThickness $labelHeight set minsize [expr {$labelThickness/2.0}] set xPos [expr {-($minsize+$borderwidth+$margin+$labelWidth)}] set yPos -$minsize } sw { set labelThickness $labelHeight set minsize [expr {$labelThickness/2.0}] set xPos [expr {$minsize+$borderwidth+$margin}] set yPos -$minsize } s { set labelThickness $labelHeight set minsize [expr {$labelThickness/2.0}] set xPos [expr {-$labelWidth/2.0}] set yPos [expr {-$labelHeight/2.0}] } se { set labelThickness $labelHeight set minsize [expr {$labelThickness/2.0}] set xPos [expr {-($minsize+$borderwidth+$margin+$labelWidth)}] set yPos [expr {-$labelHeight/2.0}] } wn { set labelThickness $labelWidth set minsize [expr {$labelThickness/2.0}] set xPos -$minsize set yPos [expr {$minsize+$margin+$borderwidth}] } w { set labelThickness $labelWidth set minsize [expr {$labelThickness/2.0}] set xPos -$minsize set yPos [expr {-($labelHeight/2.0)}] } ws { set labelThickness $labelWidth set minsize [expr {$labelThickness/2.0}] set xPos -$minsize set yPos [expr {-($minsize+$borderwidth+$margin+$labelHeight)}] } en { set labelThickness $labelWidth set minsize [expr {$labelThickness/2.0}] set xPos -$minsize set yPos [expr {$minsize+$borderwidth+$margin}] } e { set labelThickness $labelWidth set minsize [expr {$labelThickness/2.0}] set xPos -$minsize set yPos [expr {-($labelHeight/2.0)}] } es { set labelThickness $labelWidth set minsize [expr {$labelThickness/2.0}] set xPos -$minsize set yPos [expr {-($minsize+$borderwidth+$margin+$labelHeight)}] } } _setMarginThickness $minsize place $itk_component(label) \ -relx $_LAYOUT_TABLE($pos-relx) -x $xPos \ -rely $_LAYOUT_TABLE($pos-rely) -y $yPos \ -anchor nw set what $_LAYOUT_TABLE($pos-conf) set number $_LAYOUT_TABLE($pos-num) grid $what $itk_interior $number -minsize $minsize set _reposition "" } # ----------------------------------------------------------------------------- # PROTECTED METHOD: _collapseMargin # # Resets the "-minsize" of all rows and columns of the hull's grid # used to set the label margin to 0 # ----------------------------------------------------------------------------- itcl::body iwidgets::Labeledframe::_collapseMargin {} { grid columnconfigure $itk_interior 0 -minsize 0 grid columnconfigure $itk_interior 2 -minsize 0 grid rowconfigure $itk_interior 0 -minsize 0 grid rowconfigure $itk_interior 2 -minsize 0 } # ----------------------------------------------------------------------------- # PROTECTED METHOD: _setMarginThickness # # Set the margin thickness ( i.e. the hidden "-highlightthickness" # of the hull ) to the input value. # # The "-highlightthickness" option of the hull frame is not intended to be # configured by users of this class, but does need to be configured to properly # place the label whenever the label is configured. # # Therefore, since I can't find a better way at this time, I achieve this # configuration by: adding the "-highlightthickness" option back into # the hull frame; configuring the "-highlightthickness" option to properly # place the label; and then remove the "-highlightthickness" option from the # hull. # # This way the option is not visible or configurable without some hacking. # # ----------------------------------------------------------------------------- itcl::body iwidgets::Labeledframe::_setMarginThickness {value} { itk_option add hull.highlightthickness $itk_component(hull) configure -highlightthickness $value itk_option remove hull.highlightthickness } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/colors.itcl������������������������������������������������������������������0000644�0036047�0045461�00000016172�07336540223�015534� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # colors # ---------------------------------------------------------------------- # The colors class encapsulates several color related utility functions. # Class level scope resolution must be used inorder to access the static # member functions. # # USAGE: # set hsb [colors::rgbToHsb [winfo rgb . bisque]] # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@spd.dsccc.com # # @(#) $Id: colors.itcl,v 1.2 2001/08/15 18:33:55 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 Mark L. Ulferts # ====================================================================== # Permission is hereby granted, without written agreement and without # license or royalty fees, to use, copy, modify, and distribute this # software and its documentation for any purpose, provided that the # above copyright notice and the following two paragraphs appear in # all copies of this software. # # IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES # ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN # IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # # THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND # FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS # ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO # PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # ====================================================================== namespace eval iwidgets::colors { # ------------------------------------------------------------------ # PROCEDURE: rgbToNumeric # # Returns the numeric value for a list of red, green, and blue. # ------------------------------------------------------------------ proc rgbToNumeric {rgb} { if {[llength $rgb] != 3} { error "bad arg: \"$rgb\", should be list of red, green, and blue" } return [format "#%04x%04x%04x" \ [lindex $rgb 0] [lindex $rgb 1] [lindex $rgb 2]] } # ------------------------------------------------------------------ # PROCEDURE: rgbToHsb # # The procedure below converts an RGB value to HSB. It takes red, # green, and blue components (0-65535) as arguments, and returns a # list containing HSB components (floating-point, 0-1) as result. # The code here is a copy of the code on page 615 of "Fundamentals # of Interactive Computer Graphics" by Foley and Van Dam. # ------------------------------------------------------------------ proc rgbToHsb {rgb} { if {[llength $rgb] != 3} { error "bad arg: \"$rgb\", should be list of red, green, and blue" } set r [expr {[lindex $rgb 0]/65535.0}] set g [expr {[lindex $rgb 1]/65535.0}] set b [expr {[lindex $rgb 2]/65535.0}] set max 0 if {$r > $max} {set max $r} if {$g > $max} {set max $g} if {$b > $max} {set max $b} set min 65535 if {$r < $min} {set min $r} if {$g < $min} {set min $g} if {$b < $min} {set min $b} if {$max != 0} { set sat [expr {($max-$min)/$max}] } else { set sat 0 } if {$sat == 0} { set hue 0 } else { set rc [expr {($max-$r)/($max-$min)}] set gc [expr {($max-$g)/($max-$min)}] set bc [expr {($max-$b)/($max-$min)}] if {$r == $max} { set hue [expr {$bc-$gc}] } elseif {$g == $max} { set hue [expr {2+$rc-$bc}] } elseif {$b == $max} { set hue [expr {4+$gc-$rc}] } set hue [expr {$hue*0.1666667}] if {$hue < 0} {set hue [expr {$hue+1.0}]} } return [list $hue $sat $max] } # ------------------------------------------------------------------ # PROCEDURE: hsbToRgb # # The procedure below converts an HSB value to RGB. It takes hue, # saturation, and value components (floating-point, 0-1.0) as # arguments, and returns a list containing RGB components (integers, # 0-65535) as result. The code here is a copy of the code on page # 616 of "Fundamentals of Interactive Computer Graphics" by Foley # and Van Dam. # ------------------------------------------------------------------ proc hsbToRgb {hsb} { if {[llength $hsb] != 3} { error "bad arg: \"$hsb\", should be list of hue, saturation, and brightness" } set hue [lindex $hsb 0] set sat [lindex $hsb 1] set value [lindex $hsb 2] set v [format %.0f [expr {65535.0*$value}]] if {$sat == 0} { return "$v $v $v" } else { set hue [expr {$hue*6.0}] if {$hue >= 6.0} { set hue 0.0 } scan $hue. %d i set f [expr {$hue-$i}] set p [format %.0f [expr {65535.0*$value*(1 - $sat)}]] set q [format %.0f [expr {65535.0*$value*(1 - ($sat*$f))}]] set t [format %.0f [expr {65535.0*$value*(1 - ($sat*(1 - $f)))}]] case $i \ 0 {return "$v $t $p"} \ 1 {return "$q $v $p"} \ 2 {return "$p $v $t"} \ 3 {return "$p $q $v"} \ 4 {return "$t $p $v"} \ 5 {return "$v $p $q"} error "i value $i is out of range" } } # ------------------------------------------------------------------ # # PROCEDURE: topShadow bgColor # # This method computes a lighter shadow variant of bgColor. # It wants to decrease the saturation to 25%. But if there is # no saturation (as in gray colors) it tries to turn the # brightness up by 10%. It maxes the brightness at 1.0 to # avoid bogus colors... # # bgColor is converted to HSB where the calculations are # made. Then converted back to an rgb color number (hex fmt) # # ------------------------------------------------------------------ proc topShadow { bgColor } { set hsb [rgbToHsb [winfo rgb . $bgColor]] set saturation [lindex $hsb 1] set brightness [lindex $hsb 2] if { $brightness < 0.9 } { # try turning the brightness up first. set brightness [expr {$brightness * 1.1}] } else { # otherwise fiddle with saturation set saturation [expr {$saturation * 0.25}] } set hsb [lreplace $hsb 1 1 [set saturation]] set hsb [lreplace $hsb 2 2 [set brightness]] set rgb [hsbToRgb $hsb] set color [rgbToNumeric $rgb] return $color } # ------------------------------------------------------------------ # # PROC: bottomShadow bgColor # # # This method computes a darker shadow variant of bg color. # It takes the brightness and decreases it to 80% of its # original value. # # bgColor is converted to HSB where the calculations are # made. Then converted back to an rgb color number (hex fmt) # # ------------------------------------------------------------------ proc bottomShadow { bgColor } { set hsb [rgbToHsb [winfo rgb . $bgColor]] set hsb [lreplace $hsb 2 2 [expr {[lindex $hsb 2] * 0.8}]] set rgb [hsbToRgb $hsb] set color [rgbToNumeric $rgb] return $color } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/promptdialog.itk�������������������������������������������������������������0000644�0036047�0045461�00000015722�07334044000�016556� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Promptdialog # ---------------------------------------------------------------------- # Implements a prompt dialog similar to the OSF/Motif standard prompt # dialog composite widget. The Promptdialog is derived from the # Dialog class and is composed of a EntryField with methods to # manipulate the dialog buttons. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) $Id: promptdialog.itk,v 1.2 2001/08/07 19:56:48 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Promptdialog { keep -background -borderwidth -cursor -foreground -highlightcolor \ -highlightthickness -insertbackground -insertborderwidth \ -insertofftime -insertontime -insertwidth -labelfont -modality \ -selectbackground -selectborderwidth -selectforeground \ -textbackground -textfont } # ------------------------------------------------------------------ # PROMPTDIALOG # ------------------------------------------------------------------ itcl::class iwidgets::Promptdialog { inherit iwidgets::Dialog constructor {args} {} public method get {} public method clear {} public method insert {args} public method delete {args} public method icursor {args} public method index {args} public method scan {args} public method selection {args} method xview {args} } # # Provide a lowercased access method for the Dialogshell class. # proc ::iwidgets::promptdialog {pathName args} { uplevel ::iwidgets::Promptdialog $pathName $args } # # Use option database to override default resources of base classes. # option add *Promptdialog.labelText Selection widgetDefault option add *Promptdialog.labelPos nw widgetDefault option add *Promptdialog.title "Prompt Dialog" widgetDefault option add *Promptdialog.master "." widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::constructor {args} { # # Set the borderwidth to zero. # component hull configure -borderwidth 0 # # Create an entry field widget. # itk_component add prompt { iwidgets::Entryfield $itk_interior.prompt -command [itcl::code $this invoke] } { usual keep -exportselection -invalid -labelpos -labeltext -relief \ -show -textbackground -textfont -validate } pack $itk_component(prompt) -fill x -expand yes set itk_interior [childsite] hide Help # # Initialize the widget based on the command line options. # eval itk_initialize $args } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: get # # Thinwrapped method of entry field class. # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::get {} { return [$itk_component(prompt) get] } # ------------------------------------------------------------------ # METHOD: clear # # Thinwrapped method of entry field class. # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::clear {} { eval $itk_component(prompt) clear } # ------------------------------------------------------------------ # METHOD: insert args # # Thinwrapped method of entry field class. # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::insert {args} { eval $itk_component(prompt) insert $args } # ------------------------------------------------------------------ # METHOD: delete first ?last? # # Thinwrapped method of entry field class. # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::delete {args} { eval $itk_component(prompt) delete $args } # ------------------------------------------------------------------ # METHOD: icursor # # Thinwrapped method of entry field class. # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::icursor {args} { eval $itk_component(prompt) icursor $args } # ------------------------------------------------------------------ # METHOD: index # # Thinwrapped method of entry field class. # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::index {args} { return [eval $itk_component(prompt) index $args] } # ------------------------------------------------------------------ # METHOD: scan option args # # Thinwrapped method of entry field class. # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::scan {args} { eval $itk_component(prompt) scan $args } # ------------------------------------------------------------------ # METHOD: selection args # # Thinwrapped method of entry field class. # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::selection {args} { eval $itk_component(prompt) selection $args } # ------------------------------------------------------------------ # METHOD: xview args # # Thinwrapped method of entry field class. # ------------------------------------------------------------------ itcl::body iwidgets::Promptdialog::xview {args} { eval $itk_component(prompt) xview $args } ����������������������������������������������iwidgets-4.1.1/generic/finddialog.itk���������������������������������������������������������������0000644�0036047�0045461�00000040072�07334044000�016151� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Finddialog # ---------------------------------------------------------------------- # This class implements a dialog for searching text. It prompts the # user for a search string and the method of searching which includes # case sensitive, regular expressions, backwards, and all. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) RCS: $Id: finddialog.itk,v 1.3 2001/08/07 19:56:48 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1996 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Finddialog { keep -background -cursor -foreground -selectcolor } # ------------------------------------------------------------------ # IPRFINDDIALOG # ------------------------------------------------------------------ itcl::class ::iwidgets::Finddialog { inherit iwidgets::Dialogshell constructor {args} {} itk_option define -selectcolor selectColor Background {} itk_option define -clearcommand clearCommand Command {} itk_option define -matchcommand matchCommand Command {} itk_option define -patternbackground patternBackground Background \#707070 itk_option define -patternforeground patternForeground Foreground White itk_option define -searchbackground searchBackground Background \#c4c4c4 itk_option define -searchforeground searchForeground Foreground Black itk_option define -textwidget textWidget TextWidget {} public { method clear {} method find {} } protected { method _get {setting} method _textExists {} common _optionValues ;# Current settings of check buttons. common _searchPoint ;# Starting location for searches common _matchLen ;# Matching pattern string length } } # # Provide a lowercased access method for the ::finddialog class. # proc ::iwidgets::finddialog {pathName args} { uplevel ::iwidgets::Finddialog $pathName $args } # # Use option database to override default resources of base classes. # option add *Finddialog.title "Find" widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body ::iwidgets::Finddialog::constructor {args} { # # Add the find pattern entryfield. # itk_component add pattern { iwidgets::Entryfield $itk_interior.pattern -labeltext "Find:" } bind [$itk_component(pattern) component entry] \ <Return> "[itcl::code $this invoke]; break" # # Add the find all checkbutton. # itk_component add all { checkbutton $itk_interior.all \ -variable [itcl::scope _optionValues($this-all)] \ -text "All" } # # Add the case consideration checkbutton. # itk_component add case { checkbutton $itk_interior.case \ -variable [itcl::scope _optionValues($this-case)] \ -text "Consider Case" } # # Add the regular expression checkbutton. # itk_component add regexp { checkbutton $itk_interior.regexp \ -variable [itcl::scope _optionValues($this-regexp)] \ -text "Use Regular Expression" } # # Add the find backwards checkbutton. # itk_component add backwards { checkbutton $itk_interior.backwards \ -variable [itcl::scope _optionValues($this-backwards)] \ -text "Find Backwards" } # # Add the find, clear, and close buttons, making find be the default. # add Find -text Find -command [itcl::code $this find] add Clear -text Clear -command [itcl::code $this clear] add Close -text Close -command [itcl::code $this deactivate 0] default Find # # Use the grid to layout the components. # grid $itk_component(pattern) -row 0 -column 0 \ -padx 10 -pady 10 -columnspan 4 -sticky ew grid $itk_component(all) -row 1 -column 0 grid $itk_component(case) -row 1 -column 1 grid $itk_component(regexp) -row 1 -column 2 grid $itk_component(backwards) -row 1 -column 3 grid columnconfigure $itk_interior 0 -weight 1 grid columnconfigure $itk_interior 1 -weight 1 grid columnconfigure $itk_interior 2 -weight 1 grid columnconfigure $itk_interior 3 -weight 1 # # Initialize all the configuration options. # eval itk_initialize $args } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -clearcommand # # Specifies a command to be invoked following a clear operation. # The command is meant to be a means of notification that the # clear has taken place and allow other actions to take place such # as disabling a find again menu. # ------------------------------------------------------------------ itcl::configbody iwidgets::Finddialog::clearcommand {} # ------------------------------------------------------------------ # OPTION: -matchcommand # # Specifies a command to be invoked following a find operation. # The command is called with a match point as an argument. Should # a match not be found the match point is {}. # ------------------------------------------------------------------ itcl::configbody iwidgets::Finddialog::matchcommand {} # ------------------------------------------------------------------ # OPTION: -patternbackground # # Specifies the background color of the text matching the search # pattern. It may have any of the forms accepted by Tk_GetColor. # ------------------------------------------------------------------ itcl::configbody iwidgets::Finddialog::patternbackground {} # ------------------------------------------------------------------ # OPTION: -patternforeground # # Specifies the foreground color of the pattern matching a search # operation. It may have any of the forms accepted by Tk_GetColor. # ------------------------------------------------------------------ itcl::configbody iwidgets::Finddialog::patternforeground {} # ------------------------------------------------------------------ # OPTION: -searchforeground # # Specifies the foreground color of the line containing the matching # pattern from a search operation. It may have any of the forms # accepted by Tk_GetColor. # ------------------------------------------------------------------ itcl::configbody iwidgets::Finddialog::searchforeground {} # ------------------------------------------------------------------ # OPTION: -searchbackground # # Specifies the background color of the line containing the matching # pattern from a search operation. It may have any of the forms # accepted by Tk_GetColor. # ------------------------------------------------------------------ itcl::configbody iwidgets::Finddialog::searchbackground {} # ------------------------------------------------------------------ # OPTION: -textwidget # # Specifies the scrolledtext or text widget to be searched. # ------------------------------------------------------------------ itcl::configbody iwidgets::Finddialog::textwidget { if {$itk_option(-textwidget) != {}} { set _searchPoint($itk_option(-textwidget)) 1.0 } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # PUBLIC METHOD: clear # # Clear the pattern entryfield and the indicators. # ------------------------------------------------------------------ itcl::body ::iwidgets::Finddialog::clear {} { $itk_component(pattern) clear if {[_textExists]} { set _searchPoint($itk_option(-textwidget)) 1.0 $itk_option(-textwidget) tag remove search-line 1.0 end $itk_option(-textwidget) tag remove search-pattern 1.0 end } if {$itk_option(-clearcommand) != {}} { eval $itk_option(-clearcommand) } } # ------------------------------------------------------------------ # PUBLIC METHOD: find # # Search for a specific text string in the text widget given by # the -textwidget option. Should this option not be set to an # existing widget, then a quick exit is made. # ------------------------------------------------------------------ itcl::body ::iwidgets::Finddialog::find {} { if {! [_textExists]} { return } # # Clear any existing indicators in the text widget. # $itk_option(-textwidget) tag remove search-line 1.0 end $itk_option(-textwidget) tag remove search-pattern 1.0 end # # Make sure the search pattern isn't just blank. If so, skip this. # set pattern [_get pattern] if {[string trim $pattern] == ""} { return } # # After clearing out any old highlight indicators from a previous # search, we'll be building our search command piece-meal based on # the current settings of the checkbuttons in the find dialog. The # first we'll add is a variable to catch the count of the length # of the string matching the pattern. # set precmd "$itk_option(-textwidget) search \ -count [list [itcl::scope _matchLen($this)]]" if {! [_get case]} { append precmd " -nocase" } if {[_get regexp]} { append precmd " -regexp" } else { append precmd " -exact" } # # If we are going to find all matches, then the start point for # the search will be the beginning of the text; otherwise, we'll # use the last known starting point +/- a character depending on # the direction. # if {[_get all]} { set _searchPoint($itk_option(-textwidget)) 1.0 } else { if {[_get backwards]} { append precmd " -backwards" } else { append precmd " -forwards" } } # # Get the pattern to be matched and add it to the search command. # Since it may contain embedded spaces, we'll wrap it in a list. # append precmd " [list $pattern]" # # If the search is for all matches, then we'll be performing the # search until no more matches are found; otherwise, we'll break # out of the loop after one search. # while {1} { if {[_get all]} { set postcmd " $_searchPoint($itk_option(-textwidget)) end" } else { set postcmd " $_searchPoint($itk_option(-textwidget))" } # # Create the final search command out of the pre and post parts # and evaluate it which returns the location of the matching string. # set cmd {} append cmd $precmd $postcmd if {[catch {eval $cmd} matchPoint] != 0} { set _searchPoint($itk_option(-textwidget)) 1.0 return {} } # # If a match exists, then we'll make this spot be the new starting # position. Then we'll tag the line and the pattern in the line. # The foreground and background settings will lite these positions # in the text widget up. # if {$matchPoint != {}} { set _searchPoint($itk_option(-textwidget)) $matchPoint $itk_option(-textwidget) tag add search-line \ "$_searchPoint($itk_option(-textwidget)) linestart" \ "$_searchPoint($itk_option(-textwidget))" $itk_option(-textwidget) tag add search-line \ "$_searchPoint($itk_option(-textwidget)) + \ $_matchLen($this) chars" \ "$_searchPoint($itk_option(-textwidget)) lineend" $itk_option(-textwidget) tag add search-pattern \ $_searchPoint($itk_option(-textwidget)) \ "$_searchPoint($itk_option(-textwidget)) + \ $_matchLen($this) chars" } # # Set the search point for the next time through to be one # character more or less from the current search point based # on the direction. # if {[_get all] || ! [_get backwards]} { set _searchPoint($itk_option(-textwidget)) \ [$itk_option(-textwidget) index \ "$_searchPoint($itk_option(-textwidget)) + 1c"] } else { set _searchPoint($itk_option(-textwidget)) \ [$itk_option(-textwidget) index \ "$_searchPoint($itk_option(-textwidget)) - 1c"] } # # If this isn't a find all operation or we didn't get a match, exit. # if {(! [_get all]) || ($matchPoint == {})} { break } } # # Configure the colors for the search-line and search-pattern. # $itk_option(-textwidget) tag configure search-line \ -foreground $itk_option(-searchforeground) $itk_option(-textwidget) tag configure search-line \ -background $itk_option(-searchbackground) $itk_option(-textwidget) tag configure search-pattern \ -background $itk_option(-patternbackground) $itk_option(-textwidget) tag configure search-pattern \ -foreground $itk_option(-patternforeground) # # Adjust the view to be the last matched position. # if {$matchPoint != {}} { $itk_option(-textwidget) see $matchPoint } # # There may be multiple matches of the pattern on a single line, # so we'll set the tag priorities such that the pattern tag is higher. # $itk_option(-textwidget) tag raise search-pattern search-line # # If a match command is defined, then call it with the match point. # if {$itk_option(-matchcommand) != {}} { [subst $itk_option(-matchcommand)] $matchPoint } # # Return the match point to the caller so they know if we found # anything and if so where # return $matchPoint } # ------------------------------------------------------------------ # PROTECTED METHOD: _get setting # # Get the current value for the pattern, case, regexp, or backwards. # ------------------------------------------------------------------ itcl::body ::iwidgets::Finddialog::_get {setting} { switch $setting { pattern { return [$itk_component(pattern) get] } case { return $_optionValues($this-case) } regexp { return $_optionValues($this-regexp) } backwards { return $_optionValues($this-backwards) } all { return $_optionValues($this-all) } default { error "bad get setting: \"$setting\", should be pattern,\ case, regexp, backwards, or all" } } } # ------------------------------------------------------------------ # PROTECTED METHOD: _textExists # # Check the validity of the text widget option. Does it exist and # is it of the class Text or Scrolledtext. # ------------------------------------------------------------------ itcl::body ::iwidgets::Finddialog::_textExists {} { if {$itk_option(-textwidget) == {}} { return 0 } if {! [winfo exists $itk_option(-textwidget)]} { error "bad finddialog text widget value: \"$itk_option(-textwidget)\",\ the widget doesn't exist" } if {([winfo class $itk_option(-textwidget)] != "Text") && ([itcl::find objects -isa iwidgets::Scrolledtext *::$itk_option(-textwidget)] == "")} { error "bad finddialog text widget value: \"$itk_option(-textwidget)\",\ must be of the class Text or based on Scrolledtext" } return 1 } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/entryfield.itk���������������������������������������������������������������0000644�0036047�0045461�00000052537�07543521116�016241� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Entryfield # ---------------------------------------------------------------------- # Implements an enhanced text entry widget. # # ---------------------------------------------------------------------- # AUTHOR: Sue Yockey E-mail: yockey@acm.org # Mark L. Ulferts E-mail: mulferts@austin.dsccc.com # # @(#) $Id: entryfield.itk,v 1.7 2002/09/23 05:10:38 mgbacke Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Entryfield { keep -background -borderwidth -cursor -foreground -highlightcolor \ -highlightthickness -insertbackground -insertborderwidth \ -insertofftime -insertontime -insertwidth -labelfont \ -selectbackground -selectborderwidth -selectforeground \ -textbackground -textfont } # ------------------------------------------------------------------ # ENTRYFIELD # ------------------------------------------------------------------ itcl::class iwidgets::Entryfield { inherit iwidgets::Labeledwidget constructor {args} {} itk_option define -childsitepos childSitePos Position e itk_option define -command command Command {} itk_option define -fixed fixed Fixed 0 itk_option define -focuscommand focusCommand Command {} itk_option define -invalid invalid Command {bell} itk_option define -pasting pasting Behavior 1 itk_option define -validate validate Command {} public { method childsite {} method get {} method delete {args} method icursor {args} method index {args} method insert {args} method scan {args} method selection {args} method xview {args} method clear {} } proc numeric {char} {} proc integer {string} {} proc alphabetic {char} {} proc alphanumeric {char} {} proc hexidecimal {string} {} proc real {string} {} protected { method _focusCommand {} method _keyPress {char sym state} } private method _peek {char} private method _checkLength {} } # # Provide a lowercased access method for the Entryfield class. # proc ::iwidgets::entryfield {pathName args} { uplevel ::iwidgets::Entryfield $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::constructor {args} { component hull configure -borderwidth 0 itk_component add entry { entry $itk_interior.entry } { keep -borderwidth -cursor -exportselection \ -foreground -highlightcolor \ -highlightthickness -insertbackground -insertborderwidth \ -insertofftime -insertontime -insertwidth -justify \ -relief -selectbackground -selectborderwidth \ -selectforeground -show -state -textvariable -width rename -font -textfont textFont Font rename -highlightbackground -background background Background rename -background -textbackground textBackground Background } # # Create the child site widget. # itk_component add -protected efchildsite { frame $itk_interior.efchildsite } set itk_interior $itk_component(efchildsite) # # Entryfield instance bindings. # bind $itk_component(entry) <KeyPress> [itcl::code $this _keyPress %A %K %s] bind $itk_component(entry) <FocusIn> [itcl::code $this _focusCommand] # # Initialize the widget based on the command line options. # eval itk_initialize $args } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -command # # Command associated upon detection of Return key press event # ------------------------------------------------------------------ itcl::configbody iwidgets::Entryfield::command {} # ------------------------------------------------------------------ # OPTION: -focuscommand # # Command associated upon detection of focus. # ------------------------------------------------------------------ itcl::configbody iwidgets::Entryfield::focuscommand {} # ------------------------------------------------------------------ # OPTION: -validate # # Specify a command to executed for the validation of Entryfields. # ------------------------------------------------------------------ itcl::configbody iwidgets::Entryfield::validate { switch $itk_option(-validate) { {} { set itk_option(-validate) {} } numeric { set itk_option(-validate) "::iwidgets::Entryfield::numeric %c" } integer { set itk_option(-validate) "::iwidgets::Entryfield::integer %P" } hexidecimal { set itk_option(-validate) "::iwidgets::Entryfield::hexidecimal %P" } real { set itk_option(-validate) "::iwidgets::Entryfield::real %P" } alphabetic { set itk_option(-validate) "::iwidgets::Entryfield::alphabetic %c" } alphanumeric { set itk_option(-validate) "::iwidgets::Entryfield::alphanumeric %c" } } } # ------------------------------------------------------------------ # OPTION: -invalid # # Specify a command to executed should the current Entryfield contents # be proven invalid. # ------------------------------------------------------------------ itcl::configbody iwidgets::Entryfield::invalid {} # ------------------------------------------------------------------ # OPTION: -pasting # # Allows the developer to enable and disable pasting into the entry # component of the entryfield. This is done to avoid potential stack # dumps when using the -validate configuration option. Plus, it's just # a good idea to have complete control over what you allow the user # to enter into the entryfield. # ------------------------------------------------------------------ itcl::configbody iwidgets::Entryfield::pasting { set oldtags [bindtags $itk_component(entry)] if {[lindex $oldtags 0] != "pastetag"} { bindtags $itk_component(entry) [linsert $oldtags 0 pastetag] } if {($itk_option(-pasting))} { bind pastetag <ButtonRelease-2> [itcl::code $this _checkLength] bind pastetag <Control-v> [itcl::code $this _checkLength] bind pastetag <Insert> [itcl::code $this _checkLength] bind pastetag <KeyPress> {} } else { bind pastetag <ButtonRelease-2> {break} bind pastetag <Control-v> {break} bind pastetag <Insert> {break} bind pastetag <KeyPress> { # Disable function keys > F9. if {[regexp {^F[1,2][0-9]+$} "%K"]} { break } } } } # ------------------------------------------------------------------ # OPTION: -fixed # # Restrict entry to 0 (unlimited) chars. The value is the maximum # number of chars the user may type into the field, regardles of # field width, i.e. the field width may be 20, but the user will # only be able to type -fixed number of characters into it (or # unlimited if -fixed = 0). # ------------------------------------------------------------------ itcl::configbody iwidgets::Entryfield::fixed { if {[regexp {[^0-9]} $itk_option(-fixed)] || \ ($itk_option(-fixed) < 0)} { error "bad fixed option \"$itk_option(-fixed)\",\ should be positive integer" } } # ------------------------------------------------------------------ # OPTION: -childsitepos # # Specifies the position of the child site in the widget. # ------------------------------------------------------------------ itcl::configbody iwidgets::Entryfield::childsitepos { set parent [winfo parent $itk_component(entry)] switch $itk_option(-childsitepos) { n { grid $itk_component(efchildsite) -row 0 -column 0 -sticky ew grid $itk_component(entry) -row 1 -column 0 -sticky nsew grid rowconfigure $parent 0 -weight 0 grid rowconfigure $parent 1 -weight 1 grid columnconfigure $parent 0 -weight 1 grid columnconfigure $parent 1 -weight 0 } e { grid $itk_component(efchildsite) -row 0 -column 1 -sticky ns grid $itk_component(entry) -row 0 -column 0 -sticky nsew grid rowconfigure $parent 0 -weight 1 grid rowconfigure $parent 1 -weight 0 grid columnconfigure $parent 0 -weight 1 grid columnconfigure $parent 1 -weight 0 } s { grid $itk_component(efchildsite) -row 1 -column 0 -sticky ew grid $itk_component(entry) -row 0 -column 0 -sticky nsew grid rowconfigure $parent 0 -weight 1 grid rowconfigure $parent 1 -weight 0 grid columnconfigure $parent 0 -weight 1 grid columnconfigure $parent 1 -weight 0 } w { grid $itk_component(efchildsite) -row 0 -column 0 -sticky ns grid $itk_component(entry) -row 0 -column 1 -sticky nsew grid rowconfigure $parent 0 -weight 1 grid rowconfigure $parent 1 -weight 0 grid columnconfigure $parent 0 -weight 0 grid columnconfigure $parent 1 -weight 1 } default { error "bad childsite option\ \"$itk_option(-childsitepos)\":\ should be n, e, s, or w" } } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: childsite # # Returns the path name of the child site widget. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::childsite {} { return $itk_component(efchildsite) } # ------------------------------------------------------------------ # METHOD: get # # Thin wrap of the standard entry widget get method. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::get {} { return [$itk_component(entry) get] } # ------------------------------------------------------------------ # METHOD: delete # # Thin wrap of the standard entry widget delete method. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::delete {args} { return [eval $itk_component(entry) delete $args] } # ------------------------------------------------------------------ # METHOD: icursor # # Thin wrap of the standard entry widget icursor method. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::icursor {args} { return [eval $itk_component(entry) icursor $args] } # ------------------------------------------------------------------ # METHOD: index # # Thin wrap of the standard entry widget index method. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::index {args} { return [eval $itk_component(entry) index $args] } # ------------------------------------------------------------------ # METHOD: insert # # Thin wrap of the standard entry widget index method. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::insert {args} { return [eval $itk_component(entry) insert $args] } # ------------------------------------------------------------------ # METHOD: scan # # Thin wrap of the standard entry widget scan method. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::scan {args} { return [eval $itk_component(entry) scan $args] } # ------------------------------------------------------------------ # METHOD: selection # # Thin wrap of the standard entry widget selection method. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::selection {args} { return [eval $itk_component(entry) selection $args] } # ------------------------------------------------------------------ # METHOD: xview # # Thin wrap of the standard entry widget xview method. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::xview {args} { return [eval $itk_component(entry) xview $args] } # ------------------------------------------------------------------ # METHOD: clear # # Delete the current entry contents. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::clear {} { $itk_component(entry) delete 0 end icursor 0 } # ------------------------------------------------------------------ # PROCEDURE: numeric char # # The numeric procedure validates character input for a given # Entryfield to be numeric and returns the result. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::numeric {char} { return [regexp {[0-9]} $char] } # ------------------------------------------------------------------ # PROCEDURE: integer string # # The integer procedure validates character input for a given # Entryfield to be integer and returns the result. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::integer {string} { return [regexp {^[-+]?[0-9]*$} $string] } # ------------------------------------------------------------------ # PROCEDURE: alphabetic char # # The alphabetic procedure validates character input for a given # Entryfield to be alphabetic and returns the result. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::alphabetic {char} { return [regexp -nocase {[a-z]} $char] } # ------------------------------------------------------------------ # PROCEDURE: alphanumeric char # # The alphanumeric procedure validates character input for a given # Entryfield to be alphanumeric and returns the result. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::alphanumeric {char} { return [regexp -nocase {[0-9a-z]} $char] } # ------------------------------------------------------------------ # PROCEDURE: hexadecimal string # # The hexidecimal procedure validates character input for a given # Entryfield to be hexidecimal and returns the result. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::hexidecimal {string} { return [regexp {^(0x)?[0-9a-fA-F]*$} $string] } # ------------------------------------------------------------------ # PROCEDURE: real string # # The real procedure validates character input for a given Entryfield # to be real and returns the result. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::real {string} { return [regexp {^[-+]?[0-9]*\.?[0-9]*([0-9]\.?[eE][-+]?[0-9]*)?$} $string] } # ------------------------------------------------------------------ # PRIVATE METHOD: _peek char # # The peek procedure returns the value of the Entryfield with the # char inserted at the insert position. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::_peek {char} { set str [get] set insertPos [index insert] set firstPart [string range $str 0 [expr {$insertPos - 1}]] set lastPart [string range $str $insertPos end] regsub -all {\\} "$char" {\\\\} char append rtnVal $firstPart $char $lastPart return $rtnVal } # ------------------------------------------------------------------ # PROTECTED METHOD: _focusCommand # # Method bound to focus event which evaluates the current command # specified in the focuscommand option # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::_focusCommand {} { uplevel #0 $itk_option(-focuscommand) } # ------------------------------------------------------------------ # PROTECTED METHOD: _keyPress # # Monitor the key press event checking for return keys, fixed width # specification, and optional validation procedures. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::_keyPress {char sym state} { # # A Return key invokes the optionally specified command option. # if {$sym == "Return"} { if {$itk_option(-command) == ""} { # # Allow <Return> to propagate to parent if the -command option # isn't defined. # return -code continue 1 } uplevel #0 $itk_option(-command) return -code break 1 } # # Tabs, BackSpace, and Delete are passed on for other bindings. # if {($sym == "Tab") || ($sym == "BackSpace") || ($sym == "Delete")} { return -code continue 1 } # # Character is not printable or the state is greater than one which # means a modifier was used such as a control, meta key, or control # or meta key with numlock down. # #----------------------------------------------------------- # BUG FIX: csmith (Chad Smith: csmith@adc.com), 3/15/99 #----------------------------------------------------------- # The following conditional used to hardcode specific state values, such # as "4" and "8". These values are used to detect <Ctrl>, <Shift>, etc. # key combinations. On the windows platform, the <Alt> key is state # 16, and on the unix platform, the <Alt> key is state 8. All <Ctrl> # and <Alt> combinations should be masked out, regardless of the # <NumLock> or <CapsLock> status, and regardless of platform. #----------------------------------------------------------- set CTRL 4 global tcl_platform if {$tcl_platform(platform) == "unix"} { set ALT 8 } elseif {$tcl_platform(platform) == "windows"} { set ALT 16 } else { # This is something other than UNIX or WINDOWS. Default to the # old behavior (UNIX). set ALT 8 } # Thanks to Rolf Schroedter for the following elegant conditional. This # masks out all <Ctrl> and <Alt> key combinations. if {($char == "") || ($state & ($CTRL | $ALT))} { return -code continue 1 } # # If the fixed length option is not zero, then verify that the # current length plus one will not exceed the limit. If so then # invoke the invalid command procedure. # if {$itk_option(-fixed) != 0} { if {[string length [get]] >= $itk_option(-fixed)} { uplevel #0 $itk_option(-invalid) return -code break 0 } } # # The validate option may contain a keyword (numeric, alphabetic), # the name of a procedure, or nothing. The numeric and alphabetic # keywords engage typical base level checks. If a command procedure # is specified, then invoke it with the object and character passed # as arguments. If the validate procedure returns false, then the # invalid procedure is called. # if {$itk_option(-validate) != {}} { set cmd $itk_option(-validate) regsub -all "%W" "$cmd" $itk_component(hull) cmd regsub -all "%P" "$cmd" [list [_peek $char]] cmd regsub -all "%S" "$cmd" [list [get]] cmd regsub -all "%c" "$cmd" [list $char] cmd regsub -all {\\} "$cmd" {\\\\} cmd set valid [uplevel #0 $cmd] if {($valid == "") || ([regexp 0|false|off|no $valid])} { uplevel #0 $itk_option(-invalid) return -code break 0 } } return -code continue 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _checkLength # # This method was added by csmith for SF ticket 227912. We need to # to check the clipboard content before allowing any pasting into # the entryfield to disallow text that is longer than the value # specified by the -fixed option. # ------------------------------------------------------------------ itcl::body iwidgets::Entryfield::_checkLength {} { if {$itk_option(-fixed) != 0} { if {[catch {::selection get -selection CLIPBOARD} pending]} { # Nothing in the clipboard. Check the primary selection. if {[catch {::selection get -selection PRIMARY} pending]} { # Nothing here either. Goodbye. return } } set len [expr {[string length $pending] + [string length [get]]}] if {$len > $itk_option(-fixed)} { uplevel #0 $itk_option(-invalid) return -code break 0 } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/timeentry.itk����������������������������������������������������������������0000644�0036047�0045461�00000033027�07337265344�016116� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Timeentry # ---------------------------------------------------------------------- # Implements a quicken style time entry field with a popup clock # by combining the timefield and watch widgets together. This # allows a user to enter the time via the keyboard or by using the # mouse by selecting the watch icon which brings up a popup clock. # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts E-mail: mulferts@austin.dsccc.com # # @(#) $Id: timeentry.itk,v 1.4 2001/08/17 19:05:08 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPTIMES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Timeentry { keep -background -borderwidth -cursor -foreground -highlightcolor \ -highlightthickness -labelfont -textbackground -textfont } # ------------------------------------------------------------------ # TIMEENTRY # ------------------------------------------------------------------ itcl::class iwidgets::Timeentry { inherit iwidgets::Timefield constructor {args} {} itk_option define -grab grab Grab "global" itk_option define -icon icon Icon {} itk_option define -state state State normal itk_option define -closetext closeText Text Close # # The watch widget isn't created until needed, yet we need # its options to be available upon creation of a timeentry widget. # So, we'll define them in these class now so they can just be # propagated onto the watch later. # itk_option define -hourradius hourRadius Radius .50 itk_option define -hourcolor hourColor Color red itk_option define -minuteradius minuteRadius Radius .80 itk_option define -minutecolor minuteColor Color yellow itk_option define -pivotradius pivotRadius Radius .10 itk_option define -pivotcolor pivotColor Color white itk_option define -secondradius secondRadius Radius .90 itk_option define -secondcolor secondColor Color black itk_option define -clockcolor clockColor Color white itk_option define -clockstipple clockStipple ClockStipple {} itk_option define -tickcolor tickColor Color black itk_option define -watchheight watchHeight Height 175 itk_option define -watchwidth watchWidth Width 155 protected { method _getPopupTime {} method _releaseGrab {} method _popup {} method _getDefaultIcon {} common _defaultIcon "" } } # # Provide a lowercased access method for the timeentry class. # proc ::iwidgets::timeentry {pathName args} { uplevel ::iwidgets::Timeentry $pathName $args } # # Use option database to override default resources of base classes. # option add *Timeentry.watchWidth 155 widgetDefault option add *Timeentry.watchHeight 175 widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Timeentry::constructor {args} { # # Create an icon label to act as a button to bring up the # watch popup. # itk_component add iconbutton { label $itk_interior.iconbutton -relief raised } { keep -borderwidth -cursor -foreground } grid $itk_component(iconbutton) -row 0 -column 0 -sticky ns # # Initialize the widget based on the command line options. # eval itk_initialize $args } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -icon # # Specifies the clock icon image to be used in the time entry. # Should one not be provided, then a default pixmap will be used # if possible, bitmap otherwise. # ------------------------------------------------------------------ itcl::configbody iwidgets::Timeentry::icon { if {$itk_option(-icon) == {}} { $itk_component(iconbutton) configure -image [_getDefaultIcon] } else { if {[lsearch [image names] $itk_option(-icon)] == -1} { error "bad icon option \"$itk_option(-icon)\":\ should be an existing image" } else { $itk_component(iconbutton) configure -image $itk_option(-icon) } } } # ------------------------------------------------------------------ # OPTION: -grab # # Specifies the grab level, local or global, to be obtained when # bringing up the popup watch. The default is global. # ------------------------------------------------------------------ itcl::configbody iwidgets::Timeentry::grab { switch -- $itk_option(-grab) { "local" - "global" {} default { error "bad grab option \"$itk_option(-grab)\":\ should be local or global" } } } # ------------------------------------------------------------------ # OPTION: -state # # Specifies the state of the widget which may be disabled or # normal. A disabled state prevents selection of the time field # or time icon button. # ------------------------------------------------------------------ itcl::configbody iwidgets::Timeentry::state { switch -- $itk_option(-state) { normal { bind $itk_component(iconbutton) <Button-1> [itcl::code $this _popup] } disabled { bind $itk_component(iconbutton) <Button-1> {} } } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # PROTECTED METHOD: _getDefaultIcon # # This method is invoked uto retrieve the name of the default icon # image displayed in the icon button. # ------------------------------------------------------------------ itcl::body iwidgets::Timeentry::_getDefaultIcon {} { if {[lsearch [image types] pixmap] != -1} { set _defaultIcon [image create pixmap -data { /* XPM */ static char *watch1a[] = { /* width height num_colors chars_per_pixel */ " 20 20 8 1", /* colors */ ". c #000000", "# c #000099", "a c #009999", "b c #999999", "c c #cccccc", "d c #ffff00", "e c #d9d9d9", "f c #ffffff", /* pixels */ "eeeeebbbcccccbbbeeee", "eeeee...#####..beeee", "eeeee#aacccccaabeeee", "eeee#accccccccc##eee", "eee#ccc#cc#ccdcff#ee", "ee#accccccccccfcca#e", "eeaccccccc.cccfcccae", "eeac#cccfc.cccc##cae", "e#cccccffc.cccccccc#", "e#ccccfffc.cccccccc#", "e#cc#ffcc......c#cc#", "e#ccfffccc.cccccccc#", "e#cffccfcc.cccccccc#", "eeafdccfcccccccd#cae", "eeafcffcccccccccccae", "eee#fcc#cccccdccc#ee", "eee#fcc#cc#cc#ccc#ee", "eeee#accccccccc##eee", "eeeee#aacccccaabeeee", "eeeee...#####..beeee" }; }] } else { set _defaultIcon [image create bitmap -data { #define watch1a_width 20 #define watch1a_height 20 static char watch1a_bits[] = { 0x40,0x40,0xf0,0xe0,0x7f,0xf0,0xe0,0xe0,0xf0,0x30, 0x80,0xf1,0x88,0x04,0xf2,0x0c,0x00,0xf6,0x04,0x04, 0xf4,0x94,0x84,0xf5,0x02,0x06,0xf8,0x02,0x0c,0xf8, 0x12,0x7e,0xf9,0x02,0x04,0xf8,0x02,0x24,0xf8,0x04, 0x00,0xf5,0x04,0x00,0xf4,0x88,0x02,0xf2,0x88,0x64, 0xf2,0x30,0x80,0xf1,0xe0,0x60,0xf0,0xe0,0xff,0xf0}; }] } # # Since this image will only need to be created once, we redefine # this method to just return the image name for subsequent calls. # itcl::body ::iwidgets::Timeentry::_getDefaultIcon {} { return $_defaultIcon } return $_defaultIcon } # ------------------------------------------------------------------ # PROTECTED METHOD: _popup # # This method is invoked upon selection of the icon button. It # creates a watch widget within a toplevel popup, calculates # the position at which to display the watch, performs a grab # and displays the watch. # ------------------------------------------------------------------ itcl::body iwidgets::Timeentry::_popup {} { # # First, let's nullify the icon binding so that any another # selections are ignored until were done with this one. Next, # change the relief of the icon. # bind $itk_component(iconbutton) <Button-1> {} $itk_component(iconbutton) configure -relief sunken # # Create a withdrawn toplevel widget and remove the window # decoration via override redirect. # itk_component add -private popup { toplevel $itk_interior.popup } $itk_component(popup) configure -borderwidth 2 -background black wm withdraw $itk_component(popup) wm overrideredirect $itk_component(popup) 1 # # Add a binding to for Escape to always release the grab. # bind $itk_component(popup) <KeyPress-Escape> [itcl::code $this _releaseGrab] # # Create the watch widget. # itk_component add watch { iwidgets::Watch $itk_component(popup).watch } { usual rename -width -watchwidth watchWidth Width rename -height -watchheight watchHeight Height keep -hourradius -minuteradius -minutecolor -pivotradius -pivotcolor \ -secondradius -secondcolor -clockcolor -clockstipple -tickcolor } grid $itk_component(watch) -row 0 -column 0 $itk_component(watch) configure -cursor top_left_arrow # # Create a button widget so the user can say they are done. # itk_component add close { button $itk_component(popup).close -command [itcl::code $this _getPopupTime] } { usual rename -text -closetext closeText Text } grid $itk_component(close) -row 1 -column 0 -sticky ew $itk_component(close) configure -cursor top_left_arrow # # The icon button will be used as the basis for the position of the # popup on the screen. We'll always attempt to locate the popup # off the lower right corner of the button. If that would put # the popup off the screen, then we'll put above the upper left. # set rootx [winfo rootx $itk_component(iconbutton)] set rooty [winfo rooty $itk_component(iconbutton)] set popupwidth [cget -watchwidth] set popupheight [expr {[cget -watchheight] + \ [winfo reqheight $itk_component(close)]}] set popupx [expr {$rootx + 3 + \ [winfo width $itk_component(iconbutton)]}] set popupy [expr {$rooty + 3 + \ [winfo height $itk_component(iconbutton)]}] if {(($popupx + $popupwidth) > [winfo screenwidth .]) || \ (($popupy + $popupheight) > [winfo screenheight .])} { set popupx [expr {$rootx - 3 - $popupwidth}] set popupy [expr {$rooty - 3 - $popupheight}] } # # Get the current time from the timefield widget and both # show and select it on the watch. # $itk_component(watch) show [get] # # Display the popup at the calculated position. # wm geometry $itk_component(popup) +$popupx+$popupy wm deiconify $itk_component(popup) tkwait visibility $itk_component(popup) # # Perform either a local or global grab based on the -grab option. # if {$itk_option(-grab) == "local"} { grab $itk_component(popup) } else { grab -global $itk_component(popup) } # # Make sure the widget is above all others and give it focus. # raise $itk_component(popup) focus $itk_component(watch) } # ------------------------------------------------------------------ # PROTECTED METHOD: _popupGetTime # # This method is the callback for selection of a time on the # watch. It releases the grab and sets the time in the # timefield widget. # ------------------------------------------------------------------ itcl::body iwidgets::Timeentry::_getPopupTime {} { show [$itk_component(watch) get -clicks] _releaseGrab } # ------------------------------------------------------------------ # PROTECTED METHOD: _releaseGrab # # This method releases the grab, destroys the popup, changes the # relief of the button back to raised and reapplies the binding # to the icon button that engages the popup action. # ------------------------------------------------------------------ itcl::body iwidgets::Timeentry::_releaseGrab {} { grab release $itk_component(popup) $itk_component(iconbutton) configure -relief raised destroy $itk_component(popup) bind $itk_component(iconbutton) <Button-1> [itcl::code $this _popup] } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/panedwindow.itk��������������������������������������������������������������0000644�0036047�0045461�00000075070�07345711156�016415� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Panedwindow # ---------------------------------------------------------------------- # Implements a multiple paned window widget capable of orienting the panes # either vertically or horizontally. Each pane is itself a frame acting # as a child site for other widgets. The border separating each pane # contains a sash which allows user positioning of the panes relative to # one another. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) $Id: panedwindow.itk,v 1.7 2001/09/06 15:12:46 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Panedwindow { keep -background -cursor -sashcursor } # ------------------------------------------------------------------ # PANEDWINDOW # ------------------------------------------------------------------ itcl::class iwidgets::Panedwindow { inherit itk::Widget constructor {args} {} itk_option define -orient orient Orient horizontal itk_option define -sashborderwidth sashBorderWidth SashBorderWidth 2 itk_option define -sashcursor sashCursor SashCursor crosshair itk_option define -sashwidth sashWidth SashWidth 10 itk_option define -sashheight sashHeight SashHeight 10 itk_option define -thickness thickness Thickness 3 itk_option define -sashindent sashIndent SashIndent -10 itk_option define -showhandle showHandle ShowHandle 1 public method index {index} public method childsite {args} public method fraction {args} public method add {tag args} public method insert {index tag args} public method delete {index} public method hide {index} public method show {index} public method paneconfigure {index args} public method reset {} protected method _pwConfigureEventHandler {width height} protected method _startGrip {where num} protected method _endGrip {where num} protected method _configGrip {where num} protected method _handleGrip {where num} protected method _moveSash {where num} private method _setFracArray {} private method _setActivePanes {} private method _calcFraction {where num} private method _makeSashes {} private method _placeSash {i} private method _placePanes {{start 0} {end end}} private variable _initialized 0 ;# Denotes initialized state. private variable _panes {} ;# List of panes. private variable _activePanes {} ;# List of active panes. private variable _sashes {} ;# List of sashes. private variable _separators {} ;# List of separators. private variable _frac ;# Array of fraction percentages. private variable _lowerlimit ;# Margin distance above/left of sash. private variable _upperlimit ;# Margin distance below/right of sash. private variable _dimension ;# Width/Height at start of drag. private variable _sashloc ;# Array of dist of sash from above/left. private variable _pixels ;# Array of dist of sash from above/left. private variable _minheight ;# Array of min heights for panes. private variable _minsashmoved ;# Lowest sash moved during dragging. private variable _maxsashmoved ;# Highest sash moved during dragging. private variable _dragging 0 ;# Boolean for dragging enabled. private variable _movecount 0 ;# Kludge counter to get sashes to ;# display without calling update ;# idletasks too often. private variable _width 0 ;# hull's width. private variable _height 0 ;# hull's height. private variable _unique -1 ;# Unique number for pane names. private variable _relief ;# relief for -showhandle } # # Provide a lowercased access method for the Panedwindow class. # proc ::iwidgets::panedwindow {pathName args} { uplevel ::iwidgets::Panedwindow $pathName $args } # # Use option database to override default resources of base classes. # option add *Panedwindow.width 10 widgetDefault option add *Panedwindow.height 10 widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::constructor {args} { itk_option add hull.width hull.height pack propagate $itk_component(hull) no # # Add binding for the configure event. # bind pw-config-$this <Configure> [itcl::code $this _pwConfigureEventHandler %w %h] bindtags $itk_component(hull) \ [linsert [bindtags $itk_component(hull)] 0 pw-config-$this] array set _relief {0 sunken 1 raised} eval itk_initialize $args } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -orient # # Specifies the orientation of the sashes. Once the paned window # has been mapped, set the sash bindings and place the panes. # ------------------------------------------------------------------ itcl::configbody iwidgets::Panedwindow::orient { if {$_initialized} { switch $itk_option(-orient) { vertical { for {set i 1} {$i < [llength $_activePanes]} {incr i} { bind $itk_component(sash$i) <Button-1> \ [itcl::code $this _startGrip %x $i] bind $itk_component(sash$i) <B1-Motion> \ [itcl::code $this _handleGrip %x $i] bind $itk_component(sash$i) <B1-ButtonRelease-1> \ [itcl::code $this _endGrip %x $i] bind $itk_component(sash$i) <Configure> \ [itcl::code $this _configGrip %x $i] } _setFracArray _makeSashes _placePanes } horizontal { for {set i 1} {$i < [llength $_activePanes]} {incr i} { bind $itk_component(sash$i) <Button-1> \ [itcl::code $this _startGrip %y $i] bind $itk_component(sash$i) <B1-Motion> \ [itcl::code $this _handleGrip %y $i] bind $itk_component(sash$i) <B1-ButtonRelease-1> \ [itcl::code $this _endGrip %y $i] bind $itk_component(sash$i) <Configure> \ [itcl::code $this _configGrip %y $i] } _setFracArray _makeSashes _placePanes } default { error "bad orientation option \"$itk_option(-orient)\":\ should be horizontal or vertical" } } } } # ------------------------------------------------------------------ # OPTION: -sashborderwidth # # Specifies a non-negative value indicating the width of the 3-D # border to draw around the outside of the sash. # ------------------------------------------------------------------ itcl::configbody iwidgets::Panedwindow::sashborderwidth { set pixels [winfo pixels $itk_component(hull) \ $itk_option(-sashborderwidth)] set itk_option(-sashborderwidth) $pixels if {$_initialized} { for {set i 1} {$i < [llength $_activePanes]} {incr i} { $itk_component(sash$i) configure \ -borderwidth $itk_option(-sashborderwidth) } } } # ------------------------------------------------------------------ # OPTION: -sashcursor # # Specifies the type of cursor to be used when over the sash. # ------------------------------------------------------------------ itcl::configbody iwidgets::Panedwindow::sashcursor { if {$_initialized} { for {set i 1} {$i < [llength $_activePanes]} {incr i} { $itk_component(sash$i) configure -cursor $itk_option(-sashcursor) } } } # ------------------------------------------------------------------ # OPTION: -sashwidth # # Specifies the width of the sash. # ------------------------------------------------------------------ itcl::configbody iwidgets::Panedwindow::sashwidth { set pixels [winfo pixels $itk_component(hull) \ $itk_option(-sashwidth)] set itk_option(-sashwidth) $pixels if {$_initialized} { for {set i 1} {$i < [llength $_activePanes]} {incr i} { $itk_component(sash$i) configure \ -width $itk_option(-sashwidth) } } } # ------------------------------------------------------------------ # OPTION: -sashheight # # Specifies the height of the sash, # ------------------------------------------------------------------ itcl::configbody iwidgets::Panedwindow::sashheight { set pixels [winfo pixels $itk_component(hull) \ $itk_option(-sashheight)] set itk_option(-sashheight) $pixels if {$_initialized} { for {set i 1} {$i < [llength $_activePanes]} {incr i} { $itk_component(sash$i) configure \ -height $itk_option(-sashheight) } } } # ------------------------------------------------------------------ # OPTION: -showhandle # # Specifies whether or not to show the sash handle. If not, then the # whole separator becomes the handle. Valid values are 0 or 1. # ------------------------------------------------------------------ itcl::configbody iwidgets::Panedwindow::showhandle { switch $itk_option(-showhandle) { 0 - 1 { # Update the sashes. _makeSashes _placePanes } default { error "Invalid option for -showhandle: $itk_option(-showhandle).\ Must be 1 or 0." } } } # ------------------------------------------------------------------ # OPTION: -thickness # # Specifies the thickness of the separators. It sets the width and # height of the separator to the thickness value and the borderwidth # to half the thickness. # ------------------------------------------------------------------ itcl::configbody iwidgets::Panedwindow::thickness { set pixels [winfo pixels $itk_component(hull) \ $itk_option(-thickness)] set itk_option(-thickness) $pixels if {$_initialized} { for {set i 1} {$i < [llength $_activePanes]} {incr i} { $itk_component(separator$i) configure \ -height $itk_option(-thickness) $itk_component(separator$i) configure \ -width $itk_option(-thickness) $itk_component(separator$i) configure \ -borderwidth [expr {$itk_option(-thickness) / 2}] } for {set i 1} {$i < [llength $_activePanes]} {incr i} { _placeSash $i } } } # ------------------------------------------------------------------ # OPTION: -sashindent # # Specifies the placement of the sash along the panes. A positive # value causes the sash to be offset from the near (left/top) side # of the pane, and a negative value causes the sash to be offset from # the far (right/bottom) side. If the offset is greater than the # width, then the sash is placed flush against the side. # ------------------------------------------------------------------ itcl::configbody iwidgets::Panedwindow::sashindent { set pixels [winfo pixels $itk_component(hull) \ $itk_option(-sashindent)] set itk_option(-sashindent) $pixels if {$_initialized} { for {set i 1} {$i < [llength $_activePanes]} {incr i} { _placeSash $i } } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: index index # # Searches the panes in the paned window for the one with the # requested tag, numerical index, or keyword "end". Returns the pane's # numerical index if found, otherwise error. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::index {index} { if {[llength $_panes] > 0} { if {[regexp {(^[0-9]+$)} $index]} { if {$index < [llength $_panes]} { return $index } else { error "Panedwindow index \"$index\" is out of range" } } elseif {$index == "end"} { return [expr {[llength $_panes] - 1}] } else { if {[set idx [lsearch $_panes $index]] != -1} { return $idx } error "bad Panedwindow index \"$index\": must be number, end,\ or pattern" } } else { error "Panedwindow \"$itk_component(hull)\" has no panes" } } # ------------------------------------------------------------------ # METHOD: childsite ?index? # # Given an index return the specifc childsite path name. Invoked # without an index return a list of all the child site panes. The # list is ordered from the near side (left/top). # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::childsite {args} { if {! $_initialized} { set _initialized 1 reset } if {[llength $args] == 0} { set children {} foreach pane $_panes { lappend children [$itk_component($pane) childSite] } return $children } else { set index [index [lindex $args 0]] return [$itk_component([lindex $_panes $index]) childSite] } } # ------------------------------------------------------------------ # METHOD: fraction percentage percentage ?percentage ...? # # Sets the visible percentage of the panes. Specifies a list of # percentages which are applied to the currently visible panes from # the near side (left/top). The number of percentages must be equal # to the current number of visible (mapped) panes and add up to 100. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::fraction {args} { #set args [linsert $args 0 $percentage1 $percentage2] if {[llength $args] == [llength $_activePanes]} { set sum 0 for {set i 0} {$i < [llength $args]} {incr i} { set sum [expr {$sum + [lindex $args $i]}] } if {$sum == 100} { set perc 0.0 for {set i 0} {$i < [llength $_activePanes]} {incr i} { set _frac($i) $perc set perc [expr {$perc + [expr {[lindex $args $i] / 100.0}]}] } set _frac($i) 1.0 if {[winfo ismapped $itk_component(hull)]} { _placePanes } } else { error "bad fraction arguments \"$args\": they should add\ up to 100" } } elseif {[llength $args] == 0} { for {set i 0; set j 1} {$j < [llength $_activePanes]} {incr i; incr j} { lappend _ret [expr {round(($_frac($j) - $_frac($i))*100)}] } lappend _ret [eval expr {100 - ([join $_ret +])}] return $_ret } else { error "wrong # args: should be \"$itk_component(hull)\ fraction percentage percentage ?percentage ...?\",\ where the number of percentages is\ [llength $_activePanes] and equal 100 or \"$itk_component(hull) fraction\" which will return a list of the current percentages" } } # ------------------------------------------------------------------ # METHOD: add tag ?option value option value ...? # # Add a new pane to the paned window to the far (right/bottom) side. # The method takes additional options which are passed on to the # pane constructor. These include -margin, and -minimum. The path # of the pane is returned. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::add {tag args} { # # Create panes. # itk_component add $tag { eval iwidgets::Pane $itk_interior.pane[incr _unique] $args } { keep -background -cursor } lappend _panes $tag lappend _activePanes $tag reset return $itk_component($tag) } # ------------------------------------------------------------------ # METHOD: insert index tag ?option value option value ...? # # Insert the specified pane in the paned window just before the one # given by index. Any additional options which are passed on to the # pane constructor. These include -margin, -minimum. The path of # the pane is returned. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::insert {index tag args} { # # Create panes. # itk_component add $tag { eval iwidgets::Pane $itk_interior.pane[incr _unique] $args } { keep -background -cursor } set index [index $index] set _panes [linsert $_panes $index $tag] lappend _activePanes $tag reset return $itk_component($tag) } # ------------------------------------------------------------------ # METHOD: delete index # # Delete the specified pane. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::delete {index} { set index [index $index] set tag [lindex $_panes $index] destroy $itk_component($tag) set _panes [lreplace $_panes $index $index] reset } # ------------------------------------------------------------------ # METHOD: hide index # # Remove the specified pane from the paned window. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::hide {index} { set index [index $index] set tag [lindex $_panes $index] if {[set idx [lsearch -exact $_activePanes $tag]] != -1} { set _activePanes [lreplace $_activePanes $idx $idx] } reset } # ------------------------------------------------------------------ # METHOD: show index # # Display the specified pane in the paned window. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::show {index} { set index [index $index] set tag [lindex $_panes $index] if {[lsearch -exact $_activePanes $tag] == -1} { lappend _activePanes $tag } reset } # ------------------------------------------------------------------ # METHOD: paneconfigure index ?option? ?value option value ...? # # Configure a specified pane. This method allows configuration of # panes from the Panedwindow level. The options may have any of the # values accepted by the add method. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::paneconfigure {index args} { set index [index $index] set tag [lindex $_panes $index] return [uplevel $itk_component($tag) configure $args] } # ------------------------------------------------------------------ # METHOD: reset # # Redisplay the panes based on the default percentages of the panes. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::reset {} { if {$_initialized && [llength $_panes]} { _setActivePanes _setFracArray _makeSashes _placePanes } } # ------------------------------------------------------------------ # PROTECTED METHOD: _pwConfigureEventHandler # # Performs operations necessary following a configure event. This # includes placing the panes. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_pwConfigureEventHandler {width height} { set _width $width set _height $height if {$_initialized} { _placePanes } else { set _initialized 1 reset } } # ------------------------------------------------------------------ # PROTECTED METHOD: _startGrip where num # # Starts the sash drag and drop operation. At the start of the drag # operation all the information is known as for the upper and lower # limits for sash movement. The calculation is made at this time and # stored in protected variables for later access during the drag # handling routines. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_startGrip {where num} { if {$itk_option(-orient) == "horizontal"} { set _dimension $_height } else { set _dimension $_width } set _minsashmoved $num set _maxsashmoved $num set totMinHeight 0 set cnt [llength $_activePanes] set _sashloc(0) 0 set _pixels($cnt) [expr {int($_dimension)}] for {set i 0} {$i < $cnt} {incr i} { set _pixels($i) [expr {int($_frac($i) * $_dimension)}] set margaft [$itk_component([lindex $_activePanes $i]) cget -margin] set minaft [$itk_component([lindex $_activePanes $i]) cget -minimum] set _minheight($i) [expr {$minaft + (2 * $margaft)}] incr totMinHeight $_minheight($i) } set _dragging [expr {$_dimension > $totMinHeight}] grab $itk_component(sash$num) raise $itk_component(separator$num) raise $itk_component(sash$num) $itk_component(sash$num) configure -relief sunken } # ------------------------------------------------------------------ # PROTECTED METHOD: _endGrip where num # # Ends the sash drag and drop operation. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_endGrip {where num} { $itk_component(sash$num) configure -relief $_relief($itk_option(-showhandle)) grab release $itk_component(sash$num) if {$_dragging} { _calcFraction [expr {$_sashloc($num) + $where}] $num _placePanes [expr {$_minsashmoved - 1}] $_maxsashmoved set _dragging 0 } } # ------------------------------------------------------------------ # PROTECTED METHOD: _configGrip where num # # Configure action for sash. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_configGrip {where num} { set _sashloc($num) $where } # ------------------------------------------------------------------ # PROTECTED METHOD: _handleGrip where num # # Motion action for sash. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_handleGrip {where num} { if {$_dragging} { _moveSash [expr {$where + $_sashloc($num)}] $num incr _movecount if {$_movecount>4} { set _movecount 0 update idletasks } } } # ------------------------------------------------------------------ # PROTECTED METHOD: _moveSash where num # # Move the sash to the absolute pixel location # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_moveSash {where num} { set _minsashmoved [expr {($_minsashmoved<$num)?$_minsashmoved:$num}] set _maxsashmoved [expr {($_maxsashmoved>$num)?$_maxsashmoved:$num}] set oldfrac $_frac($num) _calcFraction $where $num if {$_frac($num)!=$oldfrac} { _placeSash $num } } # ------------------------------------------------------------------ # PRIVATE METHOD: _setFracArray # # Calculates the percentages for the fraction array which lists the # percentages for each pane. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_setFracArray {} { set perc 0.0 if {[llength $_activePanes] != 0} { set percIncr [expr {1.0 / [llength $_activePanes]}] } for {set i 0} {$i < [llength $_activePanes]} {incr i} { set _frac($i) $perc set perc [expr {$perc + $percIncr}] } set _frac($i) 1.0 } # ------------------------------------------------------------------ # PRIVATE METHOD: _setActivePanes # # Resets the active pane list. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_setActivePanes {} { set _prevActivePanes $_activePanes set _activePanes {} foreach pane $_panes { if {[lsearch -exact $_prevActivePanes $pane] != -1} { lappend _activePanes $pane } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _calcFraction where num # # Determines the fraction for the sash. Make sure the fraction does # not go past the minimum for the pane on each side of the separator. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_calcFraction {where num} { set numi [expr {$num + 1}] set numd [expr {$num - 1}] set _lowerlimit [expr {$_pixels($numd) + $_minheight($numd)}] set _upperlimit [expr {$_pixels($numi) - $_minheight($num)}] set dir [expr {$where - $_pixels($num)}] if {$where < $_lowerlimit && $dir <= 0} { if {$num == 1} { set _pixels($num) $_lowerlimit } { _moveSash [expr {$where - $_minheight($numd)}] $numd set _pixels($num) [expr {$_pixels($numd) + $_minheight($numd)}] } } elseif {$where > $_upperlimit && $dir >= 0} { if {$numi == [llength $_activePanes]} { set _pixels($num) $_upperlimit } { _moveSash [expr {$where + $_minheight($num)}] $numi set _pixels($num) \ [expr {$_pixels($numi) - $_minheight($num)}] } } else { set _pixels($num) $where } set _frac($num) [expr $_pixels($num).0 / $_dimension] } # ------------------------------------------------------------------ # PRIVATE METHOD: _makeSashes # # Removes any previous sashes and separators and creates new one. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_makeSashes {} { # # Remove any existing sashes and separators. # foreach sash $_sashes { destroy $itk_component($sash) } foreach separator $_separators { destroy $itk_component($separator) } set _sashes {} set _separators {} # # Create one less separator and sash than the number of panes. # for {set id 1} {$id < [llength $_activePanes]} {incr id} { itk_component add sash$id { frame $itk_interior.sash$id -relief $_relief($itk_option(-showhandle)) \ -borderwidth $itk_option(-sashborderwidth) \ -cursor $itk_option(-sashcursor) \ -width $itk_option(-sashwidth) \ -height $itk_option(-sashheight) } { keep -background } lappend _sashes sash$id switch $itk_option(-orient) { vertical { bind $itk_component(sash$id) <Button-1> \ [itcl::code $this _startGrip %x $id] bind $itk_component(sash$id) <B1-Motion> \ [itcl::code $this _handleGrip %x $id] bind $itk_component(sash$id) <B1-ButtonRelease-1> \ [itcl::code $this _endGrip %x $id] bind $itk_component(sash$id) <Configure> \ [itcl::code $this _configGrip %x $id] } horizontal { bind $itk_component(sash$id) <Button-1> \ [itcl::code $this _startGrip %y $id] bind $itk_component(sash$id) <B1-Motion> \ [itcl::code $this _handleGrip %y $id] bind $itk_component(sash$id) <B1-ButtonRelease-1> \ [itcl::code $this _endGrip %y $id] bind $itk_component(sash$id) <Configure> \ [itcl::code $this _configGrip %y $id] } } itk_component add separator$id { frame $itk_interior.separator$id -relief sunken \ -height $itk_option(-thickness) \ -width $itk_option(-thickness) \ -borderwidth [expr {$itk_option(-thickness) / 2}] } { keep -background -cursor } lappend _separators separator$id } } # ------------------------------------------------------------------ # PRIVATE METHOD: _placeSash i # # Places the position of the sash and separator. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_placeSash {i} { if {$itk_option(-orient) == "horizontal"} { place $itk_component(separator$i) -in $itk_component(hull) \ -x 0 -relwidth 1 -rely $_frac($i) -anchor w \ -height $itk_option(-thickness) if {$itk_option(-sashindent) < 0} { set sashPos [expr {$_width + $itk_option(-sashindent)}] set sashAnchor e } else { set sashPos $itk_option(-sashindent) set sashAnchor w } if {$itk_option(-showhandle)} { place $itk_component(sash$i) -in $itk_component(hull) \ -x $sashPos -rely $_frac($i) -anchor $sashAnchor } else { place $itk_component(sash$i) -in $itk_component(hull) \ -x 0 -relwidth 1 -rely $_frac($i) -anchor w \ -height $itk_option(-thickness) } } else { place $itk_component(separator$i) -in $itk_component(hull) \ -y 0 -relheight 1 -relx $_frac($i) -anchor n \ -width $itk_option(-thickness) if {$itk_option(-sashindent) < 0} { set sashPos [expr {$_height + $itk_option(-sashindent)}] set sashAnchor s } else { set sashPos $itk_option(-sashindent) set sashAnchor n } if {$itk_option(-showhandle)} { place $itk_component(sash$i) -in $itk_component(hull) \ -y $sashPos -relx $_frac($i) -anchor $sashAnchor } else { place $itk_component(sash$i) -in $itk_component(hull) \ -y 0 -relheight 1 -relx $_frac($i) -anchor n \ -width $itk_option(-thickness) } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _placePanes # # Resets the panes of the window following movement of the sash. # ------------------------------------------------------------------ itcl::body iwidgets::Panedwindow::_placePanes {{start 0} {end end}} { if {$end=="end"} { set end [expr {[llength $_activePanes] - 1}] } set _updatePanes [lrange $_activePanes $start $end] if {$_updatePanes == $_activePanes} { set _forgetPanes $_panes } { set _forgetPanes $_updatePanes } foreach pane $_forgetPanes { place forget $itk_component($pane) } if {$itk_option(-orient) == "horizontal"} { set i $start foreach pane $_updatePanes { place $itk_component($pane) -in $itk_component(hull) \ -x 0 -rely $_frac($i) -relwidth 1 \ -relheight [expr {$_frac([expr {$i + 1}]) - $_frac($i)}] incr i } } else { set i $start foreach pane $_updatePanes { place $itk_component($pane) -in $itk_component(hull) \ -y 0 -relx $_frac($i) -relheight 1 \ -relwidth [expr {$_frac([expr {$i + 1}]) - $_frac($i)}] incr i } } for {set i [expr {$start+1}]} {$i <= $end} {incr i} { if {[array names itk_component separator$i] != ""} { _placeSash $i raise $itk_component(separator$i) raise $itk_component(sash$i) } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/roman.itcl�������������������������������������������������������������������0000644�0036047�0045461�00000001335�07334044000�015330� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������namespace eval ::iwidgets { variable romand set romand(val) {1000 900 500 400 100 90 50 40 10 9 5 4 1} set romand(upper) { M CM D CD C XC L XL X IX V IV I} set romand(lower) { m cm d cd c xc l xl x ix v iv i} proc roman2 {n {case upper}} { variable romand set r "" foreach val $romand(val) sym $romand($case) { while {$n >= $val} { set r "$r$sym" incr n -$val } } return $r } proc roman {n {case upper}} { variable romand set r "" foreach val $romand(val) sym $romand($case) { for {} {$n >= $val} {incr n -$val} { set r "$r$sym" } } return $r } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/watch.itk��������������������������������������������������������������������0000644�0036047�0045461�00000046345�07337265437�015216� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Watch # ---------------------------------------------------------------------- # Implements a a clock widget in a canvas. # # ---------------------------------------------------------------------- # AUTHOR: John A. Tucker EMAIL: jatucker@spd.dsccc.com # # ====================================================================== # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Default resources. # option add *Watch.labelFont \ -*-Courier-Medium-R-Normal--*-120-*-*-*-*-*-* widgetDefault # # Usual options. # itk::usual Watch { keep -background -cursor -labelfont -foreground } itcl::class iwidgets::Watch { inherit itk::Widget itk_option define -hourradius hourRadius Radius .50 itk_option define -hourcolor hourColor Color red itk_option define -minuteradius minuteRadius Radius .80 itk_option define -minutecolor minuteColor Color yellow itk_option define -pivotradius pivotRadius Radius .10 itk_option define -pivotcolor pivotColor Color white itk_option define -secondradius secondRadius Radius .90 itk_option define -secondcolor secondColor Color black itk_option define -clockcolor clockColor Color white itk_option define -clockstipple clockStipple ClockStipple {} itk_option define -state state State normal itk_option define -showampm showAmPm ShowAmPm true itk_option define -tickcolor tickColor Color black constructor {args} {} destructor {} # # Public methods # public { method get {{format "-string"}} method show {{time "now"}} method watch {args} } # # Private methods # private { method _handMotionCB {tag x y} method _drawHand {tag} method _handReleaseCB {tag x y} method _displayClock {{when "later"}} variable _interior variable _radius variable _theta variable _extent variable _reposition "" ;# non-null => _displayClock pending variable _timeVar variable _x0 1 variable _y0 1 common _ampmVar common PI [expr {2*asin(1.0)}] } } # # Provide a lowercased access method for the Watch class. # proc ::iwidgets::watch {pathName args} { uplevel ::iwidgets::Watch $pathName $args } # # Use option database to override default resources of base classes. # option add *Watch.width 155 widgetDefault option add *Watch.height 175 widgetDefault # ----------------------------------------------------------------------------- # CONSTRUCTOR # ----------------------------------------------------------------------------- itcl::body iwidgets::Watch::constructor { args } { # # Add back to the hull width and height options and make the # borderwidth zero since we don't need it. # set _interior $itk_interior itk_option add hull.width hull.height component hull configure -borderwidth 0 grid propagate $itk_component(hull) no set _ampmVar($this) "AM" set _radius(outer) 1 set _radius(hour) 1 set _radius(minute) 1 set _radius(second) 1 set _theta(hour) 30 set _theta(minute) 6 set _theta(second) 6 set _extent(hour) 14 set _extent(minute) 14 set _extent(second) 2 set _timeVar(hour) 12 set _timeVar(minute) 0 set _timeVar(second) 0 # # Create the frame in which the "AM" and "PM" radiobuttons will be drawn # itk_component add frame { frame $itk_interior.frame } # # Create the canvas in which the clock will be drawn # itk_component add canvas { canvas $itk_interior.canvas } bind $itk_component(canvas) <Map> +[itcl::code $this _displayClock] bind $itk_component(canvas) <Configure> +[itcl::code $this _displayClock] # # Create the "AM" and "PM" radiobuttons to be drawn in the canvas # itk_component add am { radiobutton $itk_component(frame).am \ -text "AM" \ -value "AM" \ -variable [itcl::scope _ampmVar($this)] } { usual rename -font -labelfont labelFont Font } itk_component add pm { radiobutton $itk_component(frame).pm \ -text "PM" \ -value "PM" \ -variable [itcl::scope _ampmVar($this)] } { usual rename -font -labelfont labelFont Font } # # Create the canvas item for displaying the main oval which encapsulates # the entire clock. # watch create oval 0 0 2 2 -width 5 -tags clock # # Create the canvas items for displaying the 60 ticks marks around the # inner perimeter of the watch. # set extent 3 for {set i 0} {$i < 60} {incr i} { set start [expr {$i*6-1}] set tag [expr {[expr {$i%5}] == 0 ? "big" : "little"}] watch create arc 0 0 0 0 \ -style arc \ -extent $extent \ -start $start \ -tags "tick$i tick $tag" } # # Create the canvas items for displaying the hour, minute, and second hands # of the watch. Add bindings to allow the mouse to move and set the # clock hands. # watch create arc 1 1 1 1 -extent 30 -tags minute watch create arc 1 1 1 1 -extent 30 -tags hour watch create arc 1 1 1 1 -tags second # # Create the canvas item for displaying the center of the watch in which # the hour, minute, and second hands will pivot. # watch create oval 0 0 1 1 -width 5 -fill black -tags pivot # # Position the "AM/PM" button frame and watch canvas. # grid $itk_component(frame) -row 0 -column 0 -sticky new grid $itk_component(canvas) -row 1 -column 0 -sticky nsew grid rowconfigure $itk_interior 0 -weight 0 grid rowconfigure $itk_interior 1 -weight 1 grid columnconfigure $itk_interior 0 -weight 1 eval itk_initialize $args } # ----------------------------------------------------------------------------- # DESTURCTOR # ----------------------------------------------------------------------------- itcl::body iwidgets::Watch::destructor {} { if {$_reposition != ""} { after cancel $_reposition } } # ----------------------------------------------------------------------------- # METHODS # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- # METHOD: _handReleaseCB tag x y # # ----------------------------------------------------------------------------- itcl::body iwidgets::Watch::_handReleaseCB {tag x y} { set atanab [expr {atan2(double($y-$_y0),double($x-$_x0))*(180/$PI)}] set degrees [expr {$atanab > 0 ? [expr {360-$atanab}] : abs($atanab)}] set ticks [expr {round($degrees/$_theta($tag))}] set _timeVar($tag) [expr {((450-$ticks*$_theta($tag))%360)/$_theta($tag)}] if {$tag == "hour" && $_timeVar(hour) == 0} { set _timeVar($tag) 12 } _drawHand $tag } # ----------------------------------------------------------------------------- # PROTECTED METHOD: _handMotionCB tag x y # # ----------------------------------------------------------------------------- itcl::body iwidgets::Watch::_handMotionCB {tag x y} { if {$x == $_x0 || $y == $_y0} { return } set a [expr {$y-$_y0}] set b [expr {$x-$_x0}] set c [expr {hypot($a,$b)}] set atanab [expr {atan2(double($a),double($b))*(180/$PI)}] set degrees [expr {$atanab > 0 ? [expr 360-$atanab] : abs($atanab)}] set x2 [expr {$_x0+$_radius($tag)*($b/double($c))}] set y2 [expr {$_y0+$_radius($tag)*($a/double($c))}] watch coords $tag \ [expr {$x2-$_radius($tag)}] \ [expr {$y2-$_radius($tag)}] \ [expr {$x2+$_radius($tag)}] \ [expr {$y2+$_radius($tag)}] set start [expr {$degrees-180-($_extent($tag)/2)}] watch itemconfigure $tag -start $start -extent $_extent($tag) } # ----------------------------------------------------------------------------- # PROTECTED METHOD: get ?format? # # ----------------------------------------------------------------------------- itcl::body iwidgets::Watch::get {{format "-string"}} { set timestr [format "%02d:%02d:%02d %s" \ $_timeVar(hour) $_timeVar(minute) \ $_timeVar(second) $_ampmVar($this)] switch -- $format { "-string" { return $timestr } "-clicks" { return [clock scan $timestr] } default { error "bad format option \"$format\":\ should be -string or -clicks" } } } # ----------------------------------------------------------------------------- # METHOD: watch ?args? # # Evaluates the specified args against the canvas component. # ----------------------------------------------------------------------------- itcl::body iwidgets::Watch::watch {args} { return [eval $itk_component(canvas) $args] } # ----------------------------------------------------------------------------- # METHOD: _drawHand tag # # ----------------------------------------------------------------------------- itcl::body iwidgets::Watch::_drawHand {tag} { set degrees [expr {abs(450-($_timeVar($tag)*$_theta($tag)))%360}] set radians [expr {$degrees*($PI/180)}] set x [expr {$_x0+$_radius($tag)*cos($radians)}] set y [expr {$_y0+$_radius($tag)*sin($radians)*(-1)}] watch coords $tag \ [expr {$x-$_radius($tag)}] \ [expr {$y-$_radius($tag)}] \ [expr {$x+$_radius($tag)}] \ [expr {$y+$_radius($tag)}] set start [expr {$degrees-180-($_extent($tag)/2)}] watch itemconfigure $tag -start $start } # ------------------------------------------------------------------ # PUBLIC METHOD: show time # # Changes the currently displayed time to be that of the time # argument. The time may be specified either as a string or an # integer clock value. Reference the clock command for more # information on obtaining times and their formats. # ------------------------------------------------------------------ itcl::body iwidgets::Watch::show {{time "now"}} { if {$time == "now"} { set seconds [clock seconds] } elseif {![catch {clock format $time}]} { set seconds $time } elseif {[catch {set seconds [clock scan $time]}]} { error "bad time: \"$time\", must be a valid time\ string, clock clicks value or the keyword now" } set timestring [clock format $seconds -format "%I %M %S %p"] set _timeVar(hour) [expr int(1[lindex $timestring 0] - 100)] set _timeVar(minute) [expr int(1[lindex $timestring 1] - 100)] set _timeVar(second) [expr int(1[lindex $timestring 2] - 100)] set _ampmVar($this) [lindex $timestring 3] _drawHand hour _drawHand minute _drawHand second } # ----------------------------------------------------------------------------- # PROTECTED METHOD: _displayClock ?when? # # Places the hour, minute, and second dials in the canvas. If "when" is "now", # the change is applied immediately. If it is "later" or it is not specified, # then the change is applied later, when the application is idle. # ----------------------------------------------------------------------------- itcl::body iwidgets::Watch::_displayClock {{when "later"}} { if {$when == "later"} { if {$_reposition == ""} { set _reposition [after idle [itcl::code $this _displayClock now]] } return } # # Compute the center coordinates for the clock based on the # with and height of the canvas. # set width [winfo width $itk_component(canvas)] set height [winfo height $itk_component(canvas)] set _x0 [expr {$width/2}] set _y0 [expr {$height/2}] # # Set the radius of the watch, pivot, hour, minute and second items. # set _radius(outer) [expr {$_x0 < $_y0 ? $_x0 : $_y0}] set _radius(pivot) [expr {$itk_option(-pivotradius)*$_radius(outer)}] set _radius(hour) [expr {$itk_option(-hourradius)*$_radius(outer)}] set _radius(minute) [expr {$itk_option(-minuteradius)*$_radius(outer)}] set _radius(second) [expr {$itk_option(-secondradius)*$_radius(outer)}] set outerWidth [watch itemcget clock -width] # # Set the coordinates of the clock item # set x1Outer $outerWidth set y1Outer $outerWidth set x2Outer [expr {$width-$outerWidth}] set y2Outer [expr {$height-$outerWidth}] watch coords clock $x1Outer $y1Outer $x2Outer $y2Outer # # Set the coordinates of the tick items # set offset [expr {$outerWidth*2}] set x1Tick [expr {$x1Outer+$offset}] set y1Tick [expr {$y1Outer+$offset}] set x2Tick [expr {$x2Outer-$offset}] set y2Tick [expr {$y2Outer-$offset}] for {set i 0} {$i < 60} {incr i} { watch coords tick$i $x1Tick $y1Tick $x2Tick $y2Tick } set maxTickWidth [expr {$_radius(outer)-$_radius(second)+1}] set minTickWidth [expr {round($maxTickWidth/2)}] watch itemconfigure big -width $maxTickWidth watch itemconfigure little -width [expr {round($maxTickWidth/2)}] # # Set the coordinates of the pivot item # set x1Center [expr {$_x0-$_radius(pivot)}] set y1Center [expr {$_y0-$_radius(pivot)}] set x2Center [expr {$_x0+$_radius(pivot)}] set y2Center [expr {$_y0+$_radius(pivot)}] watch coords pivot $x1Center $y1Center $x2Center $y2Center # # Set the coordinates of the hour, minute, and second dial items # watch itemconfigure hour -extent $_extent(hour) _drawHand hour watch itemconfigure minute -extent $_extent(minute) _drawHand minute watch itemconfigure second -extent $_extent(second) _drawHand second set _reposition "" } # ----------------------------------------------------------------------------- # OPTIONS # ----------------------------------------------------------------------------- # ------------------------------------------------------------------ # OPTION: state # # Configure the editable state of the widget. Valid values are # normal and disabled. In a disabled state, the hands of the # watch are not selectabled. # ------------------------------------------------------------------ itcl::configbody ::iwidgets::Watch::state { if {$itk_option(-state) == "normal"} { watch bind minute <B1-Motion> \ [itcl::code $this _handMotionCB minute %x %y] watch bind minute <ButtonRelease-1> \ [itcl::code $this _handReleaseCB minute %x %y] watch bind hour <B1-Motion> \ [itcl::code $this _handMotionCB hour %x %y] watch bind hour <ButtonRelease-1> \ [itcl::code $this _handReleaseCB hour %x %y] watch bind second <B1-Motion> \ [itcl::code $this _handMotionCB second %x %y] watch bind second <ButtonRelease-1> \ [itcl::code $this _handReleaseCB second %x %y] $itk_component(am) configure -state normal $itk_component(pm) configure -state normal } elseif {$itk_option(-state) == "disabled"} { watch bind minute <B1-Motion> {} watch bind minute <ButtonRelease-1> {} watch bind hour <B1-Motion> {} watch bind hour <ButtonRelease-1> {} watch bind second <B1-Motion> {} watch bind second <ButtonRelease-1> {} $itk_component(am) configure -state disabled \ -disabledforeground [$itk_component(am) cget -background] $itk_component(pm) configure -state normal \ -disabledforeground [$itk_component(am) cget -background] } else { error "bad state option \"$itk_option(-state)\":\ should be normal or disabled" } } # ------------------------------------------------------------------ # OPTION: showampm # # Configure the display of the AM/PM radio buttons. # ------------------------------------------------------------------ itcl::configbody ::iwidgets::Watch::showampm { switch -- $itk_option(-showampm) { 0 - no - false - off { pack forget $itk_component(am) pack forget $itk_component(pm) } 1 - yes - true - on { pack $itk_component(am) -side left -fill both -expand 1 pack $itk_component(pm) -side right -fill both -expand 1 } default { error "bad showampm option \"$itk_option(-showampm)\":\ should be boolean" } } } # ------------------------------------------------------------------ # OPTION: pivotcolor # # Configure the color of the clock pivot. # itcl::configbody ::iwidgets::Watch::pivotcolor { watch itemconfigure pivot -fill $itk_option(-pivotcolor) } # ------------------------------------------------------------------ # OPTION: clockstipple # # Configure the stipple pattern for the clock fill color. # itcl::configbody ::iwidgets::Watch::clockstipple { watch itemconfigure clock -stipple $itk_option(-clockstipple) } # ------------------------------------------------------------------ # OPTION: clockcolor # # Configure the color of the clock. # itcl::configbody ::iwidgets::Watch::clockcolor { watch itemconfigure clock -fill $itk_option(-clockcolor) } # ------------------------------------------------------------------ # OPTION: hourcolor # # Configure the color of the hour hand. # itcl::configbody ::iwidgets::Watch::hourcolor { watch itemconfigure hour -fill $itk_option(-hourcolor) } # ------------------------------------------------------------------ # OPTION: minutecolor # # Configure the color of the minute hand. # itcl::configbody ::iwidgets::Watch::minutecolor { watch itemconfigure minute -fill $itk_option(-minutecolor) } # ------------------------------------------------------------------ # OPTION: secondcolor # # Configure the color of the second hand. # itcl::configbody ::iwidgets::Watch::secondcolor { watch itemconfigure second -fill $itk_option(-secondcolor) } # ------------------------------------------------------------------ # OPTION: tickcolor # # Configure the color of the ticks. # itcl::configbody ::iwidgets::Watch::tickcolor { watch itemconfigure tick -outline $itk_option(-tickcolor) } # ------------------------------------------------------------------ # OPTION: hourradius # # Configure the radius of the hour hand. # itcl::configbody ::iwidgets::Watch::hourradius { _displayClock } # ------------------------------------------------------------------ # OPTION: minuteradius # # Configure the radius of the minute hand. # itcl::configbody ::iwidgets::Watch::minuteradius { _displayClock } # ------------------------------------------------------------------ # OPTION: secondradius # # Configure the radius of the second hand. # itcl::configbody ::iwidgets::Watch::secondradius { _displayClock } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/canvasprintdialog.itk��������������������������������������������������������0000644�0036047�0045461�00000013002�07334043777�017576� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # CanvasPrintDialog v1.5 # ---------------------------------------------------------------------- # Implements a print dialog for printing the contents of a canvas widget # to a printer or a file. It is possible to specify page orientation, the # number of pages to print the image on and if the output should be # stretched to fit the page. The CanvasPrintDialog is derived from the # Dialog class and is composed of a CanvasPrintBox with attributes set to # manipulate the dialog buttons. # # ---------------------------------------------------------------------- # AUTHOR: Tako Schotanus EMAIL: Tako.Schotanus@bouw.tno.nl # ---------------------------------------------------------------------- # Copyright (c) 1995 Tako Schotanus # ====================================================================== # Permission is hereby granted, without written agreement and without # license or royalty fees, to use, copy, modify, and distribute this # software and its documentation for any purpose, provided that the # above copyright notice and the following two paragraphs appear in # all copies of this software. # # IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES # ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN # IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # # THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND # FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS # ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO # PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # ====================================================================== # # Option database default resources: # option add *Canvasprintdialog.filename "canvas.ps" widgetDefault option add *Canvasprintdialog.hPageCnt 1 widgetDefault option add *Canvasprintdialog.orient landscape widgetDefault option add *Canvasprintdialog.output printer widgetDefault option add *Canvasprintdialog.pageSize A4 widgetDefault option add *Canvasprintdialog.posterize 0 widgetDefault option add *Canvasprintdialog.printCmd lpr widgetDefault option add *Canvasprintdialog.printRegion "" widgetDefault option add *Canvasprintdialog.vPageCnt 1 widgetDefault option add *Canvasprintdialog.title "Canvas Print Dialog" widgetDefault option add *Canvasprintdialog.master "." widgetDefault # # Usual options. # itk::usual Canvasprintdialog { keep -background -cursor -foreground -modality } # ------------------------------------------------------------------ # CANVASPRINTDIALOG # ------------------------------------------------------------------ itcl::class iwidgets::Canvasprintdialog { inherit iwidgets::Dialog constructor {args} {} destructor {} method deactivate {args} {} method getoutput {} {} method setcanvas {canv} {} method refresh {} {} method print {} {} } # # Provide a lowercased access method for the Canvasprintdialog class. # proc ::iwidgets::canvasprintdialog {args} { uplevel ::iwidgets::Canvasprintdialog $args } # ------------------------------------------------------------------ # CONSTRUCTOR # # Create new file selection dialog. # ------------------------------------------------------------------ itcl::body iwidgets::Canvasprintdialog::constructor {args} { component hull configure -borderwidth 0 # # Instantiate a file selection box widget. # itk_component add cpb { iwidgets::Canvasprintbox $itk_interior.cpb } { usual keep -printregion -output -printcmd -filename -pagesize \ -orient -stretch -posterize -hpagecnt -vpagecnt } pack $itk_component(cpb) -fill both -expand yes # # Hide the apply and help buttons. # buttonconfigure OK -text Print buttonconfigure Apply -command [itcl::code $this refresh] -text Refresh hide Help eval itk_initialize $args } # ------------------------------------------------------------------ # METHOD: deactivate # # Redefines method of dialog shell class. Stops the drawing of the # thumbnail (when busy) upon deactivation of the dialog. # ------------------------------------------------------------------ itcl::body iwidgets::Canvasprintdialog::deactivate {args} { $itk_component(cpb) stop return [eval Shell::deactivate $args] } # ------------------------------------------------------------------ # METHOD: getoutput # # Thinwrapped method of canvas print box class. # ------------------------------------------------------------------ itcl::body iwidgets::Canvasprintdialog::getoutput {} { return [$itk_component(cpb) getoutput] } # ------------------------------------------------------------------ # METHOD: setcanvas # # Thinwrapped method of canvas print box class. # ------------------------------------------------------------------ itcl::body iwidgets::Canvasprintdialog::setcanvas {canv} { return [$itk_component(cpb) setcanvas $canv] } # ------------------------------------------------------------------ # METHOD: refresh # # Thinwrapped method of canvas print box class. # ------------------------------------------------------------------ itcl::body iwidgets::Canvasprintdialog::refresh {} { return [$itk_component(cpb) refresh] } # ------------------------------------------------------------------ # METHOD: print # # Thinwrapped method of canvas print box class. # ------------------------------------------------------------------ itcl::body iwidgets::Canvasprintdialog::print {} { return [$itk_component(cpb) print] } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/scrolledwidget.itk�����������������������������������������������������������0000644�0036047�0045461�00000027765�07334044000�017102� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Scrolledwidget # ---------------------------------------------------------------------- # Implements a general purpose base class for scrolled widgets, by # creating the necessary horizontal and vertical scrollbars and # providing protected methods for controlling their display. The # derived class needs to take advantage of the fact that the grid # is used and the vertical scrollbar is in row 0, column 2 and the # horizontal scrollbar in row 2, column 0. # # ---------------------------------------------------------------------- # AUTHOR: Mark Ulferts mulferts@austin.dsccc.com # # @(#) $Id: scrolledwidget.itk,v 1.2 2001/08/07 19:56:48 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Scrolledwidget { keep -background -borderwidth -cursor -highlightcolor -highlightthickness keep -activebackground -activerelief -jump -troughcolor keep -labelfont -foreground } # ------------------------------------------------------------------ # SCROLLEDWIDGET # ------------------------------------------------------------------ itcl::class iwidgets::Scrolledwidget { inherit iwidgets::Labeledwidget constructor {args} {} destructor {} itk_option define -sbwidth sbWidth Width 15 itk_option define -scrollmargin scrollMargin ScrollMargin 3 itk_option define -vscrollmode vscrollMode VScrollMode static itk_option define -hscrollmode hscrollMode HScrollMode static itk_option define -width width Width 30 itk_option define -height height Height 30 protected method _scrollWidget {wid first last} protected method _vertScrollbarDisplay {mode} protected method _horizScrollbarDisplay {mode} protected method _configureEvent {} protected variable _vmode off ;# Vertical scroll mode protected variable _hmode off ;# Vertical scroll mode protected variable _recheckHoriz 1 ;# Flag to check need for ;# horizontal scrollbar protected variable _recheckVert 1 ;# Flag to check need for ;# vertical scrollbar protected variable _interior {} } # # Provide a lowercased access method for the Scrolledwidget class. # proc ::iwidgets::scrolledwidget {pathName args} { uplevel ::iwidgets::Scrolledwidget $pathName $args } # # Use option database to override default resources of base classes. # option add *Scrolledwidget.labelPos n widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledwidget::constructor {args} { # # Turn off the borderwidth on the hull and save off the # interior for later use. # component hull configure -borderwidth 0 set _interior $itk_interior # # Check if the scrollbars need mapping upon a configure event. # bind $_interior <Configure> [itcl::code $this _configureEvent] # # Turn off propagation in the containing shell. # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $_interior]} { grid propagate $_interior no } # # Create the vertical scroll bar # itk_component add vertsb { scrollbar $itk_interior.vertsb -orient vertical } { usual keep -borderwidth -elementborderwidth -jump -relief rename -highlightbackground -background background Background } # # Create the horizontal scrollbar # itk_component add horizsb { scrollbar $itk_interior.horizsb -orient horizontal } { usual keep -borderwidth -elementborderwidth -jump -relief rename -highlightbackground -background background Background } # # Initialize the widget based on the command line options. # eval itk_initialize $args } # ------------------------------------------------------------------ # DESTURCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledwidget::destructor {} { } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -sbwidth # # Set the width of the scrollbars. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledwidget::sbwidth { $itk_component(vertsb) configure -width $itk_option(-sbwidth) $itk_component(horizsb) configure -width $itk_option(-sbwidth) } # ------------------------------------------------------------------ # OPTION: -scrollmargin # # Set the distance between the scrollbars and the list box. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledwidget::scrollmargin { set pixels [winfo pixels $_interior $itk_option(-scrollmargin)] if {$_hmode == "on"} { grid rowconfigure $_interior 1 -minsize $pixels } if {$_vmode == "on"} { grid columnconfigure $_interior 1 -minsize $pixels } } # ------------------------------------------------------------------ # OPTION: -vscrollmode # # Enable/disable display and mode of veritcal scrollbars. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledwidget::vscrollmode { switch $itk_option(-vscrollmode) { static { _vertScrollbarDisplay on } dynamic - none { _vertScrollbarDisplay off } default { error "bad vscrollmode option\ \"$itk_option(-vscrollmode)\": should be\ static, dynamic, or none" } } } # ------------------------------------------------------------------ # OPTION: -hscrollmode # # Enable/disable display and mode of horizontal scrollbars. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledwidget::hscrollmode { switch $itk_option(-hscrollmode) { static { _horizScrollbarDisplay on } dynamic - none { _horizScrollbarDisplay off } default { error "bad hscrollmode option\ \"$itk_option(-hscrollmode)\": should be\ static, dynamic, or none" } } } # ------------------------------------------------------------------ # OPTION: -width # # Specifies the width of the scrolled widget. The value may be # specified in any of the forms acceptable to Tk_GetPixels. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledwidget::width { $_interior configure -width \ [winfo pixels $_interior $itk_option(-width)] } # ------------------------------------------------------------------ # OPTION: -height # # Specifies the height of the scrolled widget. The value may be # specified in any of the forms acceptable to Tk_GetPixels. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledwidget::height { $_interior configure -height \ [winfo pixels $_interior $itk_option(-height)] } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # PROTECTED METHOD: _vertScrollbarDisplay mode # # Displays the vertical scrollbar based on the input mode. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledwidget::_vertScrollbarDisplay {mode} { switch $mode { on { set _vmode on grid columnconfigure $_interior 1 -minsize \ [winfo pixels $_interior $itk_option(-scrollmargin)] grid $itk_component(vertsb) -row 0 -column 2 -sticky ns } off { set _vmode off grid columnconfigure $_interior 1 -minsize 0 grid forget $itk_component(vertsb) } default { error "invalid argument \"$mode\": should be on or off" } } } # ------------------------------------------------------------------ # PROTECTED METHOD: _horizScrollbarDisplay mode # # Displays the horizontal scrollbar based on the input mode. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledwidget::_horizScrollbarDisplay {mode} { switch $mode { on { set _hmode on grid rowconfigure $_interior 1 -minsize \ [winfo pixels $_interior $itk_option(-scrollmargin)] grid $itk_component(horizsb) -row 2 -column 0 -sticky ew } off { set _hmode off grid rowconfigure $_interior 1 -minsize 0 grid forget $itk_component(horizsb) } default { error "invalid argument \"$mode\": should be on or off" } } } # ------------------------------------------------------------------ # PROTECTED METHOD: _scrollWidget wid first last # # Performs scrolling and display of scrollbars based on the total # and maximum frame size as well as the current -vscrollmode and # -hscrollmode settings. Parameters are automatic scroll parameters. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledwidget::_scrollWidget {wid first last} { $wid set $first $last if {$wid == $itk_component(vertsb)} { if {$itk_option(-vscrollmode) == "dynamic"} { if {($_recheckVert != 1) && ($_vmode == "on")} { return } else { set _recheckVert 0 } if {($first == 0) && ($last == 1)} { if {$_vmode != "off"} { _vertScrollbarDisplay off } } else { if {$_vmode != "on"} { _vertScrollbarDisplay on } } } } elseif {$wid == $itk_component(horizsb)} { if {$itk_option(-hscrollmode) == "dynamic"} { if {($_recheckHoriz != 1) && ($_hmode == "on")} { return } else { set _recheckHoriz 0 } if {($first == 0) && ($last == 1)} { if {$_hmode != "off"} { _horizScrollbarDisplay off } } else { if {$_hmode != "on"} { _horizScrollbarDisplay on } } } } } # ------------------------------------------------------------------ # PROTECTED METHOD: _configureEvent # # Resets the recheck flags which determine if we'll try and map # the scrollbars in dynamic mode. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledwidget::_configureEvent {} { update idletasks set _recheckVert 1 set _recheckHoriz 1 } �����������iwidgets-4.1.1/generic/pane.itk���������������������������������������������������������������������0000644�0036047�0045461�00000011173�07334044000�014774� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Paned # ---------------------------------------------------------------------- # Implements a pane for a paned window widget. The pane is itself a # frame with a child site for other widgets. The pane class performs # basic option management. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) $Id: pane.itk,v 1.3 2001/08/07 19:56:48 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Pane { keep -background -cursor } # ------------------------------------------------------------------ # PANE # ------------------------------------------------------------------ itcl::class iwidgets::Pane { inherit itk::Widget constructor {args} {} itk_option define -minimum minimum Minimum 10 itk_option define -margin margin Margin 8 public method childSite {} {} } # # Provide a lowercased access method for the Pane class. # proc ::iwidgets::pane {pathName args} { uplevel ::iwidgets::Pane $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Pane::constructor {args} { # # Create the pane childsite. # itk_component add childsite { frame $itk_interior.childsite } { keep -background -cursor } pack $itk_component(childsite) -fill both -expand yes # # Set the itk_interior variable to be the childsite for derived # classes. # set itk_interior $itk_component(childsite) eval itk_initialize $args } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -minimum # # Specifies the minimum size that the pane may reach. # ------------------------------------------------------------------ itcl::configbody iwidgets::Pane::minimum { set pixels \ [winfo pixels $itk_component(hull) $itk_option(-minimum)] set itk_option(-minimum) $pixels } # ------------------------------------------------------------------ # OPTION: -margin # # Specifies the border distance between the pane and pane contents. # This is done by setting the borderwidth of the pane to the margin. # ------------------------------------------------------------------ itcl::configbody iwidgets::Pane::margin { set pixels [winfo pixels $itk_component(hull) $itk_option(-margin)] set itk_option(-margin) $pixels $itk_component(childsite) configure \ -borderwidth $itk_option(-margin) } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: childSite # # Return the pane child site path name. # ------------------------------------------------------------------ itcl::body iwidgets::Pane::childSite {} { return $itk_component(childsite) } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/tabnotebook.itk��������������������������������������������������������������0000644�0036047�0045461�00000112072�07535736127�016405� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Tabnotebook Widget # ---------------------------------------------------------------------- # The Tabnotebook command creates a new window (given by the pathName # argument) and makes it into a Tabnotebook widget. Additional options, # described above may be specified on the command line or in the option # database to configure aspects of the Tabnotebook such as its colors, # font, and text. The Tabnotebook command returns its pathName argument. # At the time this command is invoked, there must not exist a window # named pathName, but pathName's parent must exist. # # A Tabnotebook is a widget that contains a set of tabbed pages. It # displays one page from the set as the selected page. A Tab displays # the label for the page to which it is attached and serves as a page # selector. When a page's tab is selected, the page's contents are # displayed in the page area. The selected tab has a three-dimensional # effect to make it appear to float above the other tabs. The tabs are # displayed as a group along either the left, top, right, or bottom # edge. When first created a Tabnotebook has no pages. Pages may be # added or deleted using widget commands described below. # # A special option may be provided to the Tabnotebook. The -auto # option specifies whether the Tabnotebook will automatically handle # the unpacking and packing of pages when pages are selected. A value # of true sig nifies that the notebook will automatically manage it. This # is the default value. A value of false signifies the notebook will not # perform automatic switching of pages. # # ---------------------------------------------------------------------- # AUTHOR: Bill W. Scott # # CURRENT MAINTAINER: Chad Smith --> csmith@adc.com or itclguy@yahoo.com # # @(#) $Id: tabnotebook.itk,v 1.7 2002/09/05 20:19:35 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Default resources. # option add *Tabnotebook.borderWidth 2 widgetDefault option add *Tabnotebook.state normal widgetDefault option add *Tabnotebook.disabledForeground #a3a3a3 widgetDefault option add *Tabnotebook.scrollCommand {} widgetDefault option add *Tabnotebook.equalTabs true widgetDefault option add *Tabnotebook.font \ -Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-* widgetDefault option add *Tabnotebook.width 300 widgetDefault option add *Tabnotebook.height 150 widgetDefault option add *Tabnotebook.foreground Black widgetDefault option add *Tabnotebook.background #d9d9d9 widgetDefault option add *Tabnotebook.tabForeground Black widgetDefault option add *Tabnotebook.tabBackground #d9d9d9 widgetDefault option add *Tabnotebook.backdrop #d9d9d9 widgetDefault option add *Tabnotebook.margin 4 widgetDefault option add *Tabnotebook.tabBorders true widgetDefault option add *Tabnotebook.bevelAmount 0 widgetDefault option add *Tabnotebook.raiseSelect false widgetDefault option add *Tabnotebook.auto true widgetDefault option add *Tabnotebook.start 4 widgetDefault option add *Tabnotebook.padX 4 widgetDefault option add *Tabnotebook.padY 4 widgetDefault option add *Tabnotebook.gap overlap widgetDefault option add *Tabnotebook.angle 15 widgetDefault option add *Tabnotebook.tabPos s widgetDefault # # Usual options. # itk::usual Tabnotebook { keep -backdrop -background -borderwidth -cursor -disabledforeground \ -font -foreground -tabbackground -tabforeground } # ------------------------------------------------------------------ # TABNOTEBOOK # ------------------------------------------------------------------ itcl::class iwidgets::Tabnotebook { inherit itk::Widget constructor {args} {} destructor {} itk_option define -borderwidth borderWidth BorderWidth 2 itk_option define -state state State normal itk_option define \ -disabledforeground disabledForeground DisabledForeground #a3a3a3 itk_option define -scrollcommand scrollCommand ScrollCommand {} itk_option define -equaltabs equalTabs EqualTabs true itk_option define -font font Font \ -Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-* itk_option define -width width Width 300 itk_option define -height height Height 150 itk_option define -foreground foreground Foreground Black itk_option define -background background Background #d9d9d9 itk_option define -tabforeground tabForeground TabForeground Black itk_option define -tabbackground tabBackground TabBackground #d9d9d9 itk_option define -backdrop backdrop Backdrop #d9d9d9 itk_option define -margin margin Margin 4 itk_option define -tabborders tabBorders TabBorders true itk_option define -bevelamount bevelAmount BevelAmount 0 itk_option define -raiseselect raiseSelect RaiseSelect false itk_option define -auto auto Auto true itk_option define -start start Start 4 itk_option define -padx padX PadX 4 itk_option define -pady padY PadY 4 itk_option define -gap gap Gap overlap itk_option define -angle angle Angle 15 itk_option define -tabpos tabPos TabPos s public method add { args } public method configure { args } public method childsite { args } public method delete { args } public method index { args } public method insert { index args } public method prev { } public method next { } public method pageconfigure { index args } public method select { index } public method view { args } protected method _reconfigureTabset { } protected method _canvasReconfigure { wid hgt } protected method _pageReconfigure { pageName page wid hgt } private method _getArgs { optList args } private method _redrawBorder { wid hgt } private method _recomputeBorder { } private method _pack { tabPos } private method _resize {newWidth_ newHeight_} private variable _canvasWidth 0 ;# currently tabnote canvas width private variable _canvasHeight 0 ;# currently tabnote canvas height private variable _nbOptList {} ;# list of notebook options available private variable _tsOptList {} ;# list of tabset options available private variable _tabPos s ;# holds -tabPos, because of ordering private variable _borderRecompute false ;# did we dirty border after cfg? private variable _tabsetReconfigure false ;# did we dirty tabsets after cfg? } # ---------------------------------------------------------------------- # CONSTRUCTOR # ---------------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::constructor {args} { # The following conditional added for SF ticket #514222. csmith 9/5/02 if {$::tk_version > 8.3} { component hull configure -borderwidth 0 -padx 0 -pady 0 } else { component hull configure -borderwidth 0 } # # Create the outermost canvas to maintain geometry. # itk_component add canvas { canvas $itk_interior.canvas -highlightthickness 0 } { keep -cursor -background -width -height } bind $itk_component(canvas) <Configure> [itcl::code $this _resize %w %h] # ....................... # Create the NOTEBOOK # itk_component add notebook { iwidgets::Notebook $itk_interior.canvas.notebook } { keep -cursor -background } # # Ouch, create a dummy page, go pageconfigure to get its options # and munge them into a list for later doling by pageconfigure # $itk_component(notebook) add set nbConfigList [$itk_component(notebook) pageconfigure 0] foreach config $nbConfigList { lappend _nbOptList [lindex $config 0] } $itk_component(notebook) delete 0 # # Create the tabset. # itk_component add tabset { iwidgets::Tabset $itk_interior.canvas.tabset \ -command [itcl::code $this component notebook select] } { keep -cursor } eval itk_initialize $args # # Ouch, create a dummy tab, go tabconfigure to get its options # and munge them into a list for later doling by pageconfigure # $itk_component(tabset) add set tsConfigList [$itk_component(tabset) tabconfigure 0] foreach config $tsConfigList { lappend _tsOptList [lindex $config 0] } $itk_component(tabset) delete 0 bind $itk_component(tabset) <Configure> \ [itcl::code $this _reconfigureTabset] _pack $_tabPos $itk_component(hull) configure -width [cget -width] -height [cget -height] } proc ::iwidgets::tabnotebook {pathName args} { uplevel ::iwidgets::Tabnotebook $pathName $args } # ------------------------------------------------------------- # DESTRUCTOR: destroy the Tabnotebook # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::destructor {} { } # ---------------------------------------------------------------------- # OPTION -borderwidth # # Thickness of Notebook Border # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::borderwidth { if {$itk_option(-borderwidth) != {}} { #_recomputeBorder set _borderRecompute true } } # ---------------------------------------------------------------------- # OPTION -state # # State of the tabs in the tab notebook: normal or disabled # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::state { if {$itk_option(-state) != {}} { $itk_component(tabset) configure -state $itk_option(-state) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -disabledforeground # # Specifies a foreground color to use for displaying a # tab's label when its state is disabled. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::disabledforeground { if {$itk_option(-disabledforeground) != {}} { $itk_component(tabset) configure \ -disabledforeground $itk_option(-disabledforeground) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -scrollcommand # # Standard option. See options man pages. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::scrollcommand { if {$itk_option(-scrollcommand) != {}} { $itk_component(notebook) \ configure -scrollcommand $itk_option(-scrollcommand) } } # ---------------------------------------------------------------------- # OPTION -equaltabs # # Specifies whether to force tabs to be equal sized or not. # A value of true means constrain tabs to be equal sized. # A value of false allows each tab to size based on the text # label size. The value may have any of the forms accepted by # the Tcl_GetBoolean, such as true, false, 0, 1, yes, or no. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::equaltabs { if {$itk_option(-equaltabs) != {}} { $itk_component(tabset) \ configure -equaltabs $itk_option(-equaltabs) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -font # # Font for tab labels when they are set to text (-label set) # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::font { if {$itk_option(-font) != {}} { $itk_component(tabset) configure -font $itk_option(-font) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -width # # Width of the Tabnotebook # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::width { if {$itk_option(-width) != {}} { $itk_component(canvas) configure -width $itk_option(-width) #_recomputeBorder set _borderRecompute true } } # ---------------------------------------------------------------------- # OPTION -height # # Height of the Tabnotebook # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::height { if {$itk_option(-height) != {}} { $itk_component(canvas) configure -height $itk_option(-height) #_recomputeBorder set _borderRecompute true } } # ---------------------------------------------------------------------- # OPTION -foreground # # Specifies a foreground color to use for displaying a page # and its associated tab label (this is the selected state). # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::foreground { if {$itk_option(-foreground) != {}} { $itk_component(tabset) configure \ -selectforeground $itk_option(-foreground) } } # ---------------------------------------------------------------------- # OPTION -background # # Specifies a background color to use for displaying a page # and its associated tab bg (this is the selected state). # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::background { if {$itk_option(-background) != {}} { $itk_component(tabset) configure \ -selectbackground $itk_option(-background) #_recomputeBorder set _borderRecompute true } } # ---------------------------------------------------------------------- # OPTION -tabforeground # # Specifies a foreground color to use for displaying tab labels # when they are in their unselected state. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::tabforeground { if {$itk_option(-tabforeground) != {}} { $itk_component(tabset) configure \ -foreground $itk_option(-tabforeground) } } # ---------------------------------------------------------------------- # OPTION -tabbackground # # Specifies a background color to use for displaying tab backgrounds # when they are in their unselected state. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::tabbackground { if {$itk_option(-tabbackground) != {}} { $itk_component(tabset) configure \ -background $itk_option(-tabbackground) } } # ---------------------------------------------------------------------- # OPTION -backdrop # # Specifies a background color to use when filling in the # area behind the tabs. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::backdrop { if {$itk_option(-backdrop) != {}} { $itk_component(tabset) configure \ -backdrop $itk_option(-backdrop) } } # ---------------------------------------------------------------------- # OPTION -margin # # Sets the backdrop margin between tab edge and backdrop edge # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::margin { if {$itk_option(-margin) != {}} { $itk_component(tabset) configure -margin $itk_option(-margin) } } # ---------------------------------------------------------------------- # OPTION -tabborders # # Boolean that specifies whether to draw the borders of # the unselected tabs (tabs in background) # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::tabborders { if {$itk_option(-tabborders) != {}} { $itk_component(tabset) \ configure -tabborders $itk_option(-tabborders) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -bevelamount # # Specifies pixel size of tab corners. 0 means no corners. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::bevelamount { if {$itk_option(-bevelamount) != {}} { $itk_component(tabset) \ configure -bevelamount $itk_option(-bevelamount) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -raiseselect # # Sets whether to raise selected tabs # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::raiseselect { if {$itk_option(-raiseselect) != {}} { $itk_component(tabset) \ configure -raiseselect $itk_option(-raiseselect) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -auto # # Determines whether pages are automatically unpacked and # packed when pages get selected. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::auto { if {$itk_option(-auto) != {}} { $itk_component(notebook) configure -auto $itk_option(-auto) } } # ---------------------------------------------------------------------- # OPTION -start # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::start { if {$itk_option(-start) != {}} { $itk_component(tabset) configure \ -start $itk_option(-start) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -padx # # Specifies a non-negative value indicating how much extra space # to request for a tab around its label in the X-direction. # When computing how large a window it needs, the tab will add # this amount to the width it would normally need The tab will # end up with extra internal space to the left and right of its # text label. This value may have any of the forms acceptable # to Tk_GetPixels. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::padx { if {$itk_option(-padx) != {}} { $itk_component(tabset) configure -padx $itk_option(-padx) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -pady # # Specifies a non-negative value indicating how much extra space to # request for a tab around its label in the Y-direction. When computing # how large a window it needs, the tab will add this amount to the # height it would normally need The tab will end up with extra internal # space to the top and bot tom of its text label. This value may have # any of the forms acceptable to Tk_GetPixels. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::pady { if {$itk_option(-pady) != {}} { $itk_component(tabset) configure -pady $itk_option(-pady) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -gap # # Specifies the amount of pixel space to place between each tab. # Value may be any pixel offset value. In addition, a special keyword # 'overlap' can be used as the value to achieve a standard overlap of # tabs. This value may have any of the forms acceptable to Tk_GetPixels. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::gap { if {$itk_option(-gap) != {}} { $itk_component(tabset) configure -gap $itk_option(-gap) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -angle # # Specifes the angle of slope from the inner edge to the outer edge # of the tab. An angle of 0 specifies square tabs. Valid ranges are # 0 to 45 degrees inclusive. Default is 15 degrees. If tabPos is # e or w, this option is ignored. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::angle { if {$itk_option(-angle) != {}} { $itk_component(tabset) configure -angle $itk_option(-angle) #_reconfigureTabset set _tabsetReconfigure true } } # ---------------------------------------------------------------------- # OPTION -tabpos # # Specifies the location of the set of tabs in relation to the # Notebook area. Must be n, s, e, or w. Defaults to s. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabnotebook::tabpos { if {$itk_option(-tabpos) != {}} { set _tabPos $itk_option(-tabpos) $itk_component(tabset) configure \ -tabpos $itk_option(-tabpos) pack forget $itk_component(canvas) pack forget $itk_component(tabset) pack forget $itk_component(notebook) _pack $_tabPos } } # ------------------------------------------------------------- # METHOD: configure ?<option>? ?<value> <option> <value>...? # # Acts as an addendum to the itk::Widget::configure method. # # Checks the _recomputeBorder flag and the _tabsetReconfigure to # determine what work has been batched to after the configure # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::configure { args } { set result [eval itk::Archetype::configure $args] # check for flags then do update... if { $_borderRecompute == "true" } { _recomputeBorder set _borderRecompute false } if { $_tabsetReconfigure == "true" } { _reconfigureTabset set _tabsetReconfigure false } return $result } # ------------------------------------------------------------- # METHOD: add ?<option> <value>...? # # Creates a page and appends it to the list of pages. # processes pageconfigure for the page added. # # Returns the page's childsite frame # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::add { args } { # The args list should be an even # of params, if not then # prob missing value for last item in args list. Signal error. set len [llength $args] if { [expr {$len % 2}] } { error "value for \"[lindex $args [expr {$len - 1}]]\" missing" } # pick out the notebook args set nbArgs [eval _getArgs [list $_nbOptList] $args] set pageName [eval $itk_component(notebook) add $nbArgs] # pick out the tabset args set tsArgs [eval _getArgs [list $_tsOptList] $args] eval $itk_component(tabset) add $tsArgs set page [index end] bind $pageName <Configure> \ [itcl::code $this _pageReconfigure $pageName $page %w %h] return $pageName } # ------------------------------------------------------------- # METHOD: childsite ?<index>? # # If index is supplied, returns the child site widget # corresponding to the page index. If called with no arguments, # returns a list of all child sites # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::childsite { args } { return [eval $itk_component(notebook) childsite $args] } # ------------------------------------------------------------- # METHOD: delete <index1> ?<index2>? # # Deletes a page or range of pages from the notebook # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::delete { args } { eval $itk_component(notebook) delete $args eval $itk_component(tabset) delete $args } # ------------------------------------------------------------- # METHOD: index <index> # # Given an index identifier returns the numeric index of the page # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::index { args } { return [eval $itk_component(notebook) index $args] } # ------------------------------------------------------------- # METHOD: insert <index> ?<option> <value>...? # # Inserts a page before a index. The before page may # be specified as a label or a page position. # # Note that since we use eval to preserve the $args list, # we must use list around $index to keep it together as a unit # # Returns the name of the page's child site # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::insert { index args } { # pick out the notebook args set nbArgs [eval _getArgs [list $_nbOptList] $args] set pageName [eval $itk_component(notebook) insert [list $index] $nbArgs] # pick out the tabset args set tsArgs [eval _getArgs [list $_tsOptList] $args] eval $itk_component(tabset) insert [list $index] $tsArgs return $pageName } # ------------------------------------------------------------- # METHOD: prev # # Selects the previous page. Wraps at first back to last page. # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::prev { } { eval $itk_component(notebook) prev eval $itk_component(tabset) prev } # ------------------------------------------------------------- # METHOD: next # # Selects the next page. Wraps at last back to first page. # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::next { } { eval $itk_component(notebook) next eval $itk_component(tabset) next } # ------------------------------------------------------------- # METHOD: pageconfigure <index> ?<option> <value>...? # # Performs configure on a given page denoted by index. # Index may be a page number or a pattern matching the label # associated with a page. # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::pageconfigure { index args } { set nbArgs [eval _getArgs [list $_nbOptList] $args] set tsArgs [eval _getArgs [list $_tsOptList] $args] set len [llength $args] switch $len { 0 { # Here is the case where they just want to query options set nbConfig \ [eval $itk_component(notebook) pageconfigure $index $nbArgs] set tsConfig \ [eval $itk_component(tabset) tabconfigure $index $tsArgs] # # BUG: this currently just concatenates a page and a tab's # config lists together... We should bias to the Page # since this is what we are using as primary when both?? # # a pageconfigure index -background will return something like: # -background background Background #9D008FF583C1 gray70 \ # -background background background white gray 70 # return [concat $nbConfig $tsConfig] } 1 { # Here is the case where they are asking for only one # one options value... need to figure out which one # (page or tab) can service this. Then only return # that one's result. if { [llength $nbArgs] != 0 } { return [eval $itk_component(notebook) \ pageconfigure $index $nbArgs] } elseif { [llength $tsArgs] != 0 } { return [eval $itk_component(tabset) \ tabconfigure $index $tsArgs] } else { error "unknown option \"$args\"" } } default { # pick out the notebook args set nbConfig \ [eval $itk_component(notebook) \ pageconfigure [list $index] $nbArgs] # pick out the tabset args set tsConfig \ [eval $itk_component(tabset) \ tabconfigure [list $index] $tsArgs] return "" #return [concat $nbConfig $tsConfig] } } } # ------------------------------------------------------------- # METHOD: select index # # Select a page by index # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::select { index } { $itk_component(notebook) select $index $itk_component(tabset) select $index } # ------------------------------------------------------------- # METHOD: view # # Return the current page # # view index # # Selects the page denoted by index to be current page # # view 'moveto' fraction # # Selects the page by using fraction amount # # view 'scroll' num what # # Selects the page by using num as indicator of next or # previous # # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::view { args } { eval $itk_component(notebook) view $args $itk_component(tabset) select [index select] } # ------------------------------------------------------------- # PRIVATE METHOD: _getArgs # # Given an optList returned from a configure on an object and # given a candidate argument list, peruse throught the optList # and build a new argument list with only those options found # in optList. # # This is used by the add, insert, and pageconfigure methods. # It is useful for a container kind of class like Tabnotebook # to be smart about args it gets for its concept of a "page" # which is actually a Notebook Page and a Tabset Tab. # # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::_getArgs { optList args } { set len [llength $args] set retArgs {} for {set i 0} {$i < $len} {incr i} { # get the option for this pair set opt [lindex $args $i] # move ahead to the value incr i # option exists! if { [lsearch -exact $optList $opt] != -1} { lappend retArgs $opt if {$i < [llength $args]} { lappend retArgs [lindex $args $i] } # option does not exist } } return $retArgs } # ------------------------------------------------------------- # PROTECTED METHOD: _reconfigureTabset # # bound to the tabset reconfigure... We call our canvas # reconfigure as if the canvas resized, it then configures # the tabset correctly. # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::_reconfigureTabset { } { _canvasReconfigure $_canvasWidth $_canvasHeight } # ------------------------------------------------------------- # PROTECTED METHOD: _canvasReconfigure # # bound to window Reconfigure event of the canvas # keeps the tabset area stretched in its major dimension. # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::_canvasReconfigure { wid hgt } { if { $_tabPos == "n" || $_tabPos == "s" } { $itk_component(tabset) configure -width $wid } else { $itk_component(tabset) configure -height $hgt } set _canvasWidth $wid set _canvasHeight $hgt _redrawBorder $wid $hgt } # ------------------------------------------------------------- # PRIVATE METHOD: _redrawBorder # # called by methods when the packing changes, borderwidths, etc. # and height # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::_redrawBorder { wid hgt } { # Get the top of the Notebook area... set nbTop [winfo y $itk_component(notebook)] set canTop [expr {$nbTop - $itk_option(-borderwidth)}] $itk_component(canvas) delete BORDER if { $itk_option(-borderwidth) > 0 } { # For south, east, and west -- draw the top/north edge if { $_tabPos != "n" } { $itk_component(canvas) create line \ [expr {floor(0 + ($itk_option(-borderwidth)/2.0))}] \ [expr {floor(0 + ($itk_option(-borderwidth)/2.0))}] \ $wid \ [expr {floor(0 + ($itk_option(-borderwidth)/2.0))}] \ -width $itk_option(-borderwidth) \ -fill [iwidgets::colors::topShadow $itk_option(-background)] \ -tags BORDER } # For north, east, and west -- draw the bottom/south edge if { $_tabPos != "s" } { $itk_component(canvas) create line \ [expr {floor(0 + ($itk_option(-borderwidth)/2.0))}] \ [expr {floor($hgt - ($itk_option(-borderwidth)/2.0))}] \ [expr {floor($wid - ($itk_option(-borderwidth)/2.0))}] \ [expr {floor($hgt - ($itk_option(-borderwidth)/2.0))}] \ -width $itk_option(-borderwidth) \ -fill [iwidgets::colors::bottomShadow $itk_option(-background)] \ -tags BORDER } # For north, south, and east -- draw the left/west edge if { $_tabPos != "w" } { $itk_component(canvas) create line \ [expr {floor(0 + ($itk_option(-borderwidth)/2.0))}] \ 0 \ [expr {floor(0 + ($itk_option(-borderwidth)/2.0))}] \ $hgt \ -width $itk_option(-borderwidth) \ -fill [iwidgets::colors::topShadow $itk_option(-background)] \ -tags BORDER } # For north, south, and west -- draw the right/east edge if { $_tabPos != "e" } { $itk_component(canvas) create line \ [expr {floor($wid - ($itk_option(-borderwidth)/2.0))}] \ [expr {floor(0 + ($itk_option(-borderwidth)/2.0))}] \ [expr {floor($wid - ($itk_option(-borderwidth)/2.0))}] \ $hgt \ -width $itk_option(-borderwidth) \ -fill [iwidgets::colors::bottomShadow $itk_option(-background)] \ -tags BORDER } } } # ------------------------------------------------------------- # PRIVATE METHOD: _recomputeBorder # # Based on current width and height of our canvas, repacks # the notebook with padding for borderwidth, and calls # redraw border method # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::_recomputeBorder { } { set wid [winfo width $itk_component(canvas)] set hgt [winfo height $itk_component(canvas)] _pack $_tabPos _redrawBorder $wid $hgt } # ------------------------------------------------------------- # PROTECTED METHOD: _pageReconfigure # # This method will eventually reconfigure the tab notebook's # notebook area to contain the resized child site # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::_pageReconfigure { pageName page wid hgt } { } # ------------------------------------------------------------- # PRIVATE METHOD: _pack # # This method packs the notebook and tabset correctly according # to the current $tabPos # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::_pack { tabPos } { pack $itk_component(canvas) -fill both -expand yes pack propagate $itk_component(canvas) no switch $tabPos { n { # north pack $itk_component(tabset) \ -anchor nw \ -fill x \ -expand no pack $itk_component(notebook) \ -fill both \ -expand yes \ -padx $itk_option(-borderwidth) \ -pady $itk_option(-borderwidth) \ -side bottom } s { # south pack $itk_component(notebook) \ -anchor nw \ -fill both \ -expand yes \ -padx $itk_option(-borderwidth) \ -pady $itk_option(-borderwidth) pack $itk_component(tabset) \ -side left \ -fill x \ -expand yes } w { # west pack $itk_component(tabset) \ -anchor nw \ -side left \ -fill y \ -expand no pack $itk_component(notebook) \ -anchor nw \ -side left \ -fill both \ -expand yes \ -padx $itk_option(-borderwidth) \ -pady $itk_option(-borderwidth) } e { # east pack $itk_component(notebook) \ -side left \ -anchor nw \ -fill both \ -expand yes \ -padx $itk_option(-borderwidth) \ -pady $itk_option(-borderwidth) pack $itk_component(tabset) \ -fill y \ -expand yes } } set wid [winfo width $itk_component(canvas)] set hgt [winfo height $itk_component(canvas)] _redrawBorder $wid $hgt } # ------------------------------------------------------------- # PRIVATE METHOD: _resize # # This method added by csmith, 5/1/01, to fix a bug with the # geometry of the tabnotebook. The hull component's geometry # was not being updated properly on <Configure> events. # ------------------------------------------------------------- itcl::body iwidgets::Tabnotebook::_resize {newWidth_ newHeight_} { _canvasReconfigure $newWidth_ $newHeight_ # csmith: 9/14/01 - Commenting out the following code due to # SF ticket 461471, which is a dup of the original 452803. Since I # can't remember the exact problem surrounding the need to add # the _resize method, I'm going to do an undo here, leaving the # code for future reference if needed. Should the original problem # arise again I will reinvestigate the need for _resize. # # after idle \ # "$this component hull configure -width $newWidth_ -height $newHeight_" } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/checkbox.itk�����������������������������������������������������������������0000644�0036047�0045461�00000027403�07336537776�015677� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Checkbox # ---------------------------------------------------------------------- # Implements a checkbuttonbox. Supports adding, inserting, deleting, # selecting, and deselecting of checkbuttons by tag and index. # # ---------------------------------------------------------------------- # AUTHOR: John A. Tucker EMAIL: jatucker@spd.dsccc.com # # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Use option database to override default resources of base classes. # option add *Checkbox.labelMargin 10 widgetDefault option add *Checkbox.labelFont \ "-Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-*" widgetDefault option add *Checkbox.labelPos nw widgetDefault option add *Checkbox.borderWidth 2 widgetDefault option add *Checkbox.relief groove widgetDefault # # Usual options. # itk::usual Checkbox { keep -background -borderwidth -cursor -foreground -labelfont } # ------------------------------------------------------------------ # CHECKBOX # ------------------------------------------------------------------ itcl::class iwidgets::Checkbox { inherit iwidgets::Labeledframe constructor {args} {} itk_option define -orient orient Orient vertical public { method add {tag args} method insert {index tag args} method delete {index} method get {{index ""}} method index {index} method select {index} method deselect {index} method flash {index} method toggle {index} method buttonconfigure {index args} } private { method gettag {index} ;# Get the tag of the checkbutton associated ;# with a numeric index variable _unique 0 ;# Unique id for choice creation. variable _buttons {} ;# List of checkbutton tags. common buttonVar ;# Array of checkbutton "-variables" } } # # Provide a lowercased access method for the Checkbox class. # proc ::iwidgets::checkbox {pathName args} { uplevel ::iwidgets::Checkbox $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::constructor {args} { eval itk_initialize $args } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -orient # # Allows the user to orient the checkbuttons either horizontally # or vertically. Added by Chad Smith (csmith@adc.com) 3/10/00. # ------------------------------------------------------------------ itcl::configbody iwidgets::Checkbox::orient { if {$itk_option(-orient) == "horizontal"} { foreach tag $_buttons { pack $itk_component($tag) -side left -anchor nw -padx 4 -expand 1 } } elseif {$itk_option(-orient) == "vertical"} { foreach tag $_buttons { pack $itk_component($tag) -side top -anchor w -padx 4 -expand 0 } } else { error "Bad orientation: $itk_option(-orient). Should be\ \"horizontal\" or \"vertical\"." } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: index index # # Searches the checkbutton tags in the checkbox for the one with the # requested tag, numerical index, or keyword "end". Returns the # choices's numerical index if found, otherwise error. # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::index {index} { if {[llength $_buttons] > 0} { if {[regexp {(^[0-9]+$)} $index]} { if {$index < [llength $_buttons]} { return $index } else { error "Checkbox index \"$index\" is out of range" } } elseif {$index == "end"} { return [expr {[llength $_buttons] - 1}] } else { if {[set idx [lsearch $_buttons $index]] != -1} { return $idx } error "bad Checkbox index \"$index\": must be number, end,\ or pattern" } } else { error "Checkbox \"$itk_component(hull)\" has no checkbuttons" } } # ------------------------------------------------------------------ # METHOD: add tag ?option value option value ...? # # Add a new tagged checkbutton to the checkbox at the end. The method # takes additional options which are passed on to the checkbutton # constructor. These include most of the typical checkbutton # options. The tag is returned. # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::add {tag args} { itk_component add $tag { eval checkbutton $itk_component(childsite).cb[incr _unique] \ -variable [list [itcl::scope buttonVar($this,$tag)]] \ -anchor w \ -justify left \ -highlightthickness 0 \ $args } { usual keep -command -disabledforeground -selectcolor -state ignore -highlightthickness -highlightcolor rename -font -labelfont labelFont Font } # Redraw the buttons with the proper orientation. if {$itk_option(-orient) == "vertical"} { pack $itk_component($tag) -side top -anchor w -padx 4 -expand 0 } else { pack $itk_component($tag) -side left -anchor nw -expand 1 } lappend _buttons $tag return $tag } # ------------------------------------------------------------------ # METHOD: insert index tag ?option value option value ...? # # Insert the tagged checkbutton in the checkbox just before the # one given by index. Any additional options are passed on to the # checkbutton constructor. These include the typical checkbutton # options. The tag is returned. # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::insert {index tag args} { itk_component add $tag { eval checkbutton $itk_component(childsite).cb[incr _unique] \ -variable [list [itcl::scope buttonVar($this,$tag)]] \ -anchor w \ -justify left \ -highlightthickness 0 \ $args } { usual ignore -highlightthickness -highlightcolor rename -font -labelfont labelFont Font } set index [index $index] set before [lindex $_buttons $index] set _buttons [linsert $_buttons $index $tag] pack $itk_component($tag) -anchor w -padx 4 -before $itk_component($before) return $tag } # ------------------------------------------------------------------ # METHOD: delete index # # Delete the specified checkbutton. # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::delete {index} { set tag [gettag $index] set index [index $index] destroy $itk_component($tag) set _buttons [lreplace $_buttons $index $index] if { [info exists buttonVar($this,$tag)] == 1 } { unset buttonVar($this,$tag) } } # ------------------------------------------------------------------ # METHOD: select index # # Select the specified checkbutton. # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::select {index} { set tag [gettag $index] #----------------------------------------------------------- # BUG FIX: csmith (Chad Smith: csmith@adc.com), 3/30/99 #----------------------------------------------------------- # This method should only invoke the checkbutton if it's not # already selected. Check its associated variable, and if # it's set, then just ignore and return. #----------------------------------------------------------- if {[set [itcl::scope buttonVar($this,$tag)]] == [[component $tag] cget -onvalue]} { return } $itk_component($tag) invoke } # ------------------------------------------------------------------ # METHOD: toggle index # # Toggle a specified checkbutton between selected and unselected # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::toggle {index} { set tag [gettag $index] $itk_component($tag) toggle } # ------------------------------------------------------------------ # METHOD: get # # Return the value of the checkbutton with the given index, or a # list of all checkbutton values in increasing order by index. # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::get {{index ""}} { set result {} if {$index == ""} { foreach tag $_buttons { if {$buttonVar($this,$tag)} { lappend result $tag } } } else { set tag [gettag $index] set result $buttonVar($this,$tag) } return $result } # ------------------------------------------------------------------ # METHOD: deselect index # # Deselect the specified checkbutton. # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::deselect {index} { set tag [gettag $index] $itk_component($tag) deselect } # ------------------------------------------------------------------ # METHOD: flash index # # Flash the specified checkbutton. # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::flash {index} { set tag [gettag $index] $itk_component($tag) flash } # ------------------------------------------------------------------ # METHOD: buttonconfigure index ?option? ?value option value ...? # # Configure a specified checkbutton. This method allows configuration # of checkbuttons from the Checkbox level. The options may have any # of the values accepted by the add method. # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::buttonconfigure {index args} { set tag [gettag $index] eval $itk_component($tag) configure $args } # ------------------------------------------------------------------ # METHOD: gettag index # # Return the tag of the checkbutton associated with a specified # numeric index # ------------------------------------------------------------------ itcl::body iwidgets::Checkbox::gettag {index} { return [lindex $_buttons [index $index]] } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/spinner.itk������������������������������������������������������������������0000644�0036047�0045461�00000036671�07337265305�015561� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spinner # ---------------------------------------------------------------------- # Implements a spinner widget. The Spinner is comprised of an # EntryField plus up and down arrow buttons. # Spinner is meant to be used as a base class for creating more # specific spinners such as SpinInt.itk # Arrows may be drawn horizontally or vertically. # User may define arrow behavior or accept the default arrow behavior. # # ---------------------------------------------------------------------- # AUTHOR: Sue Yockey Phone: (214) 519-2517 # E-mail: syockey@spd.dsccc.com # yockey@acm.org # # @(#) $Id: spinner.itk,v 1.3 2001/08/17 19:04:37 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Spinner { keep -background -borderwidth -cursor -foreground -highlightcolor \ -highlightthickness -insertbackground -insertborderwidth \ -insertofftime -insertontime -insertwidth -labelfont \ -selectbackground -selectborderwidth -selectforeground \ -textbackground -textfont } # ------------------------------------------------------------------ # SPINNER # ------------------------------------------------------------------ itcl::class iwidgets::Spinner { inherit iwidgets::Entryfield constructor {args} {} destructor {} itk_option define -arroworient arrowOrient Orient vertical itk_option define -textfont textFont \ Font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* itk_option define -borderwidth borderWidth BorderWidth 2 itk_option define -highlightthickness highlightThickness \ HighlightThickness 2 itk_option define -increment increment Command {} itk_option define -decrement decrement Command {} itk_option define -repeatdelay repeatDelay RepeatDelay 300 itk_option define -repeatinterval repeatInterval RepeatInterval 100 itk_option define -foreground foreground Foreground black public method down {} public method up {} protected method _pushup {} protected method _pushdown {} protected method _relup {} protected method _reldown {} protected method _doup {rate} protected method _dodown {rate} protected method _up {} protected method _down {} protected method _positionArrows {{when later}} protected variable _interior {} protected variable _reposition "" ;# non-null => _positionArrows pending protected variable _uptimer "" ;# non-null => _uptimer pending protected variable _downtimer "" ;# non-null => _downtimer pending } # # Provide a lowercased access method for the Spinner class. # proc ::iwidgets::spinner {pathName args} { uplevel ::iwidgets::Spinner $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::constructor {args} { # # Save off the interior for later use. # set _interior $itk_interior # # Create up arrow button. # itk_component add uparrow { canvas $itk_interior.uparrow -height 10 -width 10 \ -relief raised -highlightthickness 0 } { keep -background -borderwidth } # # Create down arrow button. # itk_component add downarrow { canvas $itk_interior.downarrow -height 10 -width 10 \ -relief raised -highlightthickness 0 } { keep -background -borderwidth } # # Add bindings for button press events on the up and down buttons. # bind $itk_component(uparrow) <ButtonPress-1> [itcl::code $this _pushup] bind $itk_component(uparrow) <ButtonRelease-1> [itcl::code $this _relup] bind $itk_component(downarrow) <ButtonPress-1> [itcl::code $this _pushdown] bind $itk_component(downarrow) <ButtonRelease-1> [itcl::code $this _reldown] eval itk_initialize $args # # When idle, position the arrows. # _positionArrows } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::destructor {} { if {$_reposition != ""} {after cancel $_reposition} if {$_uptimer != ""} {after cancel $_uptimer} if {$_downtimer != ""} {after cancel $_downtimer} } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -arroworient # # Place arrows vertically or horizontally . # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinner::arroworient { _positionArrows } # ------------------------------------------------------------------ # OPTION: -textfont # # Change font, resize arrow buttons. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinner::textfont { _positionArrows } # ------------------------------------------------------------------ # OPTION: -highlightthickness # # Change highlightthickness, resize arrow buttons. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinner::highlightthickness { _positionArrows } # ------------------------------------------------------------------ # OPTION: -borderwidth # # Change borderwidth, resize arrow buttons. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinner::borderwidth { _positionArrows } # ------------------------------------------------------------------ # OPTION: -increment # # Up arrow callback. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinner::increment { if {$itk_option(-increment) == {}} { set itk_option(-increment) [itcl::code $this up] } } # ------------------------------------------------------------------ # OPTION: -decrement # # Down arrow callback. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinner::decrement { if {$itk_option(-decrement) == {}} { set itk_option(-decrement) [itcl::code $this down] } } # ------------------------------------------------------------------ # OPTION: -repeatinterval # # Arrow repeat rate in milliseconds. A repeatinterval of 0 disables # button repeat. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinner::repeatinterval { if {$itk_option(-repeatinterval) < 0} { set itk_option(-repeatinterval) 0 } } # ------------------------------------------------------------------ # OPTION: -repeatdelay # # Arrow repeat delay in milliseconds. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinner::repeatdelay { if {$itk_option(-repeatdelay) < 0} { set itk_option(-repeatdelay) 0 } } # ------------------------------------------------------------------ # OPTION: -foreground # # Set the foreground color of the up and down arrows. Remember # to make sure the "tag" exists before setting them... # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinner::foreground { if { [$itk_component(uparrow) gettags up] != "" } { $itk_component(uparrow) itemconfigure up \ -fill $itk_option(-foreground) } if { [$itk_component(downarrow) gettags down] != "" } { $itk_component(downarrow) itemconfigure down \ -fill $itk_option(-foreground) } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: up # # Up arrow command. Meant to be overloaded by derived class. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::up {} { } # ------------------------------------------------------------------ # METHOD: down # # Down arrow command. Meant to be overloaded by derived class. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::down {} { } # ------------------------------------------------------------------ # PROTECTED METHOD: _positionArrows ?when? # # Draw Arrows for spinner. If "when" is "now", the change is applied # immediately. If it is "later" or it is not specified, then the # change is applied later, when the application is idle. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::_positionArrows {{when later}} { if {$when == "later"} { if {$_reposition == ""} { set _reposition [after idle [itcl::code $this _positionArrows now]] } return } elseif {$when != "now"} { error "bad option \"$when\": should be now or later" } set _reposition "" set bdw [cget -borderwidth] # # Based on the orientation of the arrows, pack them accordingly and # determine the width and height of the spinners. For vertical # orientation, it is really tight in the y direction, so we'll take # advantage of the highlightthickness. Horizontal alignment has # plenty of space vertically, thus we'll ignore the thickness. # switch $itk_option(-arroworient) { vertical { grid $itk_component(uparrow) -row 0 -column 0 grid $itk_component(downarrow) -row 1 -column 0 set totalHgt [winfo reqheight $itk_component(entry)] set spinHgt [expr {$totalHgt / 2}] set spinWid [expr {round ($spinHgt * 1.6)}] } horizontal { grid $itk_component(uparrow) -row 0 -column 0 grid $itk_component(downarrow) -row 0 -column 1 set spinHgt [expr {[winfo reqheight $itk_component(entry)] - \ (2 * [$itk_component(entry) cget -highlightthickness])}] set spinWid $spinHgt } default { error "bad orientation option \"$itk_option(-arroworient)\",\ should be horizontal or vertical" } } # # Configure the width and height of the spinners minus the borderwidth. # Next delete the previous spinner polygons and create new ones. # $itk_component(uparrow) config \ -height [expr {$spinHgt - (2 * $bdw)}] \ -width [expr {$spinWid - (2 * $bdw)}] $itk_component(uparrow) delete up $itk_component(uparrow) create polygon \ [expr {$spinWid / 2}] $bdw \ [expr {$spinWid - $bdw - 1}] [expr {$spinHgt - $bdw -1}] \ [expr {$bdw + 1}] [expr {$spinHgt - $bdw - 1}] \ -fill $itk_option(-foreground) -tags up $itk_component(downarrow) config \ -height [expr {$spinHgt - (2 * $bdw)}] \ -width [expr {$spinWid - (2 * $bdw)}] $itk_component(downarrow) delete down $itk_component(downarrow) create polygon \ [expr {$spinWid / 2}] [expr {($spinHgt - $bdw) - 1}] \ [expr {$bdw + 2}] [expr {$bdw + 1}] \ [expr {$spinWid - $bdw - 2}] [expr {$bdw + 1}] \ -fill $itk_option(-foreground) -tags down } # ------------------------------------------------------------------ # PRIVATE METHOD: _pushup # # Up arrow button press event. Call _doup with repeatdelay. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::_pushup {} { $itk_component(uparrow) config -relief sunken _doup $itk_option(-repeatdelay) } # ------------------------------------------------------------------ # PRIVATE METHOD: _pushdown # # Down arrow button press event. Call _dodown with repeatdelay. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::_pushdown {} { $itk_component(downarrow) config -relief sunken _dodown $itk_option(-repeatdelay) } # ------------------------------------------------------------------ # PRIVATE METHOD: _doup # # Call _up and post to do another one after "rate" milliseconds if # repeatinterval > 0. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::_doup {rate} { _up if {$itk_option(-repeatinterval) > 0} { set _uptimer [after $rate [itcl::code $this _doup $itk_option(-repeatinterval)]] } } # ------------------------------------------------------------------ # PRIVATE METHOD: _dodown # # Call _down and post to do another one after "rate" milliseconds if # repeatinterval > 0. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::_dodown {rate} { _down if {$itk_option(-repeatinterval) > 0} { set _downtimer \ [after $rate [itcl::code $this _dodown $itk_option(-repeatinterval)]] } } # ------------------------------------------------------------------ # PRIVATE METHOD: _relup # # Up arrow button release event. Cancel pending up timer. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::_relup {} { $itk_component(uparrow) config -relief raised if {$_uptimer != ""} { after cancel $_uptimer set _uptimer "" } } # ------------------------------------------------------------------ # PRIVATE METHOD: _reldown # # Up arrow button release event. Cancel pending down timer. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::_reldown {} { $itk_component(downarrow) config -relief raised if {$_downtimer != ""} { after cancel $_downtimer set _downtimer "" } } # ------------------------------------------------------------------ # PRIVATE METHOD: _up # # Up arrow button press event. Call defined increment command. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::_up {} { uplevel #0 $itk_option(-increment) } # ------------------------------------------------------------------ # PRIVATE METHOD: _down # # Down arrow button press event. Call defined decrement command. # ------------------------------------------------------------------ itcl::body iwidgets::Spinner::_down {} { uplevel #0 $itk_option(-decrement) } �����������������������������������������������������������������������iwidgets-4.1.1/generic/radiobox.itk�����������������������������������������������������������������0000644�0036047�0045461�00000036205�07437072653�015706� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Radiobox # ---------------------------------------------------------------------- # Implements a radiobuttonbox. Supports adding, inserting, deleting, # selecting, and deselecting of radiobuttons by tag and index. # # ---------------------------------------------------------------------- # AUTHOR: Michael J. McLennan EMAIL: mmclennan@lucent.com # Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) $Id: radiobox.itk,v 1.8 2002/02/27 05:59:07 mgbacke Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Radiobox { keep -background -borderwidth -cursor -disabledforeground \ -foreground -labelfont -selectcolor } # ------------------------------------------------------------------ # RADIOBOX # ------------------------------------------------------------------ itcl::class iwidgets::Radiobox { inherit iwidgets::Labeledframe constructor {args} {} destructor {} itk_option define -disabledforeground \ disabledForeground DisabledForeground {} itk_option define -selectcolor selectColor Background {} itk_option define -command command Command {} itk_option define -orient orient Orient vertical public { method add {tag args} method buttonconfigure {index args} method component {{name ""} args} method delete {index} method deselect {index} method flash {index} method get {} method index {index} method insert {index tag args} method select {index} } protected method _command { name1 name2 opt } private { method gettag {index} ;# Get the tag of the checkbutton associated ;# with a numeric index method _rearrange {} ;# List of radiobutton tags. variable _buttons {} ;# List of radiobutton tags. common _modes ;# Current selection. variable _unique 0 ;# Unique id for choice creation. } } # # Provide a lowercased access method for the Radiobox class. # proc ::iwidgets::radiobox {pathName args} { uplevel ::iwidgets::Radiobox $pathName $args } # # Use option database to override default resources of base classes. # option add *Radiobox.labelMargin 10 widgetDefault option add *Radiobox.labelFont \ "-Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-*" widgetDefault option add *Radiobox.labelPos nw widgetDefault option add *Radiobox.borderWidth 2 widgetDefault option add *Radiobox.relief groove widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::constructor {args} { # # Initialize the _modes array element prior to setting the trace. This # prevents the -command command (if defined) from being triggered when # the first radiobutton is added via the add method. # set _modes($this) {} trace variable [itcl::scope _modes($this)] w [itcl::code $this _command] grid columnconfigure $itk_component(childsite) 0 -weight 1 eval itk_initialize $args } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::destructor { } { trace vdelete [itcl::scope _modes($this)] w [itcl::code $this _command] catch {unset _modes($this)} } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -command # # Specifies a command to be evaluated upon change in the radiobox # ------------------------------------------------------------------ itcl::configbody iwidgets::Radiobox::command {} # ------------------------------------------------------------------ # OPTION: -orient # # Allows the user to orient the radiobuttons either horizontally # or vertically. # ------------------------------------------------------------------ itcl::configbody iwidgets::Radiobox::orient { if {$itk_option(-orient) == "horizontal" || $itk_option(-orient) == "vertical"} { _rearrange } else { error "Bad orientation: $itk_option(-orient). Should be\ \"horizontal\" or \"vertical\"." } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: index index # # Searches the radiobutton tags in the radiobox for the one with the # requested tag, numerical index, or keyword "end". Returns the # choices's numerical index if found, otherwise error. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::index {index} { if {[llength $_buttons] > 0} { if {[regexp {(^[0-9]+$)} $index]} { if {$index < [llength $_buttons]} { return $index } else { error "Radiobox index \"$index\" is out of range" } } elseif {$index == "end"} { return [expr {[llength $_buttons] - 1}] } else { if {[set idx [lsearch $_buttons $index]] != -1} { return $idx } error "bad Radiobox index \"$index\": must be number, end,\ or pattern" } } else { error "Radiobox \"$itk_component(hull)\" has no radiobuttons" } } # ------------------------------------------------------------------ # METHOD: add tag ?option value option value ...? # # Add a new tagged radiobutton to the radiobox at the end. The method # takes additional options which are passed on to the radiobutton # constructor. These include most of the typical radiobutton # options. The tag is returned. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::add {tag args} { set options {-value -variable} foreach option $options { if {[lsearch $args $option] != -1} { error "Error: specifying values for radiobutton component options\ \"-value\" and\n \"-variable\" is disallowed. The Radiobox must\ use these options when\n adding radiobuttons." } } itk_component add $tag { eval radiobutton $itk_component(childsite).rb[incr _unique] \ -variable [list [itcl::scope _modes($this)]] \ -anchor w \ -justify left \ -highlightthickness 0 \ -value $tag $args } { usual keep -state ignore -highlightthickness -highlightcolor rename -font -labelfont labelFont Font } lappend _buttons $tag grid $itk_component($tag) after idle [itcl::code $this _rearrange] return $tag } # ------------------------------------------------------------------ # METHOD: insert index tag ?option value option value ...? # # Insert the tagged radiobutton in the radiobox just before the # one given by index. Any additional options are passed on to the # radiobutton constructor. These include the typical radiobutton # options. The tag is returned. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::insert {index tag args} { set options {-value -variable} foreach option $options { if {[lsearch $args $option] != -1} { error "Error: specifying values for radiobutton component options\ \"-value\" and\n \"-variable\" is disallowed. The Radiobox must\ use these options when\n adding radiobuttons." } } itk_component add $tag { eval radiobutton $itk_component(childsite).rb[incr _unique] \ -variable [list [itcl::scope _modes($this)]] \ -highlightthickness 0 \ -anchor w \ -justify left \ -value $tag $args } { usual ignore -highlightthickness -highlightcolor rename -font -labelfont labelFont Font } set index [index $index] set before [lindex $_buttons $index] set _buttons [linsert $_buttons $index $tag] grid $itk_component($tag) after idle [itcl::code $this _rearrange] return $tag } # ------------------------------------------------------------------ # METHOD: _rearrange # # Rearrange the buttons in the childsite frame using the grid # geometry manager. This method was modified by Chad Smith on 3/9/00 # to take into consideration the newly added -orient config option. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::_rearrange {} { if {[set count [llength $_buttons]] > 0} { if {$itk_option(-orient) == "vertical"} { set row 0 foreach tag $_buttons { grid configure $itk_component($tag) -column 0 -row $row -sticky nw grid rowconfigure $itk_component(childsite) $row -weight 0 incr row } grid rowconfigure $itk_component(childsite) [expr {$count-1}] \ -weight 1 } else { set col 0 foreach tag $_buttons { grid configure $itk_component($tag) -column $col -row 0 -sticky nw grid columnconfigure $itk_component(childsite) $col -weight 1 incr col } } } } # ------------------------------------------------------------------ # METHOD: component ?name? ?arg arg arg...? # # This method overrides the base class definition to provide some # error checking. The user is disallowed from modifying the values # of the -value and -variable options for individual radiobuttons. # Addition of this method prompted by SF ticket 227923. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::component {{name ""} args} { if {[lsearch $_buttons $name] != -1} { # See if the user's trying to use the configure method. Note that # because of globbing, as few characters as "co" are expanded to # "config". Similarly, "configu" will expand to "configure". if [regexp {^co+} [lindex $args 0]] { # The user's trying to modify a radiobutton. This is all fine and # dandy unless -value or -variable is being modified. set options {-value -variable} foreach option $options { set index [lsearch $args $option] if {$index != -1} { # If a value is actually specified, throw an error. if {[lindex $args [expr {$index + 1}]] != ""} { error "Error: specifying values for radiobutton component options\ \"-value\" and\n \"-variable\" is disallowed. The Radiobox\ uses these options internally." } } } } } eval chain $name $args } # ------------------------------------------------------------------ # METHOD: delete index # # Delete the specified radiobutton. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::delete {index} { set tag [gettag $index] set index [index $index] destroy $itk_component($tag) set _buttons [lreplace $_buttons $index $index] if {$_modes($this) == $tag} { set _modes($this) {} } after idle [itcl::code $this _rearrange] return } # ------------------------------------------------------------------ # METHOD: select index # # Select the specified radiobutton. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::select {index} { set tag [gettag $index] $itk_component($tag) invoke } # ------------------------------------------------------------------ # METHOD: get # # Return the tag of the currently selected radiobutton. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::get {} { return $_modes($this) } # ------------------------------------------------------------------ # METHOD: deselect index # # Deselect the specified radiobutton. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::deselect {index} { set tag [gettag $index] $itk_component($tag) deselect } # ------------------------------------------------------------------ # METHOD: flash index # # Flash the specified radiobutton. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::flash {index} { set tag [gettag $index] $itk_component($tag) flash } # ------------------------------------------------------------------ # METHOD: buttonconfigure index ?option? ?value option value ...? # # Configure a specified radiobutton. This method allows configuration # of radiobuttons from the Radiobox level. The options may have any # of the values accepted by the add method. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::buttonconfigure {index args} { set tag [gettag $index] eval $itk_component($tag) configure $args } # ------------------------------------------------------------------ # CALLBACK METHOD: _command name1 name2 opt # # Tied to the trace on _modes($this). Whenever our -variable for our # radiobuttons change, this method is invoked. It in turn calls # the user specified tcl script given by -command. # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::_command { name1 name2 opt } { uplevel #0 $itk_option(-command) } # ------------------------------------------------------------------ # METHOD: gettag index # # Return the tag of the checkbutton associated with a specified # numeric index # ------------------------------------------------------------------ itcl::body iwidgets::Radiobox::gettag {index} { return [lindex $_buttons [index $index]] } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/combobox.itk�����������������������������������������������������������������0000644�0036047�0045461�00000132104�13153526747�015702� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Combobox # ---------------------------------------------------------------------- # Implements a Combobox widget. A Combobox has 2 basic styles: simple and # dropdown. Dropdowns display an entry field with an arrow button to the # right of it. When the arrow button is pressed a selectable list of # items is popped up. A simple Combobox displays an entry field and a listbox # just beneath it which is always displayed. In both types, if the user # selects an item in the listbox, the contents of the entry field are # replaced with the text from the selected item. If the Combobox is # editable, the user can type in the entry field and when <Return> is # pressed the item will be inserted into the list. # # WISH LIST: # This section lists possible future enhancements. # # Combobox 1.x: # - convert bindings to bindtags. # # ---------------------------------------------------------------------- # ORIGINAL AUTHOR: John S. Sigler # ---------------------------------------------------------------------- # CURRENT MAINTAINER: Chad Smith EMAIL: csmith@adc.com, itclguy@yahoo.com # # Copyright (c) 1995 John S. Sigler # Copyright (c) 1997 Mitch Gorman # ====================================================================== # Permission is hereby granted, without written agreement and without # license or royalty fees, to use, copy, modify, and distribute this # software and its documentation for any purpose, provided that the # above copyright notice and the following two paragraphs appear in # all copies of this software. # # IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES # ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN # IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # # THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND # FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS # ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO # PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # ====================================================================== # # Default resources. # option add *Combobox.borderWidth 2 widgetDefault option add *Combobox.labelPos wn widgetDefault option add *Combobox.listHeight 150 widgetDefault option add *Combobox.hscrollMode dynamic widgetDefault option add *Combobox.vscrollMode dynamic widgetDefault # # Usual options. # itk::usual Combobox { keep -background -borderwidth -cursor -foreground -highlightcolor \ -highlightthickness -insertbackground -insertborderwidth \ -insertofftime -insertontime -insertwidth -labelfont -popupcursor \ -selectbackground -selectborderwidth -selectforeground \ -textbackground -textfont } # ------------------------------------------------------------------ # COMBOBOX # ------------------------------------------------------------------ itcl::class iwidgets::Combobox { inherit iwidgets::Entryfield constructor {args} {} destructor {} itk_option define -arrowrelief arrowRelief Relief raised itk_option define -completion completion Completion true itk_option define -dropdown dropdown Dropdown true itk_option define -editable editable Editable true itk_option define -grab grab Grab local itk_option define -listheight listHeight Height 150 itk_option define -margin margin Margin 1 itk_option define -popupcursor popupCursor Cursor arrow itk_option define -selectioncommand selectionCommand SelectionCommand {} itk_option define -state state State normal itk_option define -unique unique Unique true public method clear {{component all}} public method curselection {} public method delete {component first {last {}}} public method get {{index {}}} public method getcurselection {} public method insert {component index args} public method invoke {} public method justify {direction} public method see {index} public method selection {option first {last {}}} public method size {} public method sort {{mode ascending}} public method xview {args} public method yview {args} protected method _addToList {} protected method _createComponents {} protected method _deleteList {first {last {}}} protected method _deleteText {first {last {}}} protected method _doLayout {{when later}} protected method _drawArrow {} protected method _dropdownBtnRelease {{window {}} {x 1} {y 1}} protected method _ignoreNextBtnRelease {ignore} protected method _next {} protected method _packComponents {{when later}} protected method _positionList {} protected method _postList {} protected method _previous {} protected method _resizeArrow {} protected method _selectCmd {} protected method _toggleList {} protected method _unpostList {} protected method _commonBindings {} protected method _dropdownBindings {} protected method _simpleBindings {} protected method _listShowing {{val ""}} private method _bs {} private method _lookup {key} private method _slbListbox {} private method _stateSelect {} private variable _doit 0; private variable _inbs 0; private variable _inlookup 0; private variable _currItem {}; ;# current selected item. private variable _ignoreRelease false ;# next button release ignored. private variable _isPosted false; ;# is the dropdown popped up. private variable _repacking {} ;# non-null => _packComponents pending. private variable _grab ;# used to restore grabs private variable _next_prevFLAG 0 ;# Used in _lookup to fix SF Bug 501300 private common _listShowing private common count 0 } # # Provide a lowercase access method for the Combobox class. # proc ::iwidgets::combobox {pathName args} { uplevel ::iwidgets::Combobox $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Combobox::constructor {args} { set _listShowing($this) 0 set _grab(window) "" set _grab(status) "" # combobox is different as all components are created # after determining what the dropdown style is... # configure args eval itk_initialize $args # create components that are dependent on options # (Scrolledlistbox, arrow button) and pack them. if {$count == 0} { image create bitmap downarrow -data { #define down_width 16 #define down_height 16 static unsigned char down_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0xf8, 0x3f, 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; } image create bitmap uparrow -data { #define up_width 16 #define up_height 16 static unsigned char up_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc0, 0x01, 0xe0, 0x03, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; } } incr count _doLayout } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Combobox::destructor {} { # catch any repacking that may be waiting for idle time if {$_repacking != ""} { after cancel $_repacking } incr count -1 if {$count == 0} { image delete uparrow image delete downarrow } } # ================================================================ # OPTIONS # ================================================================ # -------------------------------------------------------------------- # OPTION: -arrowrelief # # Relief style used on the arrow button. # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::arrowrelief {} # -------------------------------------------------------------------- # OPTION: -completion # # Relief style used on the arrow button. # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::completion { switch -- $itk_option(-completion) { 0 - no - false - off { } 1 - yes - true - on { } default { error "bad completion option \"$itk_option(-completion)\":\ should be boolean" } } } # -------------------------------------------------------------------- # OPTION: -dropdown # # Boolean which determines the Combobox style: dropdown or simple. # Because the two style's lists reside in different toplevel widgets # this is more complicated than it should be. # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::dropdown { switch -- $itk_option(-dropdown) { 1 - yes - true - on { if {[winfo exists $itk_interior.list]} { set vals [$itk_component(list) get 0 end] destroy $itk_component(list) _doLayout if [llength $vals] { eval insert list end $vals } } } 0 - no - false - off { if {[winfo exists $itk_interior.popup.list]} { set vals [$itk_component(list) get 0 end] catch {destroy $itk_component(arrowBtn)} destroy $itk_component(popup) ;# this deletes the list too _doLayout if [llength $vals] { eval insert list end $vals } } } default { error "bad dropdown option \"$itk_option(-dropdown)\":\ should be boolean" } } } # -------------------------------------------------------------------- # OPTION: -editable # # Boolean which allows/disallows user input to the entry field area. # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::editable { switch -- $itk_option(-editable) { 1 - true - yes - on { switch -- $itk_option(-state) { normal { $itk_component(entry) configure -state normal } } } 0 - false - no - off { $itk_component(entry) configure -state readonly } default { error "bad editable option \"$itk_option(-editable)\":\ should be boolean" } } } # -------------------------------------------------------------------- # OPTION: -grab # # grab-state of megawidget # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::grab { switch -- $itk_option(-grab) { local { } global { } default { error "bad grab value \"$itk_option(-grab)\":\ must be global or local" } } } # -------------------------------------------------------------------- # OPTION: -listheight # # Listbox height in pixels. (Need to integrate the scrolledlistbox # -visibleitems option here - at least for simple listbox.) # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::listheight {} # -------------------------------------------------------------------- # OPTION: -margin # # Spacer between the entry field and arrow button of dropdown style # Comboboxes. # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::margin { grid columnconfigure $itk_interior 0 -minsize $itk_option(-margin) } # -------------------------------------------------------------------- # OPTION: -popupcursor # # Set the cursor for the popup list. # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::popupcursor {} # -------------------------------------------------------------------- # OPTION: -selectioncommand # # Defines the proc to be called when an item is selected in the list. # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::selectioncommand {} # -------------------------------------------------------------------- # OPTION: -state # # overall state of megawidget # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::state { switch -- $itk_option(-state) { disabled { $itk_component(entry) configure -state disabled } normal { switch -- $itk_option(-editable) { 1 - true - yes - on { $itk_component(entry) configure -state normal } 0 - false - no - off { $itk_component(entry) configure -state readonly } } } readonly { $itk_component(entry) configure -state readonly } default { error "bad state value \"$itk_option(-state)\":\ must be normal or disabled" } } if {[info exists itk_component(arrowBtn)]} { $itk_component(arrowBtn) configure -state $itk_option(-state) } } # -------------------------------------------------------------------- # OPTION: -unique # # Boolean which disallows/allows adding duplicate items to the listbox. # -------------------------------------------------------------------- itcl::configbody iwidgets::Combobox::unique { # boolean error check switch -- $itk_option(-unique) { 1 - true - yes - on { } 0 - false - no - off { } default { error "bad unique value \"$itk_option(-unique)\":\ should be boolean" } } } # ================================================================= # METHODS # ================================================================= # ------------------------------------------------------ # PUBLIC METHOD: clear ?component? # # Remove all elements from the listbox, all contents # from the entry component, or both (if all). # # ------------------------------------------------------ itcl::body iwidgets::Combobox::clear {{component all}} { switch -- $component { entry { iwidgets::Entryfield::clear } list { delete list 0 end } all { delete list 0 end iwidgets::Entryfield::clear } default { error "bad Combobox component \"$component\":\ must be entry, list, or all." } } return } # ------------------------------------------------------ # PUBLIC METHOD: curselection # # Return the current selection index. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::curselection {} { return [$itk_component(list) curselection] } # ------------------------------------------------------ # PUBLIC METHOD: delete component first ?last? # # Delete an item or items from the listbox OR delete # text from the entry field. First argument determines # which component deletion occurs in - valid values are # entry or list. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::delete {component first {last {}}} { switch -- $component { entry { if {$last == {}} { set last [expr {$first + 1}] } iwidgets::Entryfield::delete $first $last } list { _deleteList $first $last } default { error "bad Combobox component \"$component\":\ must be entry or list." } } } # ------------------------------------------------------ # PUBLIC METHOD: get ?index? # # # Retrieve entry contents if no args OR use args as list # index and retrieve list item at index . # # ------------------------------------------------------ itcl::body iwidgets::Combobox::get {{index {}}} { # no args means to get the current text in the entry field area if {$index == {}} { iwidgets::Entryfield::get } else { eval $itk_component(list) get $index } } # ------------------------------------------------------ # PUBLIC METHOD: getcurselection # # Return currently selected item in the listbox. Shortcut # version of get curselection command combination. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::getcurselection {} { return [$itk_component(list) getcurselection] } # ------------------------------------------------------------------ # PUBLIC METHOD: invoke # # Pops up or down a dropdown combobox. # # ------------------------------------------------------------------ itcl::body iwidgets::Combobox::invoke {} { if {$itk_option(-dropdown)} { return [_toggleList] } return } # ------------------------------------------------------------ # PUBLIC METHOD: insert comonent index string ?string ...? # # Insert an item into the listbox OR text into the entry area. # Valid component names are entry or list. # # ------------------------------------------------------------ itcl::body iwidgets::Combobox::insert {component index args} { set nargs [llength $args] if {$nargs == 0} { error "no value given for parameter \"string\" in function\ \"Combobox::insert\"" } switch -- $component { entry { if { $nargs > 1} { error "called function \"Combobox::insert entry\"\ with too many arguments" } else { if {$itk_option(-state) == "normal"} { eval iwidgets::Entryfield::insert $index $args eval [itcl::code $this _lookup ""] } } } list { if {$itk_option(-state) == "normal"} { eval $itk_component(list) insert $index $args } } default { error "bad Combobox component \"$component\": must\ be entry or list." } } } # ------------------------------------------------------ # PUBLIC METHOD: justify direction # # Wrapper for justifying the listbox items in one of # 4 directions: top, bottom, left, or right. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::justify {direction} { return [$itk_component(list) justify $direction] } # ------------------------------------------------------------------ # PUBLIC METHOD: see index # # Adjusts the view such that the element given by index is visible. # ------------------------------------------------------------------ itcl::body iwidgets::Combobox::see {index} { return [$itk_component(list) see $index] } # ------------------------------------------------------------------ # PUBLIC METHOD: selection option first ?last? # # Adjusts the selection within the listbox and changes the contents # of the entry component to be the value of the selected list item. # ------------------------------------------------------------------ itcl::body iwidgets::Combobox::selection {option first {last {}}} { # thin wrap if {$option == "set"} { $itk_component(list) selection clear 0 end $itk_component(list) selection set $first set rtn "" } else { set rtn [eval $itk_component(list) selection $option $first $last] } set _currItem $first # combobox additions set theText [getcurselection] if {$theText != [$itk_component(entry) get]} { clear entry if {$theText != ""} { insert entry 0 $theText } } return $rtn } # ------------------------------------------------------------------ # PUBLIC METHOD: size # # Returns a decimal string indicating the total number of elements # in the listbox. # ------------------------------------------------------------------ itcl::body iwidgets::Combobox::size {} { return [$itk_component(list) size] } # ------------------------------------------------------ # PUBLIC METHOD: sort ?mode? # # Sort the current list in either "ascending" or "descending" order. # # jss: how should i handle selected items? # # ------------------------------------------------------ itcl::body iwidgets::Combobox::sort {{mode ascending}} { $itk_component(list) sort $mode # return [$itk_component(list) sort $mode] } # ------------------------------------------------------------------ # PUBLIC METHOD: xview ?arg arg ...? # # Change or query the vertical position of the text in the list box. # ------------------------------------------------------------------ itcl::body iwidgets::Combobox::xview {args} { return [eval $itk_component(list) xview $args] } # ------------------------------------------------------------------ # PUBLIC METHOD: yview ?arg arg ...? # # Change or query the horizontal position of the text in the list box. # ------------------------------------------------------------------ itcl::body iwidgets::Combobox::yview {args} { return [eval $itk_component(list) yview $args] } # ------------------------------------------------------ # PROTECTED METHOD: _addToList # # Add the current item in the entry to the listbox. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_addToList {} { set input [get] if {$input != ""} { if {$itk_option(-unique)} { # if item is already in list, select it and exit set item [lsearch -exact [$itk_component(list) get 0 end] $input] if {$item != -1} { selection clear 0 end if {$item != {}} { selection set $item $item set _currItem $item } return } } # add the item to end of list selection clear 0 end insert list end $input selection set end end } } # ------------------------------------------------------ # PROTECTED METHOD: _createComponents # # Create deferred combobox components and add bindings. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_createComponents {} { if {$itk_option(-dropdown)} { # --- build a dropdown combobox --- # make the arrow childsite be on the right hand side #------------------------------------------------------------- # BUG FIX: csmith (Chad Smith: csmith@adc.com), 3/4/99 #------------------------------------------------------------- # The following commented line of code overwrites the -command # option when passed into the constructor. The order of calls # in the constructor is: # 1) eval itk_initalize $args (initializes -command) # 2) _doLayout # 3) _createComponents (overwrites -command) # The solution is to only set the -command option if it hasn't # already been set. The following 4 lines of code do this. #------------------------------------------------------------- # ** configure -childsitepos e -command [code $this _addToList] #------------------------------------------------------------- configure -childsitepos e if ![llength [cget -command]] { configure -command [itcl::code $this _addToList] } # arrow button to popup the list itk_component add arrowBtn { button $itk_interior.arrowBtn -borderwidth 2 \ -width 15 -height 15 -image downarrow \ -command [itcl::code $this _toggleList] -state $itk_option(-state) } { keep -background -borderwidth -cursor -state \ -highlightcolor -highlightthickness rename -relief -arrowrelief arrowRelief Relief rename -highlightbackground -background background Background } # popup list container itk_component add popup { toplevel $itk_interior.popup } { keep -background -cursor } wm withdraw $itk_interior.popup # the listbox itk_component add list { iwidgets::Scrolledlistbox $itk_interior.popup.list -exportselection no \ -vscrollmode dynamic -hscrollmode dynamic -selectmode browse } { keep -background -borderwidth -cursor -foreground \ -highlightcolor -highlightthickness \ -hscrollmode -selectbackground \ -selectborderwidth -selectforeground -textbackground \ -textfont -vscrollmode rename -height -listheight listHeight Height rename -cursor -popupcursor popupCursor Cursor } # mode specific bindings _dropdownBindings # Ugly hack to avoid tk buglet revealed in _dropdownBtnRelease where # relief is used but not set in scrollbar.tcl. global tkPriv set tkPriv(relief) raise } else { # --- build a simple combobox --- configure -childsitepos s itk_component add list { iwidgets::Scrolledlistbox $itk_interior.list -exportselection no \ -vscrollmode dynamic -hscrollmode dynamic } { keep -background -borderwidth -cursor -foreground \ -highlightcolor -highlightthickness \ -hscrollmode -selectbackground \ -selectborderwidth -selectforeground -textbackground \ -textfont -visibleitems -vscrollmode rename -height -listheight listHeight Height } # add mode specific bindings _simpleBindings } # popup cursor applies only to the list within the combobox configure -popupcursor $itk_option(-popupcursor) # add mode independent bindings _commonBindings } # ------------------------------------------------------ # PROTECTED METHOD: _deleteList first ?last? # # Delete an item or items from the listbox. Called via # "delete list args". # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_deleteList {first {last {}}} { if {$last == {}} { set last $first } $itk_component(list) delete $first $last # remove the item if it is no longer in the list set text [$this get] if {$text != ""} { set index [lsearch -exact [$itk_component(list) get 0 end] $text ] if {$index == -1} { clear entry } } return } # ------------------------------------------------------ # PROTECTED METHOD: _deleteText first ?last? # # Renamed Entryfield delete method. Called via "delete entry args". # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_deleteText {first {last {}}} { $itk_component(entry) configure -state normal set rtrn [delete $first $last] switch -- $itk_option(-editable) { 0 - false - no - off { $itk_component(entry) configure -state readonly } } return $rtrn } # ------------------------------------------------------ # PROTECTED METHOD: _doLayout ?when? # # Call methods to create and pack the Combobox components. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_doLayout {{when later}} { _createComponents _packComponents $when } # ------------------------------------------------------ # PROTECTED METHOD: _drawArrow # # Draw the arrow button. Determines packing according to # -labelpos. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_drawArrow {} { set flip false set relief "" set fg [cget -foreground] if {$_isPosted} { set flip true set relief "-relief sunken" } else { set relief "-relief $itk_option(-arrowrelief)" } if {$flip} { # # draw up arrow # eval $itk_component(arrowBtn) configure -image uparrow $relief } else { # # draw down arrow # eval $itk_component(arrowBtn) configure -image downarrow $relief } } # ------------------------------------------------------ # PROTECTED METHOD: _dropdownBtnRelease window x y # # Event handler for button releases while a dropdown list # is posted. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_dropdownBtnRelease {{window {}} {x 1} {y 1}} { # if it's a scrollbar then ignore the release if {($window == [$itk_component(list) component vertsb]) || ($window == [$itk_component(list) component horizsb])} { return } # 1st release allows list to stay up unless we are in listbox if {$_ignoreRelease} { _ignoreNextBtnRelease false return } # should I use just the listbox or also include the scrollbars if { ($x >= 0) && ($x < [winfo width [_slbListbox]]) && ($y >= 0) && ($y < [winfo height [_slbListbox]])} { _stateSelect } _unpostList # execute user command if {$itk_option(-selectioncommand) != ""} { uplevel #0 $itk_option(-selectioncommand) } } # ------------------------------------------------------ # PROTECTED METHOD: _ignoreNextBtnRelease ignore # # Set private variable _ignoreRelease. If this variable # is true then the next button release will not remove # a dropdown list. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_ignoreNextBtnRelease {ignore} { set _ignoreRelease $ignore } # ------------------------------------------------------ # PROTECTED METHOD: _next # # Select the next item in the list. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_next {} { set _next_prevFLAG 1 if {[size] <= 1} { return } set i [curselection] if {($i == {}) || ($i == ([size]-1)) } { set i 0 } else { incr i } selection clear 0 end selection set $i $i see $i set _currItem $i } # ------------------------------------------------------ # PROTECTED METHOD: _packComponents ?when? # # Pack the components of the combobox and add bindings. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_packComponents {{when later}} { if {$when == "later"} { if {$_repacking == ""} { set _repacking [after idle [itcl::code $this _packComponents now]] return } } elseif {$when != "now"} { error "bad option \"$when\": should be now or later" } if {$itk_option(-dropdown)} { grid configure $itk_component(list) -row 1 -column 0 -sticky news _resizeArrow grid config $itk_component(arrowBtn) -row 0 -column 1 -sticky nsew } else { # size and pack list hack grid configure $itk_component(entry) -row 0 -column 0 -sticky ew grid configure $itk_component(efchildsite) -row 1 -column 0 -sticky nsew grid configure $itk_component(list) -row 0 -column 0 -sticky nsew grid rowconfigure $itk_component(efchildsite) 1 -weight 1 grid columnconfigure $itk_component(efchildsite) 0 -weight 1 } set _repacking "" } # ------------------------------------------------------ # PROTECTED METHOD: _positionList # # Determine the position (geometry) for the popped up list # and map it to the screen. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_positionList {} { set x [winfo rootx $itk_component(entry) ] set y [expr {[winfo rooty $itk_component(entry) ] + \ [winfo height $itk_component(entry) ]}] set w [winfo width $itk_component(entry) ] set h [winfo height [_slbListbox] ] set sh [winfo screenheight .] if {(($y+$h) > $sh) && ($y > ($sh/2))} { set y [expr {[winfo rooty $itk_component(entry) ] - $h}] } $itk_component(list) configure -width $w wm overrideredirect $itk_component(popup) 0 wm geometry $itk_component(popup) +$x+$y wm overrideredirect $itk_component(popup) 1 } # ------------------------------------------------------ # PROTECTED METHOD: _postList # # Pop up the list in a dropdown style Combobox. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_postList {} { if {[$itk_component(list) size] == ""} { return } set _isPosted true _positionList # map window and do a grab wm deiconify $itk_component(popup) _listShowing -wait # Added by csmith, 12/19/00. Thanks to Erik Leunissen for # finding this problem. We need to restore any previous # grabs after the dropdown listbox is withdrawn. To do this, # save the currently grabbed window. It is then restored in # the _unpostList method. set _grab(window) [::grab current] if {$_grab(window) != ""} { set _grab(status) [::grab status $_grab(window)] } # Now grab the dropdown listbox. if {$itk_option(-grab) == "global"} { ::grab -global $itk_component(popup) } else { ::grab $itk_component(popup) } raise $itk_component(popup) focus $itk_component(popup) _drawArrow # Added by csmith, 10/26/00. This binding keeps the listbox # from staying mapped if the window in which the combobox # is packed is iconified. bind $itk_component(entry) <Unmap> [itcl::code $this _unpostList] } # ------------------------------------------------------ # PROTECTED METHOD: _previous # # Select the previous item in the list. Wraps at front # and end of list. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_previous {} { set _next_prevFLAG 1 if {[size] <= 1} { return } set i [curselection] if {$i == "" || $i == 0} { set i [expr {[size] - 1}] } else { incr i -1 } selection clear 0 end selection set $i $i see $i set _currItem $i } # ------------------------------------------------------ # PROTECTED METHOD: _resizeArrow # # Recalculate the arrow button size and then redraw it. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_resizeArrow {} { set bw [expr {[$itk_component(arrowBtn) cget -borderwidth]+ \ [$itk_component(arrowBtn) cget -highlightthickness]}] set newHeight [expr {[winfo reqheight $itk_component(entry)]-(2*$bw) - 2}] $itk_component(arrowBtn) configure -width $newHeight -height $newHeight _drawArrow } # ------------------------------------------------------ # PROTECTED METHOD: _selectCmd # # Called when list item is selected to insert new text # in entry, and call user -command callback if defined. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_selectCmd {} { $itk_component(entry) configure -state normal set _currItem [$itk_component(list) curselection] set item [$itk_component(list) getcurselection] clear entry $itk_component(entry) insert 0 $item switch -- $itk_option(-editable) { 0 - false - no - off { $itk_component(entry) configure -state readonly } } } # ------------------------------------------------------ # PROTECTED METHOD: _toggleList # # Post or unpost the dropdown listbox (toggle). # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_toggleList {} { if {[winfo ismapped $itk_component(popup)] } { _unpostList } else { _postList } } # ------------------------------------------------------ # PROTECTED METHOD: _unpostList # # Unmap the listbox (pop it down). # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_unpostList {} { # Determine if event occured in the scrolledlistbox and, if it did, # don't unpost it. (A selection in the list unposts it correctly and # in the scrollbar we don't want to unpost it.) set x [winfo x $itk_component(list)] set y [winfo y $itk_component(list)] set w [winfo width $itk_component(list)] set h [winfo height $itk_component(list)] wm withdraw $itk_component(popup) ::grab release $itk_component(popup) # Added by csmith, 12/19/00. Thanks to Erik Leunissen for finding # this problem. We need to restore any previous grabs when the # dropdown listbox is unmapped. if {$_grab(window) != ""} { if {$_grab(status) == "global"} { ::grab -global $_grab(window) } else { ::grab $_grab(window) } set _grab(window) "" set _grab(status) "" } # Added by csmith, 10/26/00. This binding resets the binding # created in _postList - see that method for further details. bind $itk_component(entry) <Unmap> {} set _isPosted false $itk_component(list) selection clear 0 end if {$_currItem != {}} { $itk_component(list) selection set $_currItem $_currItem $itk_component(list) activate $_currItem } switch -- $itk_option(-editable) { 1 - true - yes - on { $itk_component(entry) configure -state normal } 0 - false - no - off { $itk_component(entry) configure -state readonly } } _drawArrow update } # ------------------------------------------------------ # PROTECTED METHOD: _commonBindings # # Bindings that are used by both simple and dropdown # style Comboboxes. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_commonBindings {} { bind $itk_component(entry) <KeyPress-BackSpace> [itcl::code $this _bs] bind $itk_component(entry) <KeyRelease> [itcl::code $this _lookup %K] bind $itk_component(entry) <Down> [itcl::code $this _next] bind $itk_component(entry) <Up> [itcl::code $this _previous] bind $itk_component(entry) <Control-n> [itcl::code $this _next] bind $itk_component(entry) <Control-p> [itcl::code $this _previous] bind [_slbListbox] <Control-n> [itcl::code $this _next] bind [_slbListbox] <Control-p> [itcl::code $this _previous] } # ------------------------------------------------------ # PROTECTED METHOD: _dropdownBindings # # Bindings used only by the dropdown type Combobox. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_dropdownBindings {} { bind $itk_component(popup) <Escape> [itcl::code $this _unpostList] bind $itk_component(popup) <space> \ "[itcl::code $this _stateSelect]; [itcl::code $this _unpostList]" bind $itk_component(popup) <Return> \ "[itcl::code $this _stateSelect]; [itcl::code $this _unpostList]" bind $itk_component(popup) <ButtonRelease-1> \ [itcl::code $this _dropdownBtnRelease %W %x %y] bind $itk_component(list) <Map> \ [itcl::code $this _listShowing 1] bind $itk_component(list) <Unmap> \ [itcl::code $this _listShowing 0] # once in the listbox, we drop on the next release (unless in scrollbar) bind [_slbListbox] <Enter> \ [itcl::code $this _ignoreNextBtnRelease false] bind $itk_component(arrowBtn) <3> [itcl::code $this _next] bind $itk_component(arrowBtn) <Shift-3> [itcl::code $this _previous] bind $itk_component(arrowBtn) <Down> [itcl::code $this _next] bind $itk_component(arrowBtn) <Up> [itcl::code $this _previous] bind $itk_component(arrowBtn) <Control-n> [itcl::code $this _next] bind $itk_component(arrowBtn) <Control-p> [itcl::code $this _previous] bind $itk_component(arrowBtn) <Shift-Down> [itcl::code $this _toggleList] bind $itk_component(arrowBtn) <Shift-Up> [itcl::code $this _toggleList] bind $itk_component(arrowBtn) <Return> [itcl::code $this _toggleList] bind $itk_component(arrowBtn) <space> [itcl::code $this _toggleList] bind $itk_component(entry) <Configure> [itcl::code $this _resizeArrow] bind $itk_component(entry) <Shift-Down> [itcl::code $this _toggleList] bind $itk_component(entry) <Shift-Up> [itcl::code $this _toggleList] } # ------------------------------------------------------ # PROTECTED METHOD: _simpleBindings # # Bindings used only by the simple type Comboboxes. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_simpleBindings {} { bind [_slbListbox] <ButtonRelease-1> [itcl::code $this _stateSelect] bind [_slbListbox] <space> [itcl::code $this _stateSelect] bind [_slbListbox] <Return> [itcl::code $this _stateSelect] bind $itk_component(entry) <Escape> "" bind $itk_component(entry) <Shift-Down> "" bind $itk_component(entry) <Shift-Up> "" bind $itk_component(entry) <Configure> "" } # ------------------------------------------------------ # PROTECTED METHOD: _listShowing ?val? # # Used instead of "tkwait visibility" to make sure that # the dropdown list is visible. Whenever the list gets # mapped or unmapped, this method is called to keep # track of it. When it is called with the value "-wait", # it waits for the list to be mapped. # ------------------------------------------------------ itcl::body iwidgets::Combobox::_listShowing {{val ""}} { if {$val == ""} { return $_listShowing($this) } elseif {$val == "-wait"} { while {!$_listShowing($this)} { tkwait variable [itcl::scope _listShowing($this)] } return } set _listShowing($this) $val } # ------------------------------------------------------ # PRIVATE METHOD: _slbListbox # # Access the tk listbox window out of the scrolledlistbox. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_slbListbox {} { return [$itk_component(list) component listbox] } # ------------------------------------------------------ # PRIVATE METHOD: _stateSelect # # only allows a B1 release in the listbox to have an effect if -state is # normal. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_stateSelect {} { switch -- $itk_option(-state) { normal { eval [itcl::code $this _selectCmd] } } } # ------------------------------------------------------ # PRIVATE METHOD: _bs # # A part of the auto-completion code, this function sets a flag when the # Backspace key is hit and there is a selection in the entry field. # Note that it's probably buggy to assume that a selection being present # means that that selection came from auto-completion. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_bs {} { # # exit if completion is turned off # switch -- $itk_option(-completion) { 0 - no - false - off { return } } # # critical section flag. it ain't perfect, but for most usage it'll # keep us from being in this code "twice" at the same time # (auto-repeated keystrokes are a pain!) # if {$_inbs} { return } else { set _inbs 1 } # # set the _doit flag if there is a selection set in the entry field # set _doit 0 if [$itk_component(entry) selection present] { set _doit 1 } # # clear the semaphore and return # set _inbs 0 } # ------------------------------------------------------ # PRIVATE METHOD: _lookup # # handles auto-completion of text typed (or insert'd) into the entry field. # # ------------------------------------------------------ itcl::body iwidgets::Combobox::_lookup {key} { # # Don't process auto-completion stuff if navigation key was released # Fixes SF bug 501300 # if {$_next_prevFLAG} { set _next_prevFLAG 0 return } # # exit if completion is turned off # switch -- $itk_option(-completion) { 0 - no - false - off { return } } # # critical section flag. it ain't perfect, but for most usage it'll # keep us from being in this code "twice" at the same time # (auto-repeated keystrokes are a pain!) # if {$_inlookup} { return } else { set _inlookup 1 } # # if state of megawidget is disabled, or the entry is not editable, # clear the semaphore and exit # if {$itk_option(-state) == "disabled" \ || [lsearch {on 1 true yes} $itk_option(-editable)] == -1} { set _inlookup 0 return } # # okay, *now* we can get to work # the _bs function is called on keyPRESS of BackSpace, and will set # the _doit flag if there's a selection set in the entryfield. If # there is, we're assuming that it's generated by completion itself # (this is probably a Bad Assumption), so we'll want to whack the # selected text, as well as the character immediately preceding the # insertion cursor. # if {$key == "BackSpace"} { if {$_doit} { set first [expr {[$itk_component(entry) index insert] -1}] $itk_component(entry) delete $first end $itk_component(entry) icursor $first } } # # get the text left in the entry field, and its length. if # zero-length, clear the selection in the listbox, clear the # semaphore, and boogie. # set text [get] set len [string length $text] if {$len == 0} { $itk_component(list) selection clear 0 end set _inlookup 0 return } # No need to do lookups for Shift keys or Arrows. The up/down # arrow keys should walk up/down the listbox entries. switch $key { Shift_L - Shift_R - Up - Down - Left - Right { set _inlookup 0 return } default { } } # Added by csmith 12/11/01 to resolve SF ticket #474817. It's an unusual # circumstance, but we need to make sure the character passed into this # method matches the last character in the entry's text string. It's # possible to type fast enough that the _lookup method gets invoked # *after* multiple characters have been typed and *before* the first # character has been processed. For example, you can type "bl" very # quickly, and by the time the interpreter processes "b", the "l" has # already been placed in the entry field. This causes problems as noted # in the SF ticket. # # Thus, if the character currently being processed does not match the # last character in the entry field, reset the _inlookup flag and return. # Also, note that we're only concerned with single characters here, not # keys such as backspace, delete, etc. if {$key != [string range $text end end] && [string match ? $key]} { set _inlookup 0 return } # # okay, so we have to do a lookup. find the first match in the # listbox to the text we've got in the entry field (glob). # if one exists, clear the current listbox selection, and set it to # the one we just found, making that one visible in the listbox. # then, pick off the text from the listbox entry that hadn't yet been # entered into the entry field. we need to tack that text onto the # end of the entry field, select it, and then set the insertion cursor # back to just before the point where we just added that text. # if one didn't exist, then just clear the listbox selection # set item [lsearch [$itk_component(list) get 0 end] "$text*" ] if {$item != -1} { $itk_component(list) selection clear 0 end $itk_component(list) selection set $item $item see $item set remainder [string range [$itk_component(list) get $item] $len end] $itk_component(entry) insert end $remainder $itk_component(entry) selection range $len end $itk_component(entry) icursor $len } else { $itk_component(list) selection clear 0 end } # # clear the semaphore and return # set _inlookup 0 return } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/tabset.itk�������������������������������������������������������������������0000644�0036047�0045461�00000253153�07436340725�015361� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Tabset Widget and the Tab Class # ---------------------------------------------------------------------- # A Tabset is a widget that contains a set of Tab buttons. # It displays these tabs in a row or column depending on it tabpos. # When a tab is clicked on, it becomes the only tab in the tab set that # is selected. All other tabs are deselected. The Tcl command prefix # associated with this tab (through the command tab configure option) # is invoked with the tab index number appended to its argument list. # This allows the Tabset to control another widget such as a Notebook. # # A Tab class is an [incr Tcl] class that displays either an image, # bitmap, or label in a graphic object on a canvas. This graphic object # can have a wide variety of appearances depending on the options set. # # WISH LIST: # This section lists possible future enhancements. # # 1) When too many tabs appear, a small scrollbar should appear to # move the tabs over. # # ---------------------------------------------------------------------- # AUTHOR: Bill W. Scott EMAIL: bscott@spd.dsccc.com # # @(#) $Id: tabset.itk,v 1.7 2002/02/25 04:47:17 mgbacke Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Default resources. # option add *Tabset.width 0 widgetDefault option add *Tabset.height 0 widgetDefault option add *Tabset.equalTabs true widgetDefault option add *Tabset.tabPos s widgetDefault option add *Tabset.raiseSelect false widgetDefault option add *Tabset.start 4 widgetDefault option add *Tabset.margin 5 widgetDefault option add *Tabset.tabBorders true widgetDefault option add *Tabset.bevelAmount 0 widgetDefault option add *Tabset.padX 4 widgetDefault option add *Tabset.padY 4 widgetDefault option add *Tabset.gap overlap widgetDefault option add *Tabset.angle 20 widgetDefault option add *Tabset.font fixed widgetDefault option add *Tabset.state normal widgetDefault option add *Tabset.disabledForeground #a3a3a3 widgetDefault option add *Tabset.foreground black widgetDefault option add *Tabset.background #d9d9d9 widgetDefault option add *Tabset.selectForeground black widgetDefault option add *Tabset.selectBackground #ececec widgetDefault # # Usual options. # itk::usual Tabset { keep -backdrop -background -cursor -disabledforeground -font -foreground \ -selectbackground -selectforeground } # ------------------------------------------------------------------ # TABSET # ------------------------------------------------------------------ itcl::class iwidgets::Tabset { inherit itk::Widget constructor {args} {} destructor {} itk_option define -width width Width 0 itk_option define -equaltabs equalTabs EqualTabs true itk_option define -height height Height 0 itk_option define -tabpos tabPos TabPos s itk_option define -raiseselect raiseSelect RaiseSelect false itk_option define -start start Start 4 itk_option define -margin margin Margin 5 itk_option define -tabborders tabBorders TabBorders true itk_option define -bevelamount bevelAmount BevelAmount 0 itk_option define -padx padX PadX 4 itk_option define -pady padY PadY 4 itk_option define -gap gap Gap overlap itk_option define -angle angle Angle 20 itk_option define -font font Font fixed itk_option define -state state State normal itk_option define \ -disabledforeground disabledForeground DisabledForeground #a3a3a3 itk_option define -foreground foreground Foreground black itk_option define -background background Background #d9d9d9 itk_option define -selectforeground selectForeground Background black itk_option define -backdrop backdrop Backdrop white itk_option define -selectbackground selectBackground Foreground #ececec itk_option define -command command Command {} public method configure {args} public method add {args} public method delete {args} public method index {index} public method insert {index args} public method prev {} public method next {} public method select {index} public method tabcget {index args} public method tabconfigure {index args} public method bbox {} protected method _selectName {tabName} private method _createTab {args} private method _deleteTabs {fromTab toTab} private method _index {pathList index select} private method _tabConfigure {args} private method _relayoutTabs {} private method _drawBevelBorder {} private method _calcNextTabOffset {tabName} private method _tabBounds {} private method _recalcCanvasGeom {} private method _canvasReconfigure {width height} private method _startMove {x y} private method _moveTabs {x y} private method _endMove {x y} private method _configRelayout {} private variable _width 0 ;# Width of the canvas in screen units private variable _height 0 ;# Height of the canvas in screen units private variable _selectedTop 0 ;# top edge of tab + a margin private variable _deselectedTop 0 ;# top edge of tab + a margin&raiseamt private variable _selectedLeft 0 ;# left edge of tab + a margin private variable _deselectedLeft 0 ;# left edge of tab + a margin&raiseamt private variable _tabs {} ;# our internal list of tabs private variable _currTab -1 ;# numerical index # of selected tab private variable _uniqueID 0 ;# used to create unique names private variable _cmdStr {} ;# holds value of itk_option(-command) ;# do not know why I need this! private variable _canvasWidth 0 ;# set by canvasReconfigure, is can wid private variable _canvasHeight 0 ;# set by canvasReconfigure, is can hgt private variable _anchorX 0 ;# used by mouse scrolling methods private variable _anchorY 0 ;# used by mouse scrolling methods private variable _margin 0 ;# -margin in screen units private variable _start 0 ;# -start in screen units private variable _gap overlap ;# -gap in screen units private variable _relayout false ;# flag tripped to tell whether to ;# relayout tabs after the configure private variable _skipRelayout false ;# flag that tells whether to skip ;# relayouting out the tabs. used by ;# _endMove. } # # Provide a lowercase access method for the Tabset class # proc ::iwidgets::tabset {pathName args} { uplevel ::iwidgets::Tabset $pathName $args } # ---------------------------------------------------------------------- # CONSTRUCTOR # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::constructor {args} { global tcl_platform # # Create the canvas that holds the tabs # itk_component add canvas { canvas $itk_interior.canvas -highlightthickness 0 } { keep -cursor -width -height } pack $itk_component(canvas) -fill both -expand yes -anchor nw # ... This gives us a chance to redraw our bevel borders, etc when # the size of our canvas changes... bind $itk_component(canvas) <Configure> \ [itcl::code $this _canvasReconfigure %w %h] bind $itk_component(canvas) <Map> \ [itcl::code $this _relayoutTabs] # ... Allow button 2 scrolling as in label widget. if {$tcl_platform(os) != "HP-UX"} { bind $itk_component(canvas) <2> \ [itcl::code $this _startMove %x %y] bind $itk_component(canvas) <B2-Motion> \ [itcl::code $this _moveTabs %x %y] bind $itk_component(canvas) <ButtonRelease-2> \ [itcl::code $this _endMove %x %y] } # @@@ # @@@ Is there a better way? # @@@ bind $itk_component(hull) <Tab> [itcl::code $this next] bind $itk_component(hull) <Shift-Tab> [itcl::code $this prev] eval itk_initialize $args _configRelayout _recalcCanvasGeom } itcl::body iwidgets::Tabset::destructor {} { foreach tab $_tabs { itcl::delete object $tab } } # ---------------------------------------------------------------------- # OPTIONS # ---------------------------------------------------------------------- # ---------------------------------------------------------------------- # OPTION -width # # Sets the width explicitly for the canvas of the tabset # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::width { if {$itk_option(-width) != {}} { } set _width [winfo pixels $itk_interior $itk_option(-width)] } # ---------------------------------------------------------------------- # OPTION -equaltabs # # If set to true, causes horizontal tabs to be equal in # in width and vertical tabs to equal in height. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::equaltabs { if {$itk_option(-equaltabs) != {}} { set _relayout true } } # ---------------------------------------------------------------------- # OPTION -height # # Sets the height explicitly for the canvas of the tabset # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::height { set _height [winfo pixels $itk_interior $itk_option(-height)] } # ---------------------------------------------------------------------- # OPTION -tabpos # # Sets the tab position of tabs, n, s, e, w # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::tabpos { if {$itk_option(-tabpos) != {}} { switch $itk_option(-tabpos) { n { _tabConfigure -invert true -orient horizontal } s { _tabConfigure -invert false -orient horizontal } w { _tabConfigure -invert false -orient vertical } e { _tabConfigure -invert true -orient vertical } default { error "bad anchor position\ \"$itk_option(-tabpos)\" must be n, s, e, or w" } } } } # ---------------------------------------------------------------------- # OPTION -raiseselect # # Sets whether to raise selected tabs slightly # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::raiseselect { if {$itk_option(-raiseselect) != {}} { set _relayout true } } # ---------------------------------------------------------------------- # OPTION -start # # Sets the offset to start of tab set # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::start { if {$itk_option(-start) != {}} { set _start [winfo pixels $itk_interior $itk_option(-start)] set _relayout true } else { set _start 4 } } # ---------------------------------------------------------------------- # OPTION -margin # # Sets the margin used above n tabs, below s tabs, left of e # tabs, right of w tabs # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::margin { if {$itk_option(-margin) != {}} { set _margin [winfo pixels $itk_interior $itk_option(-margin)] set _relayout true } else { set _margin 5 } } # ---------------------------------------------------------------------- # OPTION -tabborders # # Boolean that specifies whether to draw the borders of # the unselected tabs (tabs in background) # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::tabborders { if {$itk_option(-tabborders) != {}} { _tabConfigure -tabborders $itk_option(-tabborders) } } # ---------------------------------------------------------------------- # OPTION -bevelamount # # Specifies pixel size of tab corners. 0 means no corners. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::bevelamount { if {$itk_option(-bevelamount) != {}} { _tabConfigure -bevelamount $itk_option(-bevelamount) } } # ---------------------------------------------------------------------- # OPTION -padx # # Sets the padding in each tab to the left and right of label # I don't convert for fpixels, since Tab does it for me. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::padx { if {$itk_option(-padx) != {}} { _tabConfigure -padx $itk_option(-padx) } } # ---------------------------------------------------------------------- # OPTION -pady # # Sets the padding in each tab to the left and right of label # I don't convert for fpixels, since Tab does it for me. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::pady { if {$itk_option(-pady) != {}} { _tabConfigure -pady $itk_option(-pady) } } # ---------------------------------------------------------------------- # OPTION -gap # # Sets the amount of spacing between tabs in pixels # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::gap { if {$itk_option(-gap) != {}} { if {$itk_option(-gap) != "overlap"} { set _gap [winfo pixels $itk_interior $itk_option(-gap)] } else { set _gap overlap } set _relayout true } else { set _gap overlap } } # ---------------------------------------------------------------------- # OPTION -angle # # Sets the angle of the tab's sides # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::angle { if {$itk_option(-angle) != {}} { _tabConfigure -angle $itk_option(-angle) } } # ---------------------------------------------------------------------- # OPTION -font # # Sets the font of the tab (SELECTED and UNSELECTED) # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::font { if {$itk_option(-font) != {}} { _tabConfigure -font $itk_option(-font) } } # ---------------------------------------------------------------------- # OPTION -state # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::state { if {$itk_option(-state) != {}} { _tabConfigure -state $itk_option(-state) } } # ---------------------------------------------------------------------- # OPTION -disabledforeground # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::disabledforeground { if {$itk_option(-disabledforeground) != {}} { _tabConfigure \ -disabledforeground $itk_option(-disabledforeground) } } # ---------------------------------------------------------------------- # OPTION -foreground # # Sets the foreground label color of UNSELECTED tabs # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::foreground { _tabConfigure -foreground $itk_option(-foreground) } # ---------------------------------------------------------------------- # OPTION -background # # Sets the background color of UNSELECTED tabs # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::background { if {$itk_option(-background) != {}} { _tabConfigure -background $itk_option(-background) } else { _tabConfigure -background \ [$itk_component(canvas) cget -background] } } # ---------------------------------------------------------------------- # OPTION -selectforeground # # Sets the foreground label color of SELECTED tabs # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::selectforeground { _tabConfigure -selectforeground $itk_option(-selectforeground) } # ---------------------------------------------------------------------- # OPTION -backdrop # # Sets the background color of the Tabset backdrop (behind the tabs) # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::backdrop { if {$itk_option(-backdrop) != {}} { $itk_component(canvas) configure \ -background $itk_option(-backdrop) } } # ---------------------------------------------------------------------- # OPTION -selectbackground # # Sets the background color of SELECTED tabs # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::selectbackground { if {$itk_option(-selectbackground) != {}} { } else { #set _selectBackground \ [$itk_component(canvas) cget -background] } _tabConfigure -selectbackground $itk_option(-selectbackground) } # ---------------------------------------------------------------------- # OPTION -command # # The command to invoke when a tab is hit. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tabset::command { if {$itk_option(-command) != {}} { set _cmdStr $itk_option(-command) } } # ---------------------------------------------------------------------- # METHOD: add ?option value...? # # Creates a tab and appends it to the list of tabs. # processes tabconfigure for the tab added. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::add {args} { set tabName [eval _createTab $args] lappend _tabs $tabName _relayoutTabs return $tabName } # ---------------------------------------------------------------------- # METHOD: configure ?option? ?value option value...? # # Acts as an addendum to the itk::Widget::configure method. # # Checks the _relayout flag to see if after configures are done # we need to relayout the tabs. # # _skipRelayout is set in the MB2 scroll methods, to avoid constant # relayout of tabs while dragging the mouse. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::configure {args} { set result [eval itk::Archetype::configure $args] _configRelayout return $result } itcl::body iwidgets::Tabset::_configRelayout {} { # then relayout tabs if necessary if { $_relayout } { if { $_skipRelayout } { } else { _relayoutTabs } set _relayout false } } # ---------------------------------------------------------------------- # METHOD: delete index1 ?index2? # # Deletes a tab or range of tabs from the tabset # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::delete {args} { if { $_tabs == {} } { error "can't delete tabs,\ no tabs in the tabset named $itk_component(hull)" } set len [llength $args] switch $len { 0 { error "wrong # args: should be\ \"$itk_component(hull) delete index1 ?index2?\"" } 1 { set fromTab [index [lindex $args 0]] if { $fromTab == -1 } { error "bad value for index1:\ [lindex $args 0] in call to delete" } set toTab $fromTab _deleteTabs $fromTab $toTab } 2 { set fromTab [index [lindex $args 0]] if { $fromTab == -1 } { error "bad value for index1:\ [lindex $args 0] in call to delete" } set toTab [index [lindex $args 1]] if { $toTab == -1 } { error "bad value for index2:\ [lindex $args 1] in call to delete" } _deleteTabs $fromTab $toTab } default { error "wrong # args: should be\ \"$itk_component(hull) delete index1 ?index2?\"" } } } # ---------------------------------------------------------------------- # METHOD: index index # # Given an index identifier returns the numeric index of the tab # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::index {index} { return [_index $_tabs $index $_currTab] } # ---------------------------------------------------------------------- # METHOD: insert index ?option value...? # # Inserts a tab before a index. The before tab may # be specified as a label or a tab position. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::insert {index args} { if { $_tabs == {} } { error "no tab to insert before,\ tabset '$itk_component(hull)' is empty" } # get the tab set tab [index $index] # catch bad value for before tab. if { $tab < 0 || $tab >= [llength $_tabs] } { error "bad value $tab for index:\ should be between 0 and [expr {[llength $_tabs] - 1}]" } # create the new tab and get its name... set tabName [eval _createTab $args] # grab the name of the tab currently selected. (to keep in sync) set currTabName [lindex $_tabs $_currTab] # insert tabName before $tab set _tabs [linsert $_tabs $tab $tabName] # keep the _currTab in sync with the insert. set _currTab [lsearch -exact $_tabs $currTabName] _relayoutTabs return $tabName } # ---------------------------------------------------------------------- # METHOD: prev # # Selects the prev tab. Wraps at first back to last tab. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::prev {} { if { $_tabs == {} } { error "can't goto previous tab,\ no tabs in the tabset: $itk_component(hull)" } # bump to the previous tab and wrap if necessary set prev [expr {$_currTab - 1}] if { $prev < 0 } { set prev [expr {[llength $_tabs] - 1}] } select $prev } # ---------------------------------------------------------------------- # METHOD: next # # Selects the next tab. Wraps at last back to first tab. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::next {} { if { $_tabs == {} } { error "can't goto next tab,\ no tabs in the tabset: $itk_component(hull)" } # bump to the next tab and wrap if necessary set next [expr {$_currTab + 1}] if { $next >= [llength $_tabs] } { set next 0 } select $next } # ---------------------------------------------------------------------- # METHOD: select index # # Select a tab by index # # Lowers the last _currTab if it existed. # Then raises the new one if it exists. # # Returns numeric index of selection, -1 if failed. # ------------------------------------------------------------- itcl::body iwidgets::Tabset::select {index} { if { $_tabs == {} } { error "can't activate a tab,\ no tabs in the tabset: $itk_component(hull)" } # if there is not current selection just ignore trying this selection if { $index == "select" && $_currTab == -1 } { return -1 } # is selection request in range ? set reqTab [index $index] if { $reqTab == -1 } { error "bad value $index for index:\ should be from 0 to [expr {[llength $_tabs] - 1}]" } # If already selected then ignore and return... if { $reqTab == $_currTab } { return $reqTab } # ---- Deselect if { $_currTab != -1 } { set currTabName [lindex $_tabs $_currTab] $currTabName deselect # handle different orientations... if { $itk_option(-tabpos) == "n" || $itk_option(-tabpos) == "s"} { $currTabName configure -top $_deselectedTop } else { $currTabName configure -left $_deselectedLeft } } # get the stacking order correct... foreach tab $_tabs { $tab lower } # set this now so that the -command cmd can do an 'index select' # to operate on this tab. set _currTab $reqTab # ---- Select set reqTabName [lindex $_tabs $reqTab] $reqTabName select if { $itk_option(-tabpos) == "n" || $itk_option(-tabpos) == "s"} { $reqTabName configure -top $_selectedTop } else { $reqTabName configure -left $_selectedLeft } set _currTab $reqTab # invoke any user command string, appended with tab index number if { $_cmdStr != {} } { set newCmd $_cmdStr eval [lappend newCmd $reqTab] } return $reqTab } # ---------------------------------------------------------------------- # METHOD: tabcget index ?option? # # Returns the value for the option setting of the tab at index $index. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::tabcget {index args} { return [lindex [eval tabconfigure $index $args] 2] } # ---------------------------------------------------------------------- # METHOD: tabconfigure index ?option? ?value option value? # # tabconfigure index : returns configuration list # tabconfigure index -option : returns option values # tabconfigure index ?option value option value ...? sets options # and returns empty string. # # Performs configure on a given tab denoted by index. # # Index may be a tab number or a pattern matching the label # associated with a tab. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::tabconfigure {index args} { # convert index to numeric set tab [index $index] if { $tab == -1 } { error "bad index value:\ $index for $itk_component(hull) tabconfigure" } set tabName [lindex $_tabs $tab] set len [llength $args] switch $len { 0 { return [eval $tabName configure] } 1 { return [eval $tabName configure $args] } default { eval $tabName configure $args _relayoutTabs select select } } return "" } # ---------------------------------------------------------------------- # METHOD: bbox # # calculates the bounding box that will completely enclose # all the tabs. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::bbox {} { return [_tabBounds] } # ---------------------------------------------------------------------- # PROTECTED METHOD: _selectName # # internal method to allow selection by internal tab name # rather than index. This is used by the bind methods # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_selectName {tabName} { # if the tab is disabled, then ignore this selection... if { [$tabName cget -state] == "disabled" } { return } set tab [lsearch -exact $_tabs $tabName] select $tab } # ---------------------------------------------------------------------- # PRIVATE METHOD: _createTab # # Creates a tab, using unique tab naming, propagates background # and keeps unique id up to date. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_createTab {args} { # # create an internal name for the tab: tab0, tab1, etc. # these are one-up numbers they do not # correspond to the position the tab is located in. # set tabName $this-tab$_uniqueID switch $itk_option(-tabpos) { n { set invert true set orient horizontal set x 0 set y [expr {$_margin + 1}] } s { set invert false set orient horizontal set x 0 set y 0 } w { set invert false set orient vertical set x 0 set y 0 } e { set invert true set orient vertical set x [expr {$_margin + 1}] set y 0 } default { error "bad anchor position\ \"$itk_option(-tabpos)\" must be n, s, e, or w" } } eval iwidgets::Tab $tabName $itk_component(canvas) \ -left $x \ -top $y \ -font [list $itk_option(-font)] \ -background $itk_option(-background) \ -foreground $itk_option(-foreground) \ -selectforeground $itk_option(-selectforeground) \ -disabledforeground $itk_option(-disabledforeground) \ -selectbackground $itk_option(-selectbackground) \ -angle $itk_option(-angle) \ -padx $itk_option(-padx) \ -pady $itk_option(-pady) \ -bevelamount $itk_option(-bevelamount) \ -state $itk_option(-state) \ -tabborders $itk_option(-tabborders) \ -invert $invert \ -orient $orient \ $args $tabName lower $itk_component(canvas) \ bind $tabName <Button-1> [itcl::code $this _selectName $tabName] incr _uniqueID return $tabName } # ---------------------------------------------------------------------- # PRIVATE METHOD: _deleteTabs # # Deletes tabs from $fromTab to $toTab. # # Operates in two passes, destroys all the widgets # Then removes the pathName from the tab list # # Also keeps the current selection in bounds. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_deleteTabs {fromTab toTab} { for { set tab $fromTab } { $tab <= $toTab } { incr tab } { set tabName [lindex $_tabs $tab] # unbind Button-1 from this window name $itk_component(canvas) bind $tabName <Button-1> {} # Destroy the Tab class... itcl::delete object $tabName } # physically remove the tab set _tabs [lreplace $_tabs $fromTab $toTab] # If we deleted a selected tab set our selection to none if { $_currTab >= $fromTab && $_currTab <= $toTab } { set _currTab -1 _drawBevelBorder } # make sure _currTab stays in sync with new numbering... if { $_tabs == {} } { # if deleted only remaining tab, # reset current tab to undefined set _currTab -1 # or if the current tab was the last tab, it needs come back } elseif { $_currTab >= [llength $_tabs] } { incr _currTab -1 if { $_currTab < 0 } { # but only to zero set _currTab 0 } } _relayoutTabs } # ---------------------------------------------------------------------- # PRIVATE METHOD: _index # # pathList : list of path names to search thru if index is a label # index : either number, 'select', 'end', or pattern # select : current selection # # _index takes takes the value $index converts it to # a numeric identifier. If the value is not already # an integer it looks it up in the $pathList array. # If it fails it returns -1 # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_index {pathList index select} { switch $index { select { set number $select } end { set number [expr {[llength $pathList] -1}] } default { # is it an number already? if { [regexp {^[0-9]+$} $index] } { set number $index if { $number < 0 || $number >= [llength $pathList] } { set number -1 } # otherwise it is a label } else { # look thru the pathList of pathNames and # get each label and compare with index. # if we get a match then set number to postion in $pathList # and break out. # otherwise number is still -1 set i 0 set number -1 foreach pathName $pathList { set label [$pathName cget -label] if { $label == $index } { set number $i break } incr i } } } } return $number } # ---------------------------------------------------------------------- # PRIVATE METHOD: _tabConfigure # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_tabConfigure {args} { foreach tab $_tabs { eval $tab configure $args } set _relayout true if { $_tabs != {} } { select select } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _relayoutTabs # # relays out the tabs with correct spacing... # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_relayoutTabs {} { if { [llength $_tabs] == 0 || ![winfo viewable $itk_component(hull)]} { return } # get the max width for fixed width tabs... set maxWidth 0 foreach tab $_tabs { set width [$tab labelwidth] if { $width > $maxWidth } { set maxWidth $width } } # get the max height for fixed height tabs... set maxHeight 0 foreach tab $_tabs { set height [$tab labelheight] if { $height > $maxHeight } { set maxHeight $height } } # get curr tab's name set currTabName [lindex $_tabs $_currTab] # Start with our margin offset in pixels... set tabStart $_start if { $itk_option(-raiseselect) } { set raiseAmt 2 } else { set raiseAmt 0 } # # Depending on the tab layout: n, s, e, or w place the tabs # according to orientation, raise, margins, etc. # switch $itk_option(-tabpos) { n { set _selectedTop [expr {$_margin + 1}] set _deselectedTop [expr {$_selectedTop + $raiseAmt}] if { $itk_option(-equaltabs) } { set tabWidth $maxWidth } else { set tabWidth 0 } foreach tab $_tabs { if { $tab == $currTabName } { $tab configure -left $tabStart -top $_selectedTop \ -height $maxHeight -width $tabWidth -anchor c } else { $tab configure -left $tabStart -top $_deselectedTop \ -height $maxHeight -width $tabWidth -anchor c } set tabStart [expr {$tabStart + [_calcNextTabOffset $tab]}] } } s { set _selectedTop 0 set _deselectedTop [expr {$_selectedTop - $raiseAmt}] if { $itk_option(-equaltabs) } { set tabWidth $maxWidth } else { set tabWidth 0 } foreach tab $_tabs { if { $tab == $currTabName } { $tab configure -left $tabStart -top $_selectedTop \ -height $maxHeight -width $tabWidth -anchor c } else { $tab configure -left $tabStart -top $_deselectedTop \ -height $maxHeight -width $tabWidth -anchor c } set tabStart [expr {$tabStart + [_calcNextTabOffset $tab]}] } } w { set _selectedLeft [expr {$_margin + 1}] set _deselectedLeft [expr {$_selectedLeft + $raiseAmt}] if { $itk_option(-equaltabs) } { set tabHeight $maxHeight } else { set tabHeight 0 } foreach tab $_tabs { # selected if { $tab == $currTabName } { $tab configure -top $tabStart -left $_selectedLeft \ -height $tabHeight -width $maxWidth -anchor e # deselected } else { $tab configure -top $tabStart -left $_deselectedLeft \ -height $tabHeight -width $maxWidth -anchor e } set tabStart [expr {$tabStart + [_calcNextTabOffset $tab]}] } } e { set _selectedLeft 0 set _deselectedLeft [expr {$_selectedLeft - $raiseAmt}] if { $itk_option(-equaltabs) } { set tabHeight $maxHeight } else { set tabHeight 0 } foreach tab $_tabs { # selected if { $tab == $currTabName } { $tab configure -top $tabStart -left $_selectedLeft \ -height $tabHeight -width $maxWidth -anchor w # deselected } else { $tab configure -top $tabStart -left $_deselectedLeft \ -height $tabHeight -width $maxWidth -anchor w } set tabStart [expr {$tabStart + [_calcNextTabOffset $tab]}] } } default { error "bad anchor position\ \"$itk_option(-tabpos)\" must be n, s, e, or w" } } # put border on & calc our new canvas size... _drawBevelBorder _recalcCanvasGeom } # ---------------------------------------------------------------------- # PRIVATE METHOD: _drawBevelBorder # # draws the bevel border along tab edge (below selected tab) # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_drawBevelBorder {} { $itk_component(canvas) delete bevelBorder switch $itk_option(-tabpos) { n { $itk_component(canvas) create line \ 0 [expr {$_canvasHeight - 1}] \ $_canvasWidth [expr {$_canvasHeight - 1}] \ -fill [iwidgets::colors::topShadow $itk_option(-selectbackground)] \ -tags bevelBorder $itk_component(canvas) create line \ 0 $_canvasHeight \ $_canvasWidth $_canvasHeight \ -fill [iwidgets::colors::topShadow $itk_option(-selectbackground)] \ -tags bevelBorder } s { $itk_component(canvas) create line \ 0 0 \ $_canvasWidth 0 \ -fill [iwidgets::colors::bottomShadow $itk_option(-selectbackground)] \ -tags bevelBorder $itk_component(canvas) create line \ 0 1 \ $_canvasWidth 1 \ -fill black \ -tags bevelBorder } w { $itk_component(canvas) create line \ $_canvasWidth 0 \ $_canvasWidth [expr {$_canvasHeight - 1}] \ -fill [iwidgets::colors::topShadow $itk_option(-selectbackground)] \ -tags bevelBorder $itk_component(canvas) create line \ [expr {$_canvasWidth - 1}] 0 \ [expr {$_canvasWidth - 1}] [expr {$_canvasHeight - 1}] \ -fill [iwidgets::colors::topShadow $itk_option(-selectbackground)] \ -tags bevelBorder } e { $itk_component(canvas) create line \ 0 0 \ 0 [expr {$_canvasHeight - 1}] \ -fill black \ -tags bevelBorder $itk_component(canvas) create line \ 1 0 \ 1 [expr {$_canvasHeight - 1}] \ -fill [iwidgets::colors::bottomShadow $itk_option(-selectbackground)] \ -tags bevelBorder } } $itk_component(canvas) raise bevelBorder if { $_currTab != -1 } { set currTabName [lindex $_tabs $_currTab] $currTabName raise } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _calcNextTabOffset # # given $tabName, determines the offset in pixels to place # the next tab's start edge at. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_calcNextTabOffset {tabName} { if { $_gap == "overlap" } { return [$tabName offset] } else { return [expr {[$tabName majordim] + $_gap}] } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _tabBounds # # calculates the bounding box that will completely enclose # all the tabs. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_tabBounds {} { set bbox { 100000 100000 -10000 -10000 } foreach tab $_tabs { set tabBBox [$tab bbox] # if this left is less use it if { [lindex $tabBBox 0] < [lindex $bbox 0] } { set bbox [lreplace $bbox 0 0 [lindex $tabBBox 0]] } # if this top is greater use it if { [lindex $tabBBox 1] < [lindex $bbox 1] } { set bbox [lreplace $bbox 1 1 [lindex $tabBBox 1]] } # if this right is less use it if { [lindex $tabBBox 2] > [lindex $bbox 2] } { set bbox [lreplace $bbox 2 2 [lindex $tabBBox 2]] } # if this bottom is greater use it if { [lindex $tabBBox 3] > [lindex $bbox 3] } { set bbox [lreplace $bbox 3 3 [lindex $tabBBox 3]] } } return $bbox } # ---------------------------------------------------------------------- # PRIVATE METHOD: _recalcCanvasGeom # # Based on size of tabs, recalculates the canvas geometry that # will hold the tabs. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_recalcCanvasGeom {} { if { [llength $_tabs] == 0 } { return } set bbox [_tabBounds] set width [lindex [_tabBounds] 2] set height [lindex [_tabBounds] 3] # now we have the dimensions of all the tabs in the canvas. switch $itk_option(-tabpos) { n { # height already includes margin $itk_component(canvas) configure \ -width $width \ -height $height } s { $itk_component(canvas) configure \ -width $width \ -height [expr {$height + $_margin}] } w { # width already includes margin $itk_component(canvas) configure \ -width $width \ -height [expr {$height + 1}] } e { $itk_component(canvas) configure \ -width [expr {$width + $_margin}] \ -height [expr {$height + 1}] } default { } } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _canvasReconfigure # # Bound to the reconfigure notify event of a canvas, this # method resets canvas's correct width (since we are fill x) # and redraws the beveled edge border. # will hold the tabs. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_canvasReconfigure {width height} { set _canvasWidth $width set _canvasHeight $height if { [llength $_tabs] > 0 } { _drawBevelBorder } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _startMove # # This method is bound to the MB2 down in the canvas area of the # tab set. This starts animated scrolling of the tabs along their # major axis. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_startMove {x y} { if { $itk_option(-tabpos) == "n" || $itk_option(-tabpos) == "s" } { set _anchorX $x } else { set _anchorY $y } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _moveTabs # # This method is bound to the MB2 motion in the canvas area of the # tab set. This causes the tabset to move with the mouse. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_moveTabs {x y} { if { $itk_option(-tabpos) == "n" || $itk_option(-tabpos) == "s" } { set startX [expr {$_start + $x - $_anchorX}] foreach tab $_tabs { $tab configure -left $startX set startX [expr {$startX + [_calcNextTabOffset $tab]}] } } else { set startY [expr {$_start + $y - $_anchorY}] foreach tab $_tabs { $tab configure -top $startY set startY [expr {$startY + [_calcNextTabOffset $tab]}] } } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _endMove # # This method is bound to the MB2 release in the canvas area of the # tab set. This causes the tabset to end moving tabs. # ---------------------------------------------------------------------- itcl::body iwidgets::Tabset::_endMove {x y} { if { $itk_option(-tabpos) == "n" || $itk_option(-tabpos) == "s" } { set startX [expr {$_start + $x - $_anchorX}] set _skipRelayout true configure -start $startX set _skipRelayout false } else { set startY [expr {$_start + $y - $_anchorY}] set _skipRelayout true configure -start $startY set _skipRelayout false } } #============================================================== # CLASS: Tab #============================================================== itcl::class iwidgets::Tab { constructor {args} {} destructor {} public variable bevelamount 0 {} public variable state normal {} public variable height 0 {} public variable width 0 {} public variable anchor c {} public variable left 0 {} public variable top 0 {} public variable image {} {} public variable bitmap {} {} public variable label {} {} public variable padx 4 {} public variable pady 4 {} public variable selectbackground "gray70" {} public variable selectforeground "black" {} public variable disabledforeground "gray" {} public variable background "white" {} public variable foreground "black" {} public variable orient vertical {} public variable invert false {} public variable angle 20 {} public variable font \ "-adobe-helvetica-bold-r-normal--34-240-100-100-p-182-iso8859-1" {} public variable tabborders true {} public method configure {args} public method bbox {} public method deselect {} public method lower {} public method majordim {} public method minordim {} public method offset {} public method raise {} public method select {} public method labelheight {} public method labelwidth {} private method _makeTab {} private method _createLabel {canvas tagList} private method _makeEastTab {canvas} private method _makeWestTab {canvas} private method _makeNorthTab {canvas} private method _makeSouthTab {canvas} private method _calcLabelDim {labelItem} private method _itk_config {args} @itcl-builtin-configure private method _selectNoRaise {} private method _deselectNoLower {} private variable _selected false private variable _padX 0 private variable _padY 0 private variable _canvas # these are in pixels private variable _left 0 private variable _width 0 private variable _height 0 private variable _oldLeft 0 private variable _top 0 private variable _oldTop 0 private variable _right private variable _bottom private variable _offset private variable _majorDim private variable _minorDim private variable _darkShadow private variable _lightShadow # # graphic components that make up a tab # private variable _gRegion private variable _gLabel private variable _gLightOutline {} private variable _gBlackOutline {} private variable _gTopLine private variable _gTopLineShadow private variable _gLightShadow private variable _gDarkShadow private variable _labelWidth 0 private variable _labelHeight 0 private variable _labelXOrigin 0 private variable _labelYOrigin 0 private variable _just left private variable _configTripped true common _tan set _tan(0) 0.0 set _tan(1) 0.0175 set _tan(2) 0.0349 set _tan(3) 0.0524 set _tan(4) 0.0699 set _tan(5) 0.0875 set _tan(6) 0.1051 set _tan(7) 0.1228 set _tan(8) 0.1405 set _tan(9) 0.1584 set _tan(10) 0.1763 set _tan(11) 0.1944 set _tan(12) 0.2126 set _tan(13) 0.2309 set _tan(14) 0.2493 set _tan(15) 0.2679 set _tan(16) 0.2867 set _tan(17) 0.3057 set _tan(18) 0.3249 set _tan(19) 0.3443 set _tan(20) 0.3640 set _tan(21) 0.3839 set _tan(22) 0.4040 set _tan(23) 0.4245 set _tan(24) 0.4452 set _tan(25) 0.4663 set _tan(26) 0.4877 set _tan(27) 0.5095 set _tan(28) 0.5317 set _tan(29) 0.5543 set _tan(30) 0.5774 set _tan(31) 0.6009 set _tan(32) 0.6294 set _tan(33) 0.6494 set _tan(34) 0.6745 set _tan(35) 0.7002 set _tan(36) 0.7265 set _tan(37) 0.7536 set _tan(38) 0.7813 set _tan(39) 0.8098 set _tan(40) 0.8391 set _tan(41) 0.8693 set _tan(42) 0.9004 set _tan(43) 0.9325 set _tan(44) 0.9657 set _tan(45) 1.0 } # ---------------------------------------------------------------------- # CONSTRUCTOR # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::constructor {args} { set _canvas [lindex $args 0] set args [lrange $args 1 [llength $args]] set _darkShadow [iwidgets::colors::bottomShadow $selectbackground] set _lightShadow [iwidgets::colors::topShadow $selectbackground] if { $args != "" } { eval configure $args } } # ---------------------------------------------------------------------- # DESTRUCTOR # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::destructor {} { if { [winfo exists $_canvas] } { $_canvas delete $this } } # ---------------------------------------------------------------------- # OPTIONS # ---------------------------------------------------------------------- # # Note, we trip _configTripped for every option that requires the tab # to be remade. # # ---------------------------------------------------------------------- # OPTION -bevelamount # # Specifies the size of tab corners. A value of 0 with angle set # to 0 results in square tabs. A bevelAmount of 4, means that the # tab will be drawn with angled corners that cut in 4 pixels from # the edge of the tab. The default is 0. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::bevelamount { } # ---------------------------------------------------------------------- # OPTION -state # # sets the active state of the tab. specifying normal allows # the tab to be selectable. Specifying disabled disables the tab, # causing its image, bitmap, or label to be drawn with the # disabledForeground color. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::state { } # ---------------------------------------------------------------------- # OPTION -height # # the height of the tab. if 0, uses the font label height. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::height { set _height [winfo pixels $_canvas $height] set _configTripped true } # ---------------------------------------------------------------------- # OPTION -width # # The width of the tab. If 0, uses the font label width. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::width { set _width [winfo pixels $_canvas $width] set _configTripped true } # ---------------------------------------------------------------------- # OPTION -anchor # # Where the text in the tab will be anchored: n,nw,ne,s,sw,se,e,w,center # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::anchor { } # ---------------------------------------------------------------------- # OPTION -left # # Specifies the left edge of the tab's bounding box. This value # may have any of the forms acceptable to Tk_GetPixels. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::left { # get into pixels set _left [winfo pixels $_canvas $left] # move by offset from last setting $_canvas move $this [expr {$_left - $_oldLeft}] 0 # update old for next time set _oldLeft $_left } # ---------------------------------------------------------------------- # OPTION -top # # Specifies the topedge of the tab's bounding box. This value may # have any of the forms acceptable to Tk_GetPixels. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::top { # get into pixels set _top [winfo pixels $_canvas $top] # move by offset from last setting $_canvas move $this 0 [expr {$_top - $_oldTop}] # update old for next time set _oldTop $_top } # ---------------------------------------------------------------------- # OPTION -image # # Specifies the imageto display in the tab. # Images are created with the image create command. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::image { set _configTripped true } # ---------------------------------------------------------------------- # OPTION -bitmap # # If bitmap is an empty string, specifies the bitmap to display in # the tab. Bitmap may be of any of the forms accepted by Tk_GetBitmap. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::bitmap { set _configTripped true } # ---------------------------------------------------------------------- # OPTION -label # # If image is an empty string and bitmap is an empty string, # it specifies a text string to be placed in the tab's label. # This label serves as an additional identifier used to reference # the tab. Label may be used for the index value in widget commands. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::label { set _configTripped true } # ---------------------------------------------------------------------- # OPTION -padx # # Horizontal padding around the label (text, image, or bitmap). # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::padx { set _configTripped true set _padX [winfo pixels $_canvas $padx] } # ---------------------------------------------------------------------- # OPTION -pady # # Vertical padding around the label (text, image, or bitmap). # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::pady { set _configTripped true set _padY [winfo pixels $_canvas $pady] } # ---------------------------------------------------------------------- # OPTION -selectbackground # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::selectbackground { set _darkShadow [iwidgets::colors::bottomShadow $selectbackground] set _lightShadow [iwidgets::colors::topShadow $selectbackground] if { $_selected } { _selectNoRaise } else { _deselectNoLower } } # ---------------------------------------------------------------------- # OPTION -selectforeground # # Foreground of tab when selected # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::selectforeground { if { $_selected } { _selectNoRaise } else { _deselectNoLower } } # ---------------------------------------------------------------------- # OPTION -disabledforeground # # Background of tab when -state is disabled # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::disabledforeground { if { $_selected } { _selectNoRaise } else { _deselectNoLower } } # ---------------------------------------------------------------------- # OPTION -background # # Normal background of tab. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::background { if { $_selected } { _selectNoRaise } else { _deselectNoLower } } # ---------------------------------------------------------------------- # OPTION -foreground # # Foreground of tabs when in normal unselected state # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::foreground { if { $_selected } { _selectNoRaise } else { _deselectNoLower } } # ---------------------------------------------------------------------- # OPTION -orient # # Specifies the orientation of the tab. Orient can be either # horizontal or vertical. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::orient { set _configTripped true } # ---------------------------------------------------------------------- # OPTION -invert # # Specifies the direction to draw the tab. If invert is true, # it draws horizontal tabs upside down and vertical tabs opening # to the left (pointing right). The value may have any of the # forms accepted by the Tcl_GetBoolean, such as true, # false, 0, 1, yes, or no. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::invert { set _configTripped true } # ---------------------------------------------------------------------- # OPTION -angle # # Specifes the angle of slope from the inner edge to the outer edge # of the tab. An angle of 0 specifies square tabs. Valid ranges are # 0 to 45 degrees inclusive. Default is 15 degrees. If this option # is specified as an empty string (the default), then the angle # option for the overall Tabset is used. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::angle { if {$angle < 0 || $angle > 45 } { error "bad angle: must be between 0 and 45" } set _configTripped true } # ---------------------------------------------------------------------- # OPTION -font # # Font for tab text. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::font { } # ---------------------------------------------------------------------- # OPTION -tabborders # # Specifies whether to draw the borders of a deselected tab. # Specifying true (the default) draws these borders, # specifying false disables this drawing. If the tab is in # its selected state this option has no effect. # The value may have any of the forms accepted by the # Tcl_GetBoolean, such as true, false, 0, 1, yes, or no. # ---------------------------------------------------------------------- itcl::configbody iwidgets::Tab::tabborders { set _configTripped true } # ---------------------------------------------------------------------- # METHOD: configure ?option value? # # Configures the Tab, checks a configTripped flag to see if the tab # needs to be remade. We take the easy way since it is so inexpensive # to delete canvas items and remake them. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::configure {args} { set len [llength $args] switch $len { 0 { set result [_itk_config] return $result } 1 { set result [eval _itk_config $args] return $result } default { eval _itk_config $args if { $_configTripped } { _makeTab set _configTripped false } return "" } } } # ---------------------------------------------------------------------- # METHOD: bbox # # Returns the bounding box of the tab # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::bbox {} { return [lappend bbox $_left $_top $_right $_bottom] } # ---------------------------------------------------------------------- # METHOD: deselect # # Causes the given tab to be drawn as deselected and lowered # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::deselect {} { global tcl_platform $_canvas lower $this if {$tcl_platform(os) == "HP-UX"} { update idletasks } _deselectNoLower } # ---------------------------------------------------------------------- # METHOD: lower # # Lowers the tab below all others in the canvas. # # This is used as our tag name on the canvas. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::lower {} { $_canvas lower $this } # ---------------------------------------------------------------------- # METHOD: majordim # # Returns the width for horizontal tabs and the height for # vertical tabs. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::majordim {} { return $_majorDim } # ---------------------------------------------------------------------- # METHOD: minordim # # Returns the height for horizontal tabs and the width for # vertical tabs. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::minordim {} { return $_minorDim } # ---------------------------------------------------------------------- # METHOD: offset # # Returns the width less the angle offset. This allows a # geometry manager to ask where to place a sibling tab. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::offset {} { return $_offset } # ---------------------------------------------------------------------- # METHOD: raise # # Raises the tab above all others in the canvas. # # This is used as our tag name on the canvas. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::raise {} { $_canvas raise $this } # ---------------------------------------------------------------------- # METHOD: select # # Causes the given tab to be drawn as selected. 3d shadows are # turned on and top line and top line shadow are drawn in sel # bg color to hide them. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::select {} { global tcl_platform $_canvas raise $this if {$tcl_platform(os) == "HP-UX"} { update idletasks } _selectNoRaise } # ---------------------------------------------------------------------- # METHOD: labelheight # # Returns the height of the tab's label in its current font. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::labelheight {} { if {$_gLabel != 0} { set labelBBox [$_canvas bbox $_gLabel] set labelHeight [expr {[lindex $labelBBox 3] - [lindex $labelBBox 1]}] } else { set labelHeight 0 } return $labelHeight } # ---------------------------------------------------------------------- # METHOD: labelwidth # # Returns the width of the tab's label in its current font. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::labelwidth {} { if {$_gLabel != 0} { set labelBBox [$_canvas bbox $_gLabel] set labelWidth [expr {[lindex $labelBBox 2] - [lindex $labelBBox 0]}] } else { set labelWidth 0 } return $labelWidth } # ---------------------------------------------------------------------- # PRIVATE METHOD: _selectNoRaise # # Draws tab as selected without raising it. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::_selectNoRaise {} { if { ! [info exists _gRegion] } { return } $_canvas itemconfigure $_gRegion -fill $selectbackground $_canvas itemconfigure $_gTopLine -fill $selectbackground $_canvas itemconfigure $_gTopLineShadow -fill $selectbackground $_canvas itemconfigure $_gLightShadow -fill $_lightShadow $_canvas itemconfigure $_gDarkShadow -fill $_darkShadow if { $_gLightOutline != {} } { $_canvas itemconfigure $_gLightOutline -fill $_lightShadow } if { $_gBlackOutline != {} } { $_canvas itemconfigure $_gBlackOutline -fill black } if { $state == "normal" } { if { $image != {}} { # do nothing for now } elseif { $bitmap != {}} { $_canvas itemconfigure $_gLabel \ -foreground $selectforeground \ -background $selectbackground } else { $_canvas itemconfigure $_gLabel -fill $selectforeground } } else { if { $image != {}} { # do nothing for now } elseif { $bitmap != {}} { $_canvas itemconfigure $_gLabel \ -foreground $disabledforeground \ -background $selectbackground } else { $_canvas itemconfigure $_gLabel -fill $disabledforeground } } set _selected true } # ---------------------------------------------------------------------- # PRIVATE METHOD: _deselectNoLower # # Causes the given tab to be drawn as deselected. 3d shadows are # removed and top line and top line shadow are drawn in visible # colors to reveal them. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::_deselectNoLower {} { if { ! [info exists _gRegion] } { return } $_canvas itemconfigure $_gRegion -fill $background $_canvas itemconfigure $_gTopLine -fill black $_canvas itemconfigure $_gTopLineShadow -fill $_darkShadow $_canvas itemconfigure $_gLightShadow -fill $background $_canvas itemconfigure $_gDarkShadow -fill $background if { $tabborders } { if { $_gLightOutline != {} } { $_canvas itemconfigure $_gLightOutline -fill $_lightShadow } if { $_gBlackOutline != {} } { $_canvas itemconfigure $_gBlackOutline -fill black } } else { if { $_gLightOutline != {} } { $_canvas itemconfigure $_gLightOutline -fill $background } if { $_gBlackOutline != {} } { $_canvas itemconfigure $_gBlackOutline -fill $background } } if { $state == "normal" } { if { $image != {}} { # do nothing for now } elseif { $bitmap != {}} { $_canvas itemconfigure $_gLabel \ -foreground $foreground \ -background $background } else { $_canvas itemconfigure $_gLabel -fill $foreground } } else { if { $image != {}} { # do nothing for now } elseif { $bitmap != {}} { $_canvas itemconfigure $_gLabel \ -foreground $disabledforeground \ -background $background } else { $_canvas itemconfigure $_gLabel -fill $disabledforeground } } set _selected false } # ---------------------------------------------------------------------- # PRIVATE METHOD: _makeTab # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::_makeTab {} { if { $orient == "horizontal" } { if { $invert } { _makeNorthTab $_canvas } else { _makeSouthTab $_canvas } } elseif { $orient == "vertical" } { if { $invert } { _makeEastTab $_canvas } else { _makeWestTab $_canvas } } else { error "bad value for option -orient" } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _createLabel # # Creates the label for the tab. Can be either a text label # or a bitmap label. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::_createLabel {canvas tagList} { if { $image != {}} { set _gLabel [$canvas create image \ 0 0 \ -image $image \ -anchor nw \ -tags $tagList \ ] } elseif { $bitmap != {}} { set _gLabel [$canvas create bitmap \ 0 0 \ -bitmap $bitmap \ -anchor nw \ -tags $tagList \ ] } else { set _gLabel [$canvas create text \ 0 0 \ -text $label \ -font $font \ -anchor nw \ -tags $tagList \ ] } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _makeEastTab # # Makes a tab that hangs to the east and opens to the west. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::_makeEastTab {canvas} { $canvas delete $this set _gLightOutline {} set _gBlackOutline {} lappend tagList $this TAB _createLabel $canvas $tagList _calcLabelDim $_gLabel set right [expr {$_left + $_labelWidth}] # now have _left, _top, right... # Turn off calculating angle tabs on Vertical orientations set angleOffset 0 set outerTop $_top set outerBottom \ [expr {$outerTop + $angleOffset + $_labelHeight + $angleOffset}] set innerTop [expr {$outerTop + $angleOffset}] set innerBottom [expr {$outerTop + $angleOffset + $_labelHeight}] # now have _left, _top, right, outerTop, innerTop, # innerBottom, outerBottom, width, height set bottom $innerBottom # tab area... gets filled either white or selected # done set _gRegion [$canvas create polygon \ $_left $outerTop \ [expr {$right - $bevelamount}] $innerTop \ $right [expr {$innerTop + $bevelamount}] \ $right [expr {$innerBottom - $bevelamount}] \ [expr {$right - $bevelamount}] $innerBottom \ $_left $outerBottom \ $_left $outerTop \ -tags $tagList \ ] # lighter shadow (left edge) set _gLightShadow [$canvas create line \ [expr {$_left - 3}] [expr {$outerTop + 1}] \ [expr {$right - $bevelamount}] [expr {$innerTop + 1}] \ -tags $tagList \ ] # darker shadow (bottom and right edges) set _gDarkShadow [$canvas create line \ [expr {$right - $bevelamount}] [expr {$innerTop + 1}] \ [expr {$right - 1}] [expr {$innerTop + $bevelamount}] \ [expr {$right - 1}] [expr {$innerBottom - $bevelamount}] \ [expr {$right - $bevelamount}] [expr {$innerBottom - 1}] \ [expr {$_left - 3}] [expr {$outerBottom - 1}] \ -tags $tagList \ ] # outline of tab set _gLightOutline [$canvas create line \ $_left $outerTop \ [expr {$right - $bevelamount}] $innerTop \ -tags $tagList \ ] # outline of tab set _gBlackOutline [$canvas create line \ [expr {$right - $bevelamount}] $innerTop \ $right [expr {$innerTop + $bevelamount}] \ $right [expr {$innerBottom - $bevelamount}] \ [expr {$right - $bevelamount}] $innerBottom \ $_left $outerBottom \ $_left $outerTop \ -tags $tagList \ ] # line closest to the edge set _gTopLineShadow [$canvas create line \ $_left $outerTop \ $_left $outerBottom \ -tags $tagList \ ] # next line down set _gTopLine [$canvas create line \ [expr {$_left + 1}] [expr {$outerTop + 2}] \ [expr {$_left + 1}] [expr {$outerBottom - 1}] \ -tags $tagList \ ] $canvas coords $_gLabel [expr {$_left + $_labelXOrigin}] \ [expr {$innerTop + $_labelYOrigin}] if { $image != {} || $bitmap != {} } { $canvas itemconfigure $_gLabel -anchor $anchor } else { $canvas itemconfigure $_gLabel -anchor $anchor -justify $_just } $canvas raise $_gLabel $_gRegion set _offset [expr {$innerBottom - $outerTop}] # height set _majorDim [expr {$outerBottom - $outerTop}] # width set _minorDim [expr {$right - $_left}] set _right $right set _bottom $outerBottom # draw in correct state... if { $_selected } { select } else { deselect } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _makeWestTab # # Makes a tab that hangs to the west and opens to the east. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::_makeWestTab {canvas} { $canvas delete $this set _gLightOutline {} set _gBlackOutline {} lappend tagList $this TAB _createLabel $canvas $tagList _calcLabelDim $_gLabel set right [expr {$_left + $_labelWidth}] # now have _left, _top, right... # Turn off calculating angle tabs on Vertical orientations set angleOffset 0 set outerTop $_top set outerBottom \ [expr {$outerTop + $angleOffset + $_labelHeight + $angleOffset}] set innerTop [expr {$outerTop + $angleOffset}] set innerBottom [expr {$outerTop + $angleOffset + $_labelHeight}] # now have _left, _top, right, outerTop, innerTop, # innerBottom, outerBottom, width, height # tab area... gets filled either white or selected # done set _gRegion [$canvas create polygon \ $right $outerTop \ [expr {$_left + $bevelamount}] $innerTop \ $_left [expr {$innerTop + $bevelamount}] \ $_left [expr {$innerBottom - $bevelamount}]\ [expr {$_left + $bevelamount}] $innerBottom \ $right $outerBottom \ $right $outerTop \ -tags $tagList \ ] # lighter shadow (left edge) set _gLightShadow [$canvas create line \ $right [expr {$outerTop+1}] \ [expr {$_left + $bevelamount}] [expr {$innerTop + 1}] \ [expr {$_left + 1}] [expr {$innerTop + $bevelamount}] \ [expr {$_left + 1}] [expr {$innerBottom - $bevelamount}] \ -tags $tagList \ ] # darker shadow (bottom and right edges) set _gDarkShadow [$canvas create line \ [expr {$_left + 1}] [expr {$innerBottom - $bevelamount}] \ [expr {$_left + $bevelamount}] [expr {$innerBottom - 1}] \ $right [expr {$outerBottom - 1}] \ -tags $tagList \ ] # outline of tab -- lighter top left sides set _gLightOutline [$canvas create line \ $right $outerTop \ [expr {$_left + $bevelamount}] $innerTop \ $_left [expr {$innerTop + $bevelamount}] \ $_left [expr {$innerBottom - $bevelamount}]\ -tags $tagList \ ] # outline of tab -- darker bottom side set _gBlackOutline [$canvas create line \ $_left [expr {$innerBottom - $bevelamount}]\ [expr {$_left + $bevelamount}] $innerBottom \ $right $outerBottom \ $right $outerTop \ -tags $tagList \ ] # top of tab set _gTopLine [$canvas create line \ [expr {$right + 1}] $outerTop \ [expr {$right + 1}] $outerBottom \ -tags $tagList \ ] # line below top of tab set _gTopLineShadow [$canvas create line \ $right $outerTop \ $right $outerBottom \ -tags $tagList \ ] $canvas coords $_gLabel [expr {$_left + $_labelXOrigin}] \ [expr {$innerTop + $_labelYOrigin}] if { $image != {} || $bitmap != {} } { $canvas itemconfigure $_gLabel -anchor $anchor } else { $canvas itemconfigure $_gLabel -anchor $anchor -justify $_just } $canvas raise $_gLabel $_gRegion set _offset [expr {$innerBottom - $outerTop}] # height set _majorDim [expr {$outerBottom - $outerTop}] # width set _minorDim [expr {$right - $_left}] set _right $right set _bottom $outerBottom # draw in correct state... if { $_selected } { select } else { deselect } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _makeNorthTab # # Makes a tab that hangs to the north and opens to the south. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::_makeNorthTab {canvas} { $canvas delete $this set _gLightOutline {} set _gBlackOutline {} lappend tagList $this TAB _createLabel $canvas $tagList # first get the label width and height _calcLabelDim $_gLabel set bottom [expr {$_top + $_labelHeight}] set angleOffset [expr {$_labelHeight * $_tan($angle)}] set outerLeft $_left set outerRight \ [expr {$outerLeft + $angleOffset + $_labelWidth + $angleOffset}] set innerLeft [expr {$outerLeft + $angleOffset}] set innerRight [expr {$outerLeft + $angleOffset + $_labelWidth}] # tab area... gets filled either white or selected set _gRegion [$canvas create polygon \ $outerLeft [expr {$bottom + 3}] \ $innerLeft [expr {$_top + $bevelamount}] \ [expr {$innerLeft + $bevelamount}] $_top \ [expr {$innerRight - $bevelamount}] $_top \ $innerRight [expr {$_top + $bevelamount}]\ $outerRight [expr {$bottom + 3}] \ $outerLeft [expr {$bottom + 3}] \ -tags $tagList \ ] # lighter shadow (left edge) set _gLightShadow [$canvas create line \ [expr {$outerLeft + 1}] [expr {$bottom + 3}] \ [expr {$innerLeft + 1}] [expr {$_top + $bevelamount}] \ [expr {$innerLeft + $bevelamount}] [expr {$_top + 1}]\ [expr {$innerRight - $bevelamount}] [expr {$_top + 1}]\ -tags $tagList \ ] # darker shadow (bottom and right edges) set _gDarkShadow [$canvas create line \ [expr {$innerRight - $bevelamount}] [expr {$_top + 1}]\ [expr {$innerRight - 1}] [expr {$_top + $bevelamount}]\ [expr {$outerRight - 1}] [expr {$bottom + 3}]\ -tags $tagList \ ] set _gLightOutline [$canvas create line \ $outerLeft [expr {$bottom + 3}] \ $innerLeft [expr {$_top + $bevelamount}] \ [expr {$innerLeft + $bevelamount}] $_top \ [expr {$innerRight - $bevelamount}] $_top \ -tags $tagList \ ] set _gBlackOutline [$canvas create line \ [expr {$innerRight - $bevelamount}] $_top \ $innerRight [expr {$_top + $bevelamount}]\ $outerRight [expr {$bottom + 3}] \ $outerLeft [expr {$bottom + 3}] \ -tags $tagList \ ] # top of tab... to make it closed off set _gTopLine [$canvas create line \ 0 0 0 0\ -tags $tagList \ ] # top of tab... to make it closed off set _gTopLineShadow [$canvas create line \ 0 0 0 0 \ -tags $tagList \ ] $canvas coords $_gLabel [expr {$innerLeft + $_labelXOrigin}] \ [expr {$_top + $_labelYOrigin}] if { $image != {} || $bitmap != {} } { $canvas itemconfigure $_gLabel -anchor $anchor } else { $canvas itemconfigure $_gLabel -anchor $anchor -justify $_just } $canvas raise $_gLabel $_gRegion set _offset [expr {$innerRight - $outerLeft}] # width set _majorDim [expr {$outerRight - $outerLeft}] # height set _minorDim [expr {$bottom - $_top}] set _right $outerRight set _bottom $bottom # draw in correct state... if { $_selected } { select } else { deselect } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _makeSouthTab # # Makes a tab that hangs to the south and opens to the north. # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::_makeSouthTab {canvas} { $canvas delete $this set _gLightOutline {} set _gBlackOutline {} lappend tagList $this TAB _createLabel $canvas $tagList # first get the label width and height _calcLabelDim $_gLabel set bottom [expr {$_top + $_labelHeight}] set angleOffset [expr {$_labelHeight * $_tan($angle)}] set outerLeft $_left set outerRight \ [expr {$outerLeft + $angleOffset + $_labelWidth + $angleOffset}] set innerLeft [expr {$outerLeft + $angleOffset}] set innerRight [expr {$outerLeft + $angleOffset + $_labelWidth}] # tab area... gets filled either white or selected set _gRegion [$canvas create polygon \ $outerLeft [expr {$_top + 1}] \ $innerLeft [expr {$bottom - $bevelamount}]\ [expr {$innerLeft + $bevelamount}] $bottom \ [expr {$innerRight - $bevelamount}] $bottom \ $innerRight [expr {$bottom - $bevelamount}]\ $outerRight [expr {$_top + 1}] \ $outerLeft [expr {$_top + 1}] \ -tags $tagList \ ] # lighter shadow (left edge) set _gLightShadow [$canvas create line \ [expr {$outerLeft+1}] $_top \ [expr {$innerLeft+1}] [expr {$bottom-$bevelamount}] \ -tags $tagList \ ] # darker shadow (bottom and right edges) set _gDarkShadow [$canvas create line \ [expr {$innerLeft+1}] [expr {$bottom-$bevelamount}] \ [expr {$innerLeft+$bevelamount}] [expr {$bottom-1}] \ [expr {$innerRight-$bevelamount}] [expr {$bottom-1}] \ [expr {$innerRight-1}] [expr {$bottom-$bevelamount}] \ [expr {$outerRight-1}] [expr {$_top + 1}] \ -tags $tagList \ ] # outline of tab set _gBlackOutline [$canvas create line \ $outerLeft [expr {$_top + 1}] \ $innerLeft [expr {$bottom -$bevelamount}]\ [expr {$innerLeft + $bevelamount}] $bottom \ [expr {$innerRight - $bevelamount}] $bottom \ $innerRight [expr {$bottom - $bevelamount}]\ $outerRight [expr {$_top + 1}] \ -tags $tagList \ ] # top of tab... to make it closed off set _gTopLine [$canvas create line \ $outerLeft [expr {$_top + 1}] \ $outerRight [expr {$_top + 1}] \ -tags $tagList \ ] # top of tab... to make it closed off set _gTopLineShadow [$canvas create line \ $outerLeft $_top \ $outerRight $_top \ -tags $tagList \ ] $canvas coords $_gLabel [expr {$innerLeft + $_labelXOrigin}] \ [expr {$_top + $_labelYOrigin}] if { $image != {} || $bitmap != {} } { $canvas itemconfigure $_gLabel -anchor $anchor } else { $canvas itemconfigure $_gLabel -anchor $anchor -justify $_just } $canvas raise $_gLabel $_gRegion set _offset [expr {$innerRight - $outerLeft}] # width set _majorDim [expr {$outerRight - $outerLeft}] # height set _minorDim [expr {$bottom - $_top}] set _right $outerRight set _bottom $bottom # draw in correct state... if { $_selected } { select } else { deselect } } # ---------------------------------------------------------------------- # PRIVATE METHOD: _calcLabelDim # # Calculate the width and height of the label bbox of labelItem # can be either text or bitmap (in future also an image) # # There are two ways to calculate the label bbox. # # First, if the $_width and/or $_height is specified, we will use # it to determine that dimension(s) width and/or height. For # a width/height of 0 we use the labels bbox to # give us a base width/height. # Then we add in the padx/pady to determine final bounds. # # Uses the following option or option derived variables: # -padx ($_padX - converted to pixels) # -pady ($_padY - converted to pixels) # -anchor ($anchor) # -width ($_width) This is the width for inside tab (label area) # -height ($_height) This is the width for inside tab (label area) # # Side Effects: # _labelWidth will be set # _labelHeight will be set # _labelXOrigin will be set # _labelYOrigin will be set # ---------------------------------------------------------------------- itcl::body iwidgets::Tab::_calcLabelDim {labelItem} { # ... calculate the label width and height set labelBBox [$_canvas bbox $labelItem] if { $_width > 0 } { set _labelWidth [expr {$_width + ($_padX * 2)}] } else { set _labelWidth [expr { ([lindex $labelBBox 2] - [lindex $labelBBox 0]) + ($_padX * 2)}] } if { $_height > 0 } { set _labelHeight [expr {$_height + ($_padY * 2)}] } else { set _labelHeight [expr { ([lindex $labelBBox 3] - [lindex $labelBBox 1]) + ($_padY * 2)}] } # ... calculate the label anchor point set centerX [expr {$_labelWidth/2.0}] set centerY [expr {$_labelHeight/2.0 - 1}] switch $anchor { n { set _labelXOrigin $centerX set _labelYOrigin $_padY set _just center } s { set _labelXOrigin $centerX set _labelYOrigin [expr {$_labelHeight - $_padY}] set _just center } e { set _labelXOrigin [expr {$_labelWidth - $_padX - 1}] set _labelYOrigin $centerY set _just right } w { set _labelXOrigin [expr {$_padX + 2}] set _labelYOrigin $centerY set _just left } c { set _labelXOrigin $centerX set _labelYOrigin $centerY set _just center } ne { set _labelXOrigin [expr {$_labelWidth - $_padX - 1}] set _labelYOrigin $_padY set _just right } nw { set _labelXOrigin [expr {$_padX + 2}] set _labelYOrigin $_padY set _just left } se { set _labelXOrigin [expr {$_labelWidth - $_padX - 1}] set _labelYOrigin [expr {$_labelHeight - $_padY}] set _just right } sw { set _labelXOrigin [expr {$_padX + 2}] set _labelYOrigin [expr {$_labelHeight - $_padY}] set _just left } default { error "bad anchor position: \ \"$tabpos\" must be n, ne, nw, s, sw, se, e, w, or center" } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/scrolledlistbox.itk����������������������������������������������������������0000644�0036047�0045461�00000063651�07444671010�017306� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Scrolledlistbox # ---------------------------------------------------------------------- # Implements a scrolled listbox with additional options to manage # horizontal and vertical scrollbars. This includes options to control # which scrollbars are displayed and the method, i.e. statically, # dynamically, or none at all. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) $Id: scrolledlistbox.itk,v 1.9 2002/03/16 16:25:44 mgbacke Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Scrolledlistbox { keep -activebackground -activerelief -background -borderwidth -cursor \ -elementborderwidth -foreground -highlightcolor -highlightthickness \ -jump -labelfont -selectbackground -selectborderwidth \ -selectforeground -textbackground -textfont -troughcolor } # ------------------------------------------------------------------ # SCROLLEDLISTBOX # ------------------------------------------------------------------ itcl::class iwidgets::Scrolledlistbox { inherit iwidgets::Scrolledwidget constructor {args} {} destructor {} itk_option define -dblclickcommand dblClickCommand Command {} itk_option define -selectioncommand selectionCommand Command {} itk_option define -width width Width 0 itk_option define -height height Height 0 itk_option define -visibleitems visibleItems VisibleItems 20x10 itk_option define -state state State normal public method curselection {} public method activate {index} public method bbox {index} public method clear {} public method see {index} public method index {index} public method delete {first {last {}}} public method get {first {last {}}} public method getcurselection {} public method insert {index args} public method nearest {y} public method scan {option args} public method selection {option first {last {}}} public method size {} public method selecteditemcount {} public method justify {direction} public method sort {{mode ascending}} public method xview {args} public method yview {args} public method itemconfigure {args} protected method _makeSelection {} protected method _dblclick {} protected method _fixIndex {index} # # List the event sequences that invoke single and double selection. # Should these change in the underlying Tk listbox, then they must # change here too. # common doubleSelectSeq { \ <Double-1> } common singleSelectSeq { \ <Control-Key-backslash> \ <Control-Key-slash> \ <Key-Escape> \ <Shift-Key-Select> \ <Control-Shift-Key-space> \ <Key-Select> \ <Key-space> \ <Control-Shift-Key-End> \ <Control-Key-End> \ <Control-Shift-Key-Home> \ <Control-Key-Home> \ <Key-Down> \ <Key-Up> \ <Shift-Key-Down> \ <Shift-Key-Up> \ <Control-Button-1> \ <Shift-Button-1> \ <ButtonRelease-1> \ } } # # Provide a lowercased access method for the Scrolledlistbox class. # proc ::iwidgets::scrolledlistbox {pathName args} { uplevel ::iwidgets::Scrolledlistbox $pathName $args } # # Use option database to override default resources of base classes. # option add *Scrolledlistbox.labelPos n widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::constructor {args} { # # Our -width and -height options are slightly different than # those implemented by our base class, so we're going to # remove them and redefine our own. # itk_option remove iwidgets::Scrolledwidget::width itk_option remove iwidgets::Scrolledwidget::height # # Create the listbox. # itk_component add listbox { listbox $itk_interior.listbox \ -width 1 -height 1 \ -xscrollcommand \ [itcl::code $this _scrollWidget $itk_interior.horizsb] \ -yscrollcommand \ [itcl::code $this _scrollWidget $itk_interior.vertsb] } { usual keep -borderwidth -exportselection -relief -selectmode keep -listvariable rename -font -textfont textFont Font rename -background -textbackground textBackground Background rename -highlightbackground -background background Background } grid $itk_component(listbox) -row 0 -column 0 -sticky nsew grid rowconfigure $_interior 0 -weight 1 grid columnconfigure $_interior 0 -weight 1 # # Configure the command on the vertical scroll bar in the base class. # $itk_component(vertsb) configure \ -command [itcl::code $itk_component(listbox) yview] # # Configure the command on the horizontal scroll bar in the base class. # $itk_component(horizsb) configure \ -command [itcl::code $itk_component(listbox) xview] # # Create a set of bindings for monitoring the selection and install # them on the listbox component. # foreach seq $singleSelectSeq { bind SLBSelect$this $seq [itcl::code $this _makeSelection] } foreach seq $doubleSelectSeq { bind SLBSelect$this $seq [itcl::code $this _dblclick] } bindtags $itk_component(listbox) \ [linsert [bindtags $itk_component(listbox)] end SLBSelect$this] # # Also create a set of bindings for disabling the scrolledlistbox. # Since the command for it is "break", we can drop the $this since # they don't need to be unique to the object level. # if {[bind SLBDisabled] == {}} { foreach seq $singleSelectSeq { bind SLBDisabled $seq break } bind SLBDisabled <Button-1> break foreach seq $doubleSelectSeq { bind SLBDisabled $seq break } } # # Initialize the widget based on the command line options. # eval itk_initialize $args } # ------------------------------------------------------------------ # DESTURCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::destructor {} { } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -dblclickcommand # # Specify a command to be executed upon double click of a listbox # item. Also, create a couple of bindings used for specific # selection modes # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledlistbox::dblclickcommand {} # ------------------------------------------------------------------ # OPTION: -selectioncommand # # Specifies a command to be executed upon selection of a listbox # item. The command will be called upon each selection regardless # of selection mode.. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledlistbox::selectioncommand {} # ------------------------------------------------------------------ # OPTION: -width # # Specifies the width of the scrolled list box as an entire unit. # The value may be specified in any of the forms acceptable to # Tk_GetPixels. Any additional space needed to display the other # components such as margins and scrollbars force the listbox # to be compressed. A value of zero along with the same value for # the height causes the value given for the visibleitems option # to be applied which administers geometry constraints in a different # manner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledlistbox::width { if {$itk_option(-width) != 0} { set shell [lindex [grid info $itk_component(listbox)] 1] # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $shell]} { grid propagate $shell no } $itk_component(listbox) configure -width 1 $shell configure \ -width [winfo pixels $shell $itk_option(-width)] } else { configure -visibleitems $itk_option(-visibleitems) } } # ------------------------------------------------------------------ # OPTION: -height # # Specifies the height of the scrolled list box as an entire unit. # The value may be specified in any of the forms acceptable to # Tk_GetPixels. Any additional space needed to display the other # components such as margins and scrollbars force the listbox # to be compressed. A value of zero along with the same value for # the width causes the value given for the visibleitems option # to be applied which administers geometry constraints in a different # manner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledlistbox::height { if {$itk_option(-height) != 0} { set shell [lindex [grid info $itk_component(listbox)] 1] # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $shell]} { grid propagate $shell no } $itk_component(listbox) configure -height 1 $shell configure \ -height [winfo pixels $shell $itk_option(-height)] } else { configure -visibleitems $itk_option(-visibleitems) } } # ------------------------------------------------------------------ # OPTION: -visibleitems # # Specified the widthxheight in characters and lines for the listbox. # This option is only administered if the width and height options # are both set to zero, otherwise they take precedence. With the # visibleitems option engaged, geometry constraints are maintained # only on the listbox. The size of the other components such as # labels, margins, and scrollbars, are additive and independent, # effecting the overall size of the scrolled list box. In contrast, # should the width and height options have non zero values, they # are applied to the scrolled list box as a whole. The listbox # is compressed or expanded to maintain the geometry constraints. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledlistbox::visibleitems { if {[regexp {^[0-9]+x[0-9]+$} $itk_option(-visibleitems)]} { if {($itk_option(-width) == 0) && \ ($itk_option(-height) == 0)} { set chars [lindex [split $itk_option(-visibleitems) x] 0] set lines [lindex [split $itk_option(-visibleitems) x] 1] set shell [lindex [grid info $itk_component(listbox)] 1] # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {! [grid propagate $shell]} { grid propagate $shell yes } $itk_component(listbox) configure -width $chars -height $lines } } else { error "bad visibleitems option\ \"$itk_option(-visibleitems)\": should be\ widthxheight" } } # ------------------------------------------------------------------ # OPTION: -state # # Specifies the state of the scrolledlistbox which may be either # disabled or normal. In a disabled state, the scrolledlistbox # does not accept user selection. The default is normal. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledlistbox::state { set tags [bindtags $itk_component(listbox)] # # If the state is normal, then we need to remove the disabled # bindings if they exist. If the state is disabled, then we need # to install the disabled bindings if they haven't been already. # switch -- $itk_option(-state) { normal { $itk_component(listbox) configure \ -foreground $itk_option(-foreground) $itk_component(listbox) configure \ -selectforeground $itk_option(-selectforeground) if {[set index [lsearch $tags SLBDisabled]] != -1} { bindtags $itk_component(listbox) \ [lreplace $tags $index $index] } } disabled { $itk_component(listbox) configure \ -foreground $itk_option(-disabledforeground) $itk_component(listbox) configure \ -selectforeground $itk_option(-disabledforeground) if {[set index [lsearch $tags SLBDisabled]] == -1} { bindtags $itk_component(listbox) \ [linsert $tags 1 SLBDisabled] } } default { error "bad state value \"$itk_option(-state)\":\ must be normal or disabled" } } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: curselection # # Returns a list containing the indices of all the elements in the # listbox that are currently selected. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::curselection {} { return [$itk_component(listbox) curselection] } # ------------------------------------------------------------------ # METHOD: activate index # # Sets the active element to the one indicated by index. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::activate {index} { return [$itk_component(listbox) activate [_fixIndex $index]] } # ------------------------------------------------------------------ # METHOD: bbox index # # Returns four element list describing the bounding box for the list # item at index # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::bbox {index} { return [$itk_component(listbox) bbox [_fixIndex $index]] } # ------------------------------------------------------------------ # METHOD clear # # Clear the listbox area of all items. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::clear {} { delete 0 end } # ------------------------------------------------------------------ # METHOD: see index # # Adjusts the view such that the element given by index is visible. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::see {index} { $itk_component(listbox) see [_fixIndex $index] } # ------------------------------------------------------------------ # METHOD: index index # # Returns the decimal string giving the integer index corresponding # to index. The index value may be a integer number, active, # anchor, end, @x,y, or a pattern. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::index {index} { if {[regexp {(^[0-9]+$)|(^active$)|(^anchor$)|(^end$)|(^@-?[0-9]+,-?[0-9]+$)} $index]} { return [$itk_component(listbox) index $index] } else { set indexValue [lsearch -glob [get 0 end] $index] if {$indexValue == -1} { error "bad Scrolledlistbox index \"$index\": must be active,\ anchor, end, @x,y, number, or a pattern" } return $indexValue } } # ------------------------------------------------------------------ # METHOD: _fixIndex index # # Similar to the regular "index" method, but it only converts # the index to a numerical value if it is a string pattern. If # the index is in the proper form to be used with the listbox, # it is left alone. This fixes problems associated with converting # an index such as "end" to a numerical value. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::_fixIndex {index} { if {[regexp {(^[0-9]+$)|(^active$)|(^anchor$)|(^end$)|(^@[0-9]+,[0-9]+$)} \ $index]} { return $index } else { set indexValue [lsearch -glob [get 0 end] $index] if {$indexValue == -1} { error "bad Scrolledlistbox index \"$index\": must be active,\ anchor, end, @x,y, number, or a pattern" } return $indexValue } } # ------------------------------------------------------------------ # METHOD: delete first ?last? # # Delete one or more elements from list box based on the first and # last index values. Indexes may be a number, active, anchor, end, # @x,y, or a pattern. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::delete {first {last {}}} { set first [_fixIndex $first] if {$last != {}} { set last [_fixIndex $last] } else { set last $first } eval $itk_component(listbox) delete $first $last } # ------------------------------------------------------------------ # METHOD: get first ?last? # # Returns the elements of the listbox indicated by the indexes. # Indexes may be a number, active, anchor, end, @x,y, ora pattern. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::get {first {last {}}} { set first [_fixIndex $first] if {$last != {}} { set last [_fixIndex $last] } if {$last == {}} { return [$itk_component(listbox) get $first] } else { return [$itk_component(listbox) get $first $last] } } # ------------------------------------------------------------------ # METHOD: getcurselection # # Returns the contents of the listbox element indicated by the current # selection indexes. Short cut version of get and curselection # command combination. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::getcurselection {} { set rlist {} if {[selecteditemcount] > 0} { set cursels [$itk_component(listbox) curselection] switch $itk_option(-selectmode) { single - browse { set rlist [$itk_component(listbox) get $cursels] } multiple - extended { foreach sel $cursels { lappend rlist [$itk_component(listbox) get $sel] } } } } return $rlist } # ------------------------------------------------------------------ # METHOD: insert index string ?string ...? # # Insert zero or more elements in the list just before the element # given by index. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::insert {index args} { set index [_fixIndex $index] eval $itk_component(listbox) insert $index $args } # ------------------------------------------------------------------ # METHOD: nearest y # # Given a y-coordinate within the listbox, this command returns the # index of the visible listbox element nearest to that y-coordinate. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::nearest {y} { $itk_component(listbox) nearest $y } # ------------------------------------------------------------------ # METHOD: scan option args # # Implements scanning on listboxes. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::scan {option args} { eval $itk_component(listbox) scan $option $args } # ------------------------------------------------------------------ # METHOD: selection option first ?last? # # Adjusts the selection within the listbox. The index value may be # a integer number, active, anchor, end, @x,y, or a pattern. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::selection {option first {last {}}} { set first [_fixIndex $first] if {$last != {}} { set last [_fixIndex $last] $itk_component(listbox) selection $option $first $last } else { $itk_component(listbox) selection $option $first } } # ------------------------------------------------------------------ # METHOD: size # # Returns a decimal string indicating the total number of elements # in the listbox. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::size {} { return [$itk_component(listbox) size] } # ------------------------------------------------------------------ # METHOD: selecteditemcount # # Returns a decimal string indicating the total number of selected # elements in the listbox. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::selecteditemcount {} { return [llength [$itk_component(listbox) curselection]] } # ------------------------------------------------------------------ # METHOD: justify direction # # Justifies the list scrolled region in one of four directions: top, # bottom, left, or right. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::justify {direction} { switch $direction { left { $itk_component(listbox) xview moveto 0 } right { $itk_component(listbox) xview moveto 1 } top { $itk_component(listbox) yview moveto 0 } bottom { $itk_component(listbox) yview moveto 1 } default { error "bad justify argument \"$direction\": should\ be left, right, top, or bottom" } } } # ------------------------------------------------------------------ # METHOD: sort mode # # Sort the current list. This can take any sort switch from # the lsort command: ascii, integer, real, command, # increasing/ascending, decreasing/descending, etc. # # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::sort {{mode ascending}} { set vals [$itk_component(listbox) get 0 end] if {[llength $vals] == 0} {return} switch $mode { ascending {set mode increasing} descending {set mode decreasing} } $itk_component(listbox) delete 0 end if {[catch {eval $itk_component(listbox) insert end \ [lsort -${mode} $vals]} errorstring]} { error "bad sort argument \"$mode\": must be a valid argument to the\ Tcl lsort command" } return } # ------------------------------------------------------------------ # METHOD: xview args # # Change or query the vertical position of the text in the list box. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::xview {args} { return [eval $itk_component(listbox) xview $args] } # ------------------------------------------------------------------ # METHOD: yview args # # Change or query the horizontal position of the text in the list box. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::yview {args} { return [eval $itk_component(listbox) yview $args] } # ------------------------------------------------------------------ # METHOD: itemconfigure args # # This is a wrapper method around the new tk8.3 itemconfigure command # for the listbox. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::itemconfigure {args} { return [eval $itk_component(listbox) itemconfigure $args] } # ------------------------------------------------------------------ # PROTECTED METHOD: _makeSelection # # Evaluate the selection command. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::_makeSelection {} { uplevel #0 $itk_option(-selectioncommand) } # ------------------------------------------------------------------ # PROTECTED METHOD: _dblclick # # Evaluate the double click command option if not empty. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledlistbox::_dblclick {} { uplevel #0 $itk_option(-dblclickcommand) } ���������������������������������������������������������������������������������������iwidgets-4.1.1/generic/dateentry.itk����������������������������������������������������������������0000644�0036047�0045461�00000036652�07616310545�016076� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Dateentry # ---------------------------------------------------------------------- # Implements a quicken style date entry field with a popup calendar # by combining the datefield and calendar widgets together. This # allows a user to enter the date via the keyboard or by using the # mouse by selecting the calendar icon which brings up a popup calendar. # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts E-mail: mulferts@austin.dsccc.com # # @(#) $Id: dateentry.itk,v 1.7 2003/01/30 20:56:05 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # ---------------------------------------------------------------------- # # Modified 2001-10-23 by Mark Alston to pass options to the datefield # constructor. Needed to allow use of new option -int which lets the # user use dates in YYYY-MM-DD format as well as MM/DD/YYYY format. # # option -int yes sets dates to YYYY-MM-DD format # -int no sets dates to MM/DD/YYYY format. # # ---------------------------------------------------------------------- # # Usual options. # itk::usual Dateentry { keep -background -borderwidth -currentdatefont -cursor \ -datefont -dayfont -foreground -highlightcolor \ -highlightthickness -labelfont -textbackground -textfont \ -titlefont -int } # ------------------------------------------------------------------ # DATEENTRY # ------------------------------------------------------------------ itcl::class iwidgets::Dateentry { inherit iwidgets::Datefield constructor {args} { eval Datefield::constructor $args } {} itk_option define -grab grab Grab "global" itk_option define -icon icon Icon {} # # The calendar widget isn't created until needed, yet we need # its options to be available upon creation of a dateentry widget. # So, we'll define them in these class now so they can just be # propagated onto the calendar later. # itk_option define -days days Days {Su Mo Tu We Th Fr Sa} itk_option define -forwardimage forwardImage Image {} itk_option define -backwardimage backwardImage Image {} itk_option define -weekdaybackground weekdayBackground Background \#d9d9d9 itk_option define -weekendbackground weekendBackground Background \#d9d9d9 itk_option define -outline outline Outline \#d9d9d9 itk_option define -buttonforeground buttonForeground Foreground blue itk_option define -foreground foreground Foreground black itk_option define -selectcolor selectColor Foreground red itk_option define -selectthickness selectThickness SelectThickness 3 itk_option define -titlefont titleFont Font \ -*-helvetica-bold-r-normal--*-140-* itk_option define -dayfont dayFont Font \ -*-helvetica-medium-r-normal--*-120-* itk_option define -datefont dateFont Font \ -*-helvetica-medium-r-normal--*-120-* itk_option define -currentdatefont currentDateFont Font \ -*-helvetica-bold-r-normal--*-120-* itk_option define -startday startDay Day sunday itk_option define -height height Height 165 itk_option define -width width Width 200 itk_option define -state state State normal protected { method _getPopupDate {date} method _releaseGrab {} method _releaseGrabCheck {rootx rooty} method _popup {} method _getDefaultIcon {} common _defaultIcon "" } } # # Provide a lowercased access method for the dateentry class. # proc ::iwidgets::dateentry {pathName args} { uplevel ::iwidgets::Dateentry $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Dateentry::constructor {args} { # # Create an icon label to act as a button to bring up the # calendar popup. # itk_component add iconbutton { label $itk_interior.iconbutton -relief raised } { keep -borderwidth -cursor -foreground } grid $itk_component(iconbutton) -row 0 -column 0 -sticky ns # # Initialize the widget based on the command line options. # eval itk_initialize $args } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -icon # # Specifies the calendar icon image to be used in the date. # Should one not be provided, then a default pixmap will be used # if possible, bitmap otherwise. # ------------------------------------------------------------------ itcl::configbody iwidgets::Dateentry::icon { if {$itk_option(-icon) == {}} { $itk_component(iconbutton) configure -image [_getDefaultIcon] } else { if {[lsearch [image names] $itk_option(-icon)] == -1} { error "bad icon option \"$itk_option(-icon)\":\ should be an existing image" } else { $itk_component(iconbutton) configure -image $itk_option(-icon) } } } # ------------------------------------------------------------------ # OPTION: -grab # # Specifies the grab level, local or global, to be obtained when # bringing up the popup calendar. The default is global. # ------------------------------------------------------------------ itcl::configbody iwidgets::Dateentry::grab { switch -- $itk_option(-grab) { "local" - "global" {} default { error "bad grab option \"$itk_option(-grab)\":\ should be local or global" } } } # ------------------------------------------------------------------ # OPTION: -state # # Specifies the state of the widget which may be disabled or # normal. A disabled state prevents selection of the date field # or date icon button. # ------------------------------------------------------------------ itcl::configbody iwidgets::Dateentry::state { switch -- $itk_option(-state) { normal { bind $itk_component(iconbutton) <Button-1> [itcl::code $this _popup] } disabled { bind $itk_component(iconbutton) <Button-1> {} } } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # PROTECTED METHOD: _getDefaultIcon # # This method is invoked uto retrieve the name of the default icon # image displayed in the icon button. # ------------------------------------------------------------------ itcl::body iwidgets::Dateentry::_getDefaultIcon {} { if {[lsearch [image types] pixmap] != -1} { set _defaultIcon [image create pixmap -data { /* XPM */ static char *calendar[] = { /* width height num_colors chars_per_pixel */ " 25 20 6 1", /* colors */ ". c #808080", "# c #040404", "a c #848484", "b c #fc0404", "c c #fcfcfc", "d c #c0c0c0", /* pixels */ "d##########d###########dd", "d#ccccccccc##ccccccccca#d", "##ccccccccc.#ccccccccc..#", "##cccbbcccca#cccbbbccca.#", "##cccbbcccc.#ccbbbbbcc..#", "##cccbbccc####ccccbbcc..#", "##cccbbcccca#ccccbbbcca.#", "##cccbbcccc.#cccbbbccc..#", "##cccbbcccca#ccbbbcccca.#", "##cccbbbccc.#ccbbbbbcc..#", "##ccccccccc.#ccccccccc..#", "##ccccccccca#ccccccccca.#", "##cc#####c#cd#c#####cc..#", "##cccccccc####cccccccca.#", "##cc#####cc.#cc#####cc..#", "##ccccccccc.#ccccccccc..#", "##ccccccccc.#ccccccccc..#", "##..........#...........#", "###..........#..........#", "#########################" }; }] } else { set _defaultIcon [image create bitmap -data { #define calendr2_width 25 #define calendr2_height 20 static char calendr2_bits[] = { 0xfe,0xf7,0x7f,0xfe,0x02,0x18,0xc0,0xfe,0x03, 0x18,0x80,0xff,0x63,0x10,0x47,0xff,0x43,0x98, 0x8a,0xff,0x63,0x3c,0x4c,0xff,0x43,0x10,0x8a, 0xff,0x63,0x18,0x47,0xff,0x23,0x90,0x81,0xff, 0xe3,0x98,0x4e,0xff,0x03,0x10,0x80,0xff,0x03, 0x10,0x40,0xff,0xf3,0xa5,0x8f,0xff,0x03,0x3c, 0x40,0xff,0xf3,0x99,0x8f,0xff,0x03,0x10,0x40, 0xff,0x03,0x18,0x80,0xff,0x57,0x55,0x55,0xff, 0x57,0xb5,0xaa,0xff,0xff,0xff,0xff,0xff}; }] } # # Since this image will only need to be created once, we redefine # this method to just return the image name for subsequent calls. # itcl::body ::iwidgets::Dateentry::_getDefaultIcon {} { return $_defaultIcon } return $_defaultIcon } # ------------------------------------------------------------------ # PROTECTED METHOD: _popup # # This method is invoked upon selection of the icon button. It # creates a calendar widget within a toplevel popup, calculates # the position at which to display the calendar, performs a grab # and displays the calendar. # ------------------------------------------------------------------ itcl::body iwidgets::Dateentry::_popup {} { # # First, let's nullify the icon binding so that any another # selections are ignored until were done with this one. Next, # change the relief of the icon. # bind $itk_component(iconbutton) <Button-1> {} $itk_component(iconbutton) configure -relief sunken # # Create a withdrawn toplevel widget and remove the window # decoration via override redirect. # itk_component add -private popup { toplevel $itk_interior.popup } $itk_component(popup) configure -borderwidth 2 -background black wm withdraw $itk_component(popup) wm overrideredirect $itk_component(popup) 1 # # Add a binding to button 1 events in order to detect mouse # clicks off the calendar in which case we'll release the grab. # Also add a binding for Escape to always release. # bind $itk_component(popup) <1> [itcl::code $this _releaseGrabCheck %X %Y] bind $itk_component(popup) <KeyPress-Escape> [itcl::code $this _releaseGrab] # # Create the calendar widget and set its cursor properly. # itk_component add calendar { iwidgets::Calendar $itk_component(popup).calendar \ -command [itcl::code $this _getPopupDate %d] \ -int $itk_option(-int) } { usual keep -days -forwardimage -backwardimage -weekdaybackground \ -weekendbackground -outline -buttonforeground -selectcolor \ -selectthickness -titlefont -dayfont -datefont \ -currentdatefont -startday -width -height } grid $itk_component(calendar) -row 0 -column 0 $itk_component(calendar) configure -cursor top_left_arrow # # The icon button will be used as the basis for the position of the # popup on the screen. We'll always attempt to locate the popup # off the lower right corner of the button. If that would put # the popup off the screen, then we'll put above the upper left. # set rootx [winfo rootx $itk_component(iconbutton)] set rooty [winfo rooty $itk_component(iconbutton)] set popupwidth [winfo reqwidth $itk_component(popup)] set popupheight [winfo reqheight $itk_component(popup)] set popupx [expr {$rootx + 3 + \ [winfo width $itk_component(iconbutton)]}] set popupy [expr {$rooty + 3 + \ [winfo height $itk_component(iconbutton)]}] if {(($popupx + $popupwidth) > [winfo screenwidth .]) || \ (($popupy + $popupheight) > [winfo screenheight .])} { set popupx [expr {$rootx - 3 - $popupwidth}] set popupy [expr {$rooty - 3 - $popupheight}] } # # Get the current date from the datefield widget and both # show and select it on the calendar. # # Added catch for bad dates. Calendar then shows current date. if [catch "$itk_component(calendar) show [get]" err] { $itk_component(calendar) show now $itk_component(calendar) select now } else { $itk_component(calendar) select [get] } # # Display the popup at the calculated position. # wm geometry $itk_component(popup) +$popupx+$popupy wm deiconify $itk_component(popup) tkwait visibility $itk_component(popup) # # Perform either a local or global grab based on the -grab option. # if {$itk_option(-grab) == "local"} { ::grab $itk_component(popup) } else { ::grab -global $itk_component(popup) } # # Make sure the widget is above all others and give it focus. # raise $itk_component(popup) focus $itk_component(calendar) } # ------------------------------------------------------------------ # PROTECTED METHOD: _popupGetDate # # This method is the callback for selection of a date on the # calendar. It releases the grab and sets the date in the # datefield widget. # ------------------------------------------------------------------ itcl::body iwidgets::Dateentry::_getPopupDate {date} { _releaseGrab show $date } # ------------------------------------------------------------------ # PROTECTED METHOD: _releaseGrabCheck rootx rooty # # This method handles mouse button 1 events. If the selection # occured within the bounds of the calendar, then return normally # and let the calendar handle the event. Otherwise, we'll drop # the calendar and release the grab. # ------------------------------------------------------------------ itcl::body iwidgets::Dateentry::_releaseGrabCheck {rootx rooty} { set calx [winfo rootx $itk_component(calendar)] set caly [winfo rooty $itk_component(calendar)] set calwidth [winfo reqwidth $itk_component(calendar)] set calheight [winfo reqheight $itk_component(calendar)] if {($rootx < $calx) || ($rootx > ($calx + $calwidth)) || \ ($rooty < $caly) || ($rooty > ($caly + $calheight))} { _releaseGrab return -code break } } # ------------------------------------------------------------------ # PROTECTED METHOD: _releaseGrab # # This method releases the grab, destroys the popup, changes the # relief of the button back to raised and reapplies the binding # to the icon button that engages the popup action. # ------------------------------------------------------------------ itcl::body iwidgets::Dateentry::_releaseGrab {} { ::grab release $itk_component(popup) $itk_component(iconbutton) configure -relief raised destroy $itk_component(popup) bind $itk_component(iconbutton) <Button-1> [itcl::code $this _popup] } ��������������������������������������������������������������������������������������iwidgets-4.1.1/generic/tclIndex���������������������������������������������������������������������0000644�0036047�0045461�00000377551�07334044000�015054� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Tcl autoload index file, version 2.0 # This file is generated by the "auto_mkindex" command # and sourced to set up indexing information for one or # more commands. Typically each line is a command that # sets an element in the auto_index array, where the # element name is the name of a command and the value is # a script that loads the command. set auto_index(::iwidgets::Extbutton) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::extbutton) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::bd) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::bitmap) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::command) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::defaultring) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::defaultringpad) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::image) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::imagepos) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::relief) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::state) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::text) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::constructor) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::flash) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::changeColor) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Extbutton::sink) [list source [file join $dir extbutton.itk]] set auto_index(::iwidgets::Buttonbox) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::buttonbox) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::constructor) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::destructor) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::pady) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::padx) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::orient) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::index) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::add) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::insert) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::delete) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::default) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::hide) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::show) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::invoke) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::buttonconfigure) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::buttoncget) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::_getMaxWidth) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::_getMaxHeight) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::_setBoxSize) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Buttonbox::_positionButtons) [list source [file join $dir buttonbox.itk]] set auto_index(::iwidgets::Calendar) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::calendar) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::constructor) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::command) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::days) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::backwardimage) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::forwardimage) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::weekdaybackground) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::weekendbackground) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::foreground) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::outline) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::buttonforeground) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::selectcolor) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::selectthickness) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::titlefont) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::datefont) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::currentdatefont) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::dayfont) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::startday) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::get) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::select) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::show) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_drawtext) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_configureHandler) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_change) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_redraw) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_days) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_layout) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_adjustday) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_select) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_selectEvent) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Calendar::_percentSubst) [list source [file join $dir calendar.itk]] set auto_index(::iwidgets::Canvasprintbox) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::canvasprintbox) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::printregion) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::output) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::printcmd) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::filename) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::pagesize) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::orient) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::stretch) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::posterize) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::hpagecnt) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::vpagecnt) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::constructor) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::setcanvas) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::getoutput) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::print) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::refresh) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::stop) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::_calc_poster_size) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::_calc_print_region) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::_calc_print_scale) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::_update_canvas) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::_update_attr) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::_mapEventHandler) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::destructor) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintbox::ezPaperInfo) [list source [file join $dir canvasprintbox.itk]] set auto_index(::iwidgets::Canvasprintdialog) [list source [file join $dir canvasprintdialog.itk]] set auto_index(::iwidgets::canvasprintdialog) [list source [file join $dir canvasprintdialog.itk]] set auto_index(::iwidgets::Canvasprintdialog::constructor) [list source [file join $dir canvasprintdialog.itk]] set auto_index(::iwidgets::Canvasprintdialog::deactivate) [list source [file join $dir canvasprintdialog.itk]] set auto_index(::iwidgets::Canvasprintdialog::getoutput) [list source [file join $dir canvasprintdialog.itk]] set auto_index(::iwidgets::Canvasprintdialog::setcanvas) [list source [file join $dir canvasprintdialog.itk]] set auto_index(::iwidgets::Canvasprintdialog::refresh) [list source [file join $dir canvasprintdialog.itk]] set auto_index(::iwidgets::Canvasprintdialog::print) [list source [file join $dir canvasprintdialog.itk]] set auto_index(::iwidgets::Checkbox) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::checkbox) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::constructor) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::orient) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::index) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::add) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::insert) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::delete) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::select) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::toggle) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::get) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::deselect) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::flash) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::buttonconfigure) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Checkbox::gettag) [list source [file join $dir checkbox.itk]] set auto_index(::iwidgets::Combobox) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::combobox) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::constructor) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::destructor) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::arrowrelief) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::completion) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::dropdown) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::editable) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::grab) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::listheight) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::margin) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::popupcursor) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::selectioncommand) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::state) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::unique) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::clear) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::curselection) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::delete) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::get) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::getcurselection) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::invoke) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::insert) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::justify) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::see) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::selection) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::size) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::sort) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::xview) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::yview) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_addToList) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_createComponents) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_deleteList) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_deleteText) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_doLayout) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_drawArrow) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_dropdownBtnRelease) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_ignoreNextBtnRelease) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_next) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_packComponents) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_positionList) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_postList) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_previous) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_resizeArrow) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_selectCmd) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_toggleList) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_unpostList) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_commonBindings) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_dropdownBindings) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_simpleBindings) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_listShowing) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_slbListbox) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_stateSelect) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_bs) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Combobox::_lookup) [list source [file join $dir combobox.itk]] set auto_index(::iwidgets::Dateentry) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::dateentry) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Dateentry::constructor) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Dateentry::icon) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Dateentry::grab) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Dateentry::state) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Dateentry::_getDefaultIcon) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Dateentry::_popup) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Dateentry::_getPopupDate) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Dateentry::_releaseGrabCheck) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Dateentry::_releaseGrab) [list source [file join $dir dateentry.itk]] set auto_index(::iwidgets::Datefield) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::datefield) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::constructor) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::childsitepos) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::command) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::iq) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::get) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::show) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::isvalid) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::_focusIn) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::_keyPress) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::_setField) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::_moveField) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::_whichField) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::_forward) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::_backward) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Datefield::_lastDay) [list source [file join $dir datefield.itk]] set auto_index(::iwidgets::Dialog) [list source [file join $dir dialog.itk]] set auto_index(::iwidgets::dialog) [list source [file join $dir dialog.itk]] set auto_index(::iwidgets::Dialog::constructor) [list source [file join $dir dialog.itk]] set auto_index(::iwidgets::Dialogshell) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::dialogshell) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::constructor) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::thickness) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::buttonboxpos) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::separator) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::padx) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::pady) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::childsite) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::index) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::add) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::insert) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::delete) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::hide) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::show) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::default) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::invoke) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::buttonconfigure) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Dialogshell::buttoncget) [list source [file join $dir dialogshell.itk]] set auto_index(::iwidgets::Disjointlistbox) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::disjointlistbox) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::constructor) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::listboxClick) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::listboxDblClick) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::transfer) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::getlhs) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::getrhs) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::insertrhs) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::insertlhs) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::clear) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::insert) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::remove) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::showCount) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::setlhs) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::setrhs) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::lhs) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::rhs) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Disjointlistbox::buttonplacement) [list source [file join $dir disjointlistbox.itk]] set auto_index(::iwidgets::Entryfield) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::numeric) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::integer) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::alphabetic) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::alphanumeric) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::hexidecimal) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::real) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::entryfield) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::constructor) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::command) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::focuscommand) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::validate) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::invalid) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::pasting) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::fixed) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::childsitepos) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::childsite) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::get) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::delete) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::icursor) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::index) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::insert) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::scan) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::selection) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::xview) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::clear) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::numeric) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::integer) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::alphabetic) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::alphanumeric) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::hexidecimal) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::real) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::_peek) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::_focusCommand) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Entryfield::_keyPress) [list source [file join $dir entryfield.itk]] set auto_index(::iwidgets::Extfileselectionbox) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::extfileselectionbox) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::constructor) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::destructor) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::childsitepos) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::fileson) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::dirson) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::selectionon) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::filteron) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::mask) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::directory) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::nomatchstring) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::dirsearchcommand) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::filesearchcommand) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::selectioncommand) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::filtercommand) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::selectdircommand) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::selectfilecommand) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::invalid) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::filetype) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::width) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::height) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::childsite) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::get) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::filter) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_updateLists) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_setFilter) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_setSelection) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_setDirList) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_setFileList) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_selectDir) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_dblSelectDir) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_selectFile) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_selectSelection) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_selectFilter) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_packComponents) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_nPos) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_sPos) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_ePos) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_wPos) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_topPos) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectionbox::_bottomPos) [list source [file join $dir extfileselectionbox.itk]] set auto_index(::iwidgets::Extfileselectiondialog) [list source [file join $dir extfileselectiondialog.itk]] set auto_index(::iwidgets::extfileselectiondialog) [list source [file join $dir extfileselectiondialog.itk]] set auto_index(::iwidgets::Extfileselectiondialog::constructor) [list source [file join $dir extfileselectiondialog.itk]] set auto_index(::iwidgets::Extfileselectiondialog::childsite) [list source [file join $dir extfileselectiondialog.itk]] set auto_index(::iwidgets::Extfileselectiondialog::get) [list source [file join $dir extfileselectiondialog.itk]] set auto_index(::iwidgets::Extfileselectiondialog::filter) [list source [file join $dir extfileselectiondialog.itk]] set auto_index(::iwidgets::Extfileselectiondialog::_dbldir) [list source [file join $dir extfileselectiondialog.itk]] set auto_index(::iwidgets::Feedback) [list source [file join $dir feedback.itk]] set auto_index(::iwidgets::feedback) [list source [file join $dir feedback.itk]] set auto_index(::iwidgets::Feedback::constructor) [list source [file join $dir feedback.itk]] set auto_index(::iwidgets::Feedback::destructor) [list source [file join $dir feedback.itk]] set auto_index(::iwidgets::Feedback::steps) [list source [file join $dir feedback.itk]] set auto_index(::iwidgets::Feedback::_display) [list source [file join $dir feedback.itk]] set auto_index(::iwidgets::Feedback::reset) [list source [file join $dir feedback.itk]] set auto_index(::iwidgets::Feedback::step) [list source [file join $dir feedback.itk]] set auto_index(::iwidgets::Fileselectionbox) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::fileselectionbox) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::constructor) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::destructor) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::childsitepos) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::fileson) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::dirson) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::selectionon) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::filteron) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::mask) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::directory) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::nomatchstring) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::dirsearchcommand) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::filesearchcommand) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::selectioncommand) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::filtercommand) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::selectdircommand) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::selectfilecommand) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::invalid) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::filetype) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::width) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::height) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::childsite) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::get) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::filter) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_updateLists) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_setFilter) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_setSelection) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_setDirList) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_setFileList) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_selectDir) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_dblSelectDir) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_selectFile) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_selectSelection) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_selectFilter) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_packComponents) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_nPos) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_sPos) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_ePos) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_wPos) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_topPos) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_centerPos) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectionbox::_bottomPos) [list source [file join $dir fileselectionbox.itk]] set auto_index(::iwidgets::Fileselectiondialog) [list source [file join $dir fileselectiondialog.itk]] set auto_index(::iwidgets::fileselectiondialog) [list source [file join $dir fileselectiondialog.itk]] set auto_index(::iwidgets::Fileselectiondialog::constructor) [list source [file join $dir fileselectiondialog.itk]] set auto_index(::iwidgets::Fileselectiondialog::childsite) [list source [file join $dir fileselectiondialog.itk]] set auto_index(::iwidgets::Fileselectiondialog::get) [list source [file join $dir fileselectiondialog.itk]] set auto_index(::iwidgets::Fileselectiondialog::filter) [list source [file join $dir fileselectiondialog.itk]] set auto_index(::iwidgets::Fileselectiondialog::_dbldir) [list source [file join $dir fileselectiondialog.itk]] set auto_index(::iwidgets::Finddialog) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::finddialog) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::constructor) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::clearcommand) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::matchcommand) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::patternbackground) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::patternforeground) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::searchforeground) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::searchbackground) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::textwidget) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::clear) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::find) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::_get) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Finddialog::_textExists) [list source [file join $dir finddialog.itk]] set auto_index(::iwidgets::Hierarchy) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::hierarchy) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::constructor) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::destructor) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::font) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::selectbackground) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::selectforeground) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::markbackground) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::markforeground) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::querycommand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::selectcommand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::dblclickcommand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::iconcommand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::icondblcommand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::imagecommand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::imagedblcommand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::alwaysquery) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::filter) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::expanded) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::openicon) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::closedicon) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::nodeicon) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::width) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::height) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::visibleitems) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::textmenuloadcommand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::imagemenuloadcommand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::clear) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::selection) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::mark) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::current) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::expand) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::collapse) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::toggle) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::prune) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::draw) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::refresh) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::bbox) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::compare) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::delete) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::dump) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::dlineinfo) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::get) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::index) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::insert) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::scan) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::search) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::see) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::tag) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::window) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::xview) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::yview) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::expanded) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::expState) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_drawLevel) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_contents) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_post) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_imagePost) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_select) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_double) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_iconSelect) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_iconDblSelect) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_imageSelect) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_imageDblClick) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_deselectSubNodes) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_deleteNodeInfo) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_getParent) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_getHeritage) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hierarchy::_isInternalTag) [list source [file join $dir hierarchy.itk]] set auto_index(::iwidgets::Hyperhelp) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::hyperhelp) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::constructor) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::topics) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::title) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::helpdir) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::closecmd) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::showtopic) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::followlink) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::forward) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::back) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::updatefeedback) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::_readtopic) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::_fill_go_menu) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::_pageforward) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::_pageback) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::_lineforward) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Hyperhelp::_lineback) [list source [file join $dir hyperhelp.itk]] set auto_index(::iwidgets::Labeledframe) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::labeledframe) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::constructor) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::destructor) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::ipadx) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::ipady) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::labelmargin) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::labelpos) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::_initTable) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::childsite) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::_positionLabel) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::_collapseMargin) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledframe::_setMarginThickness) [list source [file join $dir labeledframe.itk]] set auto_index(::iwidgets::Labeledwidget) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::alignlabels) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::labeledwidget) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::constructor) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::destructor) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::disabledforeground) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::labelpos) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::labelmargin) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::labeltext) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::labelvariable) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::labelbitmap) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::labelimage) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::state) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::childsite) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::alignlabels) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Labeledwidget::_positionLabel) [list source [file join $dir labeledwidget.itk]] set auto_index(::iwidgets::Mainwindow) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::mainwindow) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Mainwindow::constructor) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Mainwindow::helpline) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Mainwindow::statusline) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Mainwindow::childsite) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Mainwindow::menubar) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Mainwindow::toolbar) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Mainwindow::mousebar) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Mainwindow::msgd) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Mainwindow::_exitCB) [list source [file join $dir mainwindow.itk]] set auto_index(::iwidgets::Menubar) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::menubar) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::constructor) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::foreground) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::activebackground) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::activeborderwidth) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::activeforeground) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::anchor) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::borderwidth) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::disabledforeground) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::font) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::highlightbackground) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::highlightcolor) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::highlightthickness) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::justify) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::padx) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::pady) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::wraplength) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::menubuttons) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::helpvariable) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::add) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::delete) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::index) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::insert) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::invoke) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::menucget) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::menuconfigure) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::path) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::type) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::yposition) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::menubutton) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::options) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::command) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::checkbutton) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::radiobutton) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::separator) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::cascade) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_addMenuButton) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_insertMenuButton) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_makeMenuButton) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_makeMenu) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_substEvalStr) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_deleteMenu) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_deleteAMenu) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_addEntry) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_addCascade) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_insertEntry) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_insertCascade) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_deleteEntry) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_configureMenu) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_configureMenuOption) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_configureMenuEntry) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_unsetPaths) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_entryPathToTkMenuPath) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_getTkIndex) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_getPdIndex) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_getMenuList) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_getEntryList) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_parsePath) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_getSymbolicPath) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_helpHandler) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::Menubar::_getCallerLevel) [list source [file join $dir menubar.itk]] set auto_index(tkMenuFind) [list source [file join $dir menubar.itk]] set auto_index(::iwidgets::MsgType) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::messagebox) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox::constructor) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox::destructor) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox::clear) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox::type) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox::issue) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox::save) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox::find) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox::_post) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagebox::export) [list source [file join $dir messagebox.itk]] set auto_index(::iwidgets::Messagedialog) [list source [file join $dir messagedialog.itk]] set auto_index(::iwidgets::messagedialog) [list source [file join $dir messagedialog.itk]] set auto_index(::iwidgets::Messagedialog::constructor) [list source [file join $dir messagedialog.itk]] set auto_index(::iwidgets::Messagedialog::imagepos) [list source [file join $dir messagedialog.itk]] set auto_index(::iwidgets::Notebook) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::notebook) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::constructor) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::background) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::auto) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::scrollcommand) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::add) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::childsite) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::delete) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::index) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::insert) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::prev) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::next) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::pageconfigure) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::pagecget) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::select) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::view) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::_childSites) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::_scrollCommand) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::_index) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::_createPage) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::_deletePages) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::_configurePages) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Notebook::_tabCommand) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Page) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Page::constructor) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Page::disabledforeground) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Page::label) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Page::command) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Page::childsite) [list source [file join $dir notebook.itk]] set auto_index(::iwidgets::Optionmenu) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::optionmenu) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::constructor) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::destructor) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::clicktime) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::command) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::cyclicon) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::width) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::font) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::borderwidth) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::highlightthickness) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::state) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::index) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::delete) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::disable) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::enable) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::get) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::insert) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::select) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::popupMenu) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::sort) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::_buttonRelease) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::_getNextItem) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::_next) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::_previous) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::_postMenu) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::_setItem) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::_setitems) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Optionmenu::_setSize) [list source [file join $dir optionmenu.itk]] set auto_index(::iwidgets::Pane) [list source [file join $dir pane.itk]] set auto_index(::iwidgets::pane) [list source [file join $dir pane.itk]] set auto_index(::iwidgets::Pane::constructor) [list source [file join $dir pane.itk]] set auto_index(::iwidgets::Pane::minimum) [list source [file join $dir pane.itk]] set auto_index(::iwidgets::Pane::margin) [list source [file join $dir pane.itk]] set auto_index(::iwidgets::Pane::childSite) [list source [file join $dir pane.itk]] set auto_index(::iwidgets::Panedwindow) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::panedwindow) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::constructor) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::orient) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::sashborderwidth) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::sashcursor) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::sashwidth) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::sashheight) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::thickness) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::sashindent) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::index) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::childsite) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::fraction) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::add) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::insert) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::delete) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::hide) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::show) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::paneconfigure) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::reset) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_pwConfigureEventHandler) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_startGrip) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_endGrip) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_configGrip) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_handleGrip) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_moveSash) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_setFracArray) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_setActivePanes) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_calcFraction) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_makeSashes) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_placeSash) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Panedwindow::_placePanes) [list source [file join $dir panedwindow.itk]] set auto_index(::iwidgets::Promptdialog) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::promptdialog) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::constructor) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::get) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::clear) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::insert) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::delete) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::icursor) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::index) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::scan) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::selection) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Promptdialog::xview) [list source [file join $dir promptdialog.itk]] set auto_index(::iwidgets::Pushbutton) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::pushbutton) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::constructor) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::destructor) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::padx) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::pady) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::font) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::text) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::bitmap) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::image) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::highlightthickness) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::borderwidth) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::defaultring) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::defaultringpad) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::height) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::width) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::flash) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::invoke) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Pushbutton::_relayout) [list source [file join $dir pushbutton.itk]] set auto_index(::iwidgets::Radiobox) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::radiobox) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::constructor) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::command) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::orient) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::index) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::add) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::insert) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::_rearrange) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::delete) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::select) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::get) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::deselect) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::flash) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::buttonconfigure) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::_command) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Radiobox::gettag) [list source [file join $dir radiobox.itk]] set auto_index(::iwidgets::Regexpfield) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::regexpfield) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::constructor) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::command) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::focuscommand) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::regexp) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::invalid) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::fixed) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::childsitepos) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::nocase) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::childsite) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::get) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::delete) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::icursor) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::index) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::insert) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::scan) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::selection) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::xview) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::clear) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::_peek) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::_focusCommand) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Regexpfield::_keyPress) [list source [file join $dir regexpfield.itk]] set auto_index(::iwidgets::Scrolledcanvas) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::scrolledcanvas) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::constructor) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::destructor) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::autoresize) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::childsite) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::justify) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::addtag) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::bbox) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::bind) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::canvasx) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::canvasy) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::coords) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::create) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::dchars) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::delete) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::dtag) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::find) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::focus) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::gettags) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::icursor) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::index) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::insert) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::itemconfigure) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::itemcget) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::lower) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::move) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::postscript) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::raise) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::scale) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::scan) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::select) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::type) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::xview) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledcanvas::yview) [list source [file join $dir scrolledcanvas.itk]] set auto_index(::iwidgets::Scrolledframe) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::scrolledframe) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::Scrolledframe::constructor) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::Scrolledframe::destructor) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::Scrolledframe::childsite) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::Scrolledframe::justify) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::Scrolledframe::xview) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::Scrolledframe::yview) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::Scrolledframe::_configureCanvas) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::Scrolledframe::_configureFrame) [list source [file join $dir scrolledframe.itk]] set auto_index(::iwidgets::Scrolledhtml) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::scrolledhtml) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::constructor) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::destructor) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::fontsize) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::fixedfont) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::fontname) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::textbackground) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::linkhighlight) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::unknownimage) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::update) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::clear) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::import) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::render) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_setup) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_definefont) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_append_text) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_set_tag) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_reconfig_tags) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_push) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_pop) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_peek) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_parse_fields) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_href_click) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_set_align) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_fixtablewidth) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_header) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_/header) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_a) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/a) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_address) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/address) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_b) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/b) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_base) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_basefont) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_big) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/big) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_blockquote) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/blockquote) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_body) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/body) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_br) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_center) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/center) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_cite) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/cite) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_code) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/code) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_dir) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/dir) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_div) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_dl) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/dl) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_dt) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_dd) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_dfn) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/dfn) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_em) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/em) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_font) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/font) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_h1) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/h1) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_h2) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/h2) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_h3) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/h3) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_h4) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/h4) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_h5) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/h5) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_h6) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/h6) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_hr) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_i) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/i) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_img) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_kbd) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/kbd) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_li) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_listing) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/listing) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_menu) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/menu) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_ol) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/ol) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_p) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_pre) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/pre) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_samp) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/samp) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_small) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/small) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_sub) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/sub) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_sup) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/sup) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_strong) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/strong) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_table) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/table) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_td) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/td) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_th) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/th) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_title) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/title) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_tr) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/tr) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_tt) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/tt) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_u) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/u) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_ul) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/ul) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_var) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledhtml::_entity_/var) [list source [file join $dir scrolledhtml.itk]] set auto_index(::iwidgets::Scrolledlistbox) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::scrolledlistbox) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::constructor) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::destructor) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::dblclickcommand) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::selectioncommand) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::width) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::height) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::visibleitems) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::state) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::curselection) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::activate) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::bbox) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::clear) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::see) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::index) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::_fixIndex) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::delete) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::get) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::getcurselection) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::insert) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::nearest) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::scan) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::selection) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::size) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::selecteditemcount) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::justify) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::sort) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::xview) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::yview) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::itemconfigure) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::_makeSelection) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledlistbox::_dblclick) [list source [file join $dir scrolledlistbox.itk]] set auto_index(::iwidgets::Scrolledtext) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::scrolledtext) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::constructor) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::destructor) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::width) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::height) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::visibleitems) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::childsite) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::bbox) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::clear) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::import) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::export) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::compare) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::debug) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::delete) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::dlineinfo) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::get) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::image) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::index) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::insert) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::mark) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::scan) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::search) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::see) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::tag) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::window) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::xview) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledtext::yview) [list source [file join $dir scrolledtext.itk]] set auto_index(::iwidgets::Scrolledwidget) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::scrolledwidget) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::constructor) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::destructor) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::sbwidth) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::scrollmargin) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::vscrollmode) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::hscrollmode) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::width) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::height) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::_vertScrollbarDisplay) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::_horizScrollbarDisplay) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::_scrollWidget) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Scrolledwidget::_configureEvent) [list source [file join $dir scrolledwidget.itk]] set auto_index(::iwidgets::Selectionbox) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::selectionbox) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::constructor) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::destructor) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::childsitepos) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::margin) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::itemson) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::selectionon) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::width) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::height) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::childsite) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::get) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::curselection) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::clear) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::insert) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::delete) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::size) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::scan) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::nearest) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::index) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::selection) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::selectitem) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectionbox::_packComponents) [list source [file join $dir selectionbox.itk]] set auto_index(::iwidgets::Selectiondialog) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::selectiondialog) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::constructor) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::childsite) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::get) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::curselection) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::clear) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::insert) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::delete) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::size) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::scan) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::nearest) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::index) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::selection) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Selectiondialog::selectitem) [list source [file join $dir selectiondialog.itk]] set auto_index(::iwidgets::Shell) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::shell) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::constructor) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::master) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::modality) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::padx) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::pady) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::width) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::height) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::childsite) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::activate) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::deactivate) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Shell::center) [list source [file join $dir shell.itk]] set auto_index(::iwidgets::Spindate) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::spindate) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::constructor) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::destructor) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::labelpos) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::orient) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::monthon) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::dayon) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::yearon) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::datemargin) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::yeardigits) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::monthformat) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::get) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::show) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::_spinMonth) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::_spinDay) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::_packDate) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spindate::_lastDay) [list source [file join $dir spindate.itk]] set auto_index(::iwidgets::Spinint) [list source [file join $dir spinint.itk]] set auto_index(::iwidgets::spinint) [list source [file join $dir spinint.itk]] set auto_index(::iwidgets::Spinint::constructor) [list source [file join $dir spinint.itk]] set auto_index(::iwidgets::Spinint::range) [list source [file join $dir spinint.itk]] set auto_index(::iwidgets::Spinint::step) [list source [file join $dir spinint.itk]] set auto_index(::iwidgets::Spinint::wrap) [list source [file join $dir spinint.itk]] set auto_index(::iwidgets::Spinint::up) [list source [file join $dir spinint.itk]] set auto_index(::iwidgets::Spinint::down) [list source [file join $dir spinint.itk]] set auto_index(::iwidgets::Spinner) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::spinner) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::constructor) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::destructor) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::arroworient) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::textfont) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::highlightthickness) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::borderwidth) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::increment) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::decrement) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::repeatinterval) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::repeatdelay) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::foreground) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::up) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::down) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::_positionArrows) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::_pushup) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::_pushdown) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::_doup) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::_dodown) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::_relup) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::_reldown) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::_up) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spinner::_down) [list source [file join $dir spinner.itk]] set auto_index(::iwidgets::Spintime) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::spintime) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::constructor) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::destructor) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::orient) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::labelpos) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::houron) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::minuteon) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::secondon) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::timemargin) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::militaryon) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::get) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::show) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::_packTime) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Spintime::_down60) [list source [file join $dir spintime.itk]] set auto_index(::iwidgets::Tabnotebook) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::constructor) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::tabnotebook) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::destructor) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::borderwidth) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::state) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::disabledforeground) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::scrollcommand) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::equaltabs) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::font) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::width) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::height) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::foreground) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::background) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::tabforeground) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::tabbackground) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::backdrop) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::margin) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::tabborders) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::bevelamount) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::raiseselect) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::auto) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::start) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::padx) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::pady) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::gap) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::angle) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::tabpos) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::configure) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::add) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::childsite) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::delete) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::index) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::insert) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::prev) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::next) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::pageconfigure) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::select) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::view) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::_getArgs) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::_reconfigureTabset) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::_canvasReconfigure) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::_redrawBorder) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::_recomputeBorder) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::_pageReconfigure) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::_pack) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabnotebook::_resize) [list source [file join $dir tabnotebook.itk]] set auto_index(::iwidgets::Tabset) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::tabset) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::constructor) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::destructor) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::width) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::equaltabs) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::height) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::tabpos) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::raiseselect) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::start) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::margin) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::tabborders) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::bevelamount) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::padx) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::pady) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::gap) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::angle) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::font) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::state) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::disabledforeground) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::foreground) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::background) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::selectforeground) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::backdrop) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::selectbackground) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::command) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::add) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::configure) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_configRelayout) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::delete) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::index) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::insert) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::prev) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::next) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::select) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::tabcget) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::tabconfigure) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_selectName) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_createTab) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_deleteTabs) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_index) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_tabConfigure) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_relayoutTabs) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_drawBevelBorder) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_calcNextTabOffset) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_tabBounds) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_recalcCanvasGeom) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_canvasReconfigure) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_startMove) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_moveTabs) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tabset::_endMove) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::constructor) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::destructor) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::bevelamount) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::state) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::height) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::width) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::anchor) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::left) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::top) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::image) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::bitmap) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::label) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::padx) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::pady) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::selectbackground) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::selectforeground) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::disabledforeground) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::background) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::foreground) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::orient) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::invert) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::angle) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::font) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::tabborders) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::configure) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::bbox) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::deselect) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::lower) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::majordim) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::minordim) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::offset) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::raise) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::select) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::labelheight) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::labelwidth) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::_selectNoRaise) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::_deselectNoLower) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::_makeTab) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::_createLabel) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::_makeEastTab) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::_makeWestTab) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::_makeNorthTab) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::_makeSouthTab) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Tab::_calcLabelDim) [list source [file join $dir tabset.itk]] set auto_index(::iwidgets::Timeentry) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::timeentry) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::Timeentry::constructor) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::Timeentry::icon) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::Timeentry::grab) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::Timeentry::state) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::Timeentry::_getDefaultIcon) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::Timeentry::_popup) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::Timeentry::_getPopupTime) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::Timeentry::_releaseGrab) [list source [file join $dir timeentry.itk]] set auto_index(::iwidgets::Timefield) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::timefield) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::constructor) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::childsitepos) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::command) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::iq) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::format) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::gmt) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::state) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::get) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::show) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::isvalid) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_focusIn) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_keyPress) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_toggleAmPm) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_setField) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_moveField) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_whichField) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_forwardCivilian) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_forwardMilitary) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_backwardCivilian) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Timefield::_backwardMilitary) [list source [file join $dir timefield.itk]] set auto_index(::iwidgets::Toolbar) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::constructor) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::toolbar) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::destructor) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::balloonbackground) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::balloonforeground) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::balloonfont) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::orient) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::add) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::delete) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::index) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::insert) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::itemcget) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::itemconfigure) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::_resetBalloonTimer) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::_startBalloonDelay) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::_stopBalloonDelay) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::_addWidget) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::_deleteWidgets) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::_index) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::hideHelp) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::showHelp) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::showBalloon) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::hideBalloon) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::_getAttachedOption) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::_setAttachedOption) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Toolbar::_packToolbar) [list source [file join $dir toolbar.itk]] set auto_index(::iwidgets::Watch) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::watch) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::constructor) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::destructor) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::_handReleaseCB) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::_handMotionCB) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::get) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::watch) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::_drawHand) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::show) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::_displayClock) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::state) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::showampm) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::pivotcolor) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::clockstipple) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::clockcolor) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::hourcolor) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::minutecolor) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::secondcolor) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::tickcolor) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::hourradius) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::minuteradius) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::Watch::secondradius) [list source [file join $dir watch.itk]] set auto_index(::iwidgets::colors::rgbToNumeric) [list source [file join $dir colors.itcl]] set auto_index(::iwidgets::colors::rgbToHsb) [list source [file join $dir colors.itcl]] set auto_index(::iwidgets::colors::hsbToRgb) [list source [file join $dir colors.itcl]] set auto_index(::iwidgets::colors::topShadow) [list source [file join $dir colors.itcl]] set auto_index(::iwidgets::colors::bottomShadow) [list source [file join $dir colors.itcl]] set auto_index(::iwidgets::roman2) [list source [file join $dir roman.itcl]] set auto_index(::iwidgets::roman) [list source [file join $dir roman.itcl]] set auto_index(::iwidgets::Scopedobject) [list source [file join $dir scopedobject.itcl]] set auto_index(::iwidgets::scopedobject) [list source [file join $dir scopedobject.itcl]] set auto_index(::iwidgets::Scopedobject::constructor) [list source [file join $dir scopedobject.itcl]] set auto_index(::iwidgets::Scopedobject::destructor) [list source [file join $dir scopedobject.itcl]] set auto_index(::iwidgets::Scopedobject::_traceCommand) [list source [file join $dir scopedobject.itcl]] set auto_index(::iwidgets::Scopedobject::enterscopecommand) [list source [file join $dir scopedobject.itcl]] set auto_index(::iwidgets::Scopedobject::exitscopecommand) [list source [file join $dir scopedobject.itcl]] �������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/mainwindow.itk���������������������������������������������������������������0000644�0036047�0045461�00000024574�07334044000�016236� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Mainwindow # ---------------------------------------------------------------------- # This class implements a mainwindow containing a menubar, toolbar, # mousebar, childsite, status line, and help line. Each item may # be filled and configured to suit individual needs. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) RCS: $Id: mainwindow.itk,v 1.2 2001/08/07 19:56:48 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # ------------------------------------------------------------------ # MAINWINDOW # ------------------------------------------------------------------ itcl::class iwidgets::Mainwindow { inherit iwidgets::Shell constructor {args} {} itk_option define -helpline helpLine HelpLine 1 itk_option define -statusline statusLine StatusLine 1 public { method childsite {} method menubar {args} method mousebar {args} method msgd {args} method toolbar {args} } protected { method _exitCB {} common _helpVar common _statusVar } } # # Provide a lowercased access method for the ::iwidgets::Mainwindow class. # proc iwidgets::mainwindow {pathName args} { uplevel ::iwidgets::Mainwindow $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Mainwindow::constructor {args} { itk_option add hull.width hull.height pack propagate $itk_component(hull) no wm protocol $itk_component(hull) WM_DELETE_WINDOW [itcl::code $this _exitCB] # # Create a menubar, renaming the font, foreground, and background # so they may be separately set. The help variable will be setup # as well. # itk_component add menubar { iwidgets::Menubar $itk_interior.menubar \ -helpvariable [itcl::scope _helpVar($this)] } { keep -disabledforeground -cursor \ -highlightbackground -highlightthickness rename -font \ -menubarfont menuBarFont Font rename -foreground \ -menubarforeground menuBarForeground Foreground rename -background \ -menubarbackground menuBarBackground Background } # # Add a toolbar beneath the menubar. # itk_component add toolbar { iwidgets::Toolbar $itk_interior.toolbar -orient horizontal \ -helpvariable [itcl::scope _helpVar($this)] } { keep -balloonbackground -balloondelay1 -balloondelay2 \ -balloonfont -balloonforeground -disabledforeground -cursor \ -highlightbackground -highlightthickness rename -font -toolbarfont toolbarFont Font rename -foreground -toolbarforeground toolbarForeground Foreground rename -background -toolbarbackground toolbarBackground Background } # # Add a mouse bar on the left. # itk_component add mousebar { iwidgets::Toolbar $itk_interior.mousebar -orient vertical \ -helpvariable [itcl::scope _helpVar($this)] } { keep -balloonbackground -balloondelay1 -balloondelay2 \ -balloonfont -balloonforeground -disabledforeground -cursor \ -highlightbackground -highlightthickness rename -font -toolbarfont toolbarFont Font rename -foreground -toolbarforeground toolbarForeground Foreground rename -background -toolbarbackground toolbarBackground Background } # # Create the childsite window window. # itk_component add -protected mwchildsite { frame $itk_interior.mwchildsite } # # Add the help and system status lines # itk_component add -protected lineframe { frame $itk_interior.lineframe } itk_component add help { label $itk_component(lineframe).help \ -textvariable [itcl::scope _helpVar($this)] \ -relief sunken -borderwidth 2 -width 10 } itk_component add status { label $itk_component(lineframe).status \ -textvariable [itcl::scope _statusVar($this)] \ -relief sunken -borderwidth 2 -width 10 } # # Create the message dialog for use throughout the mainwindow. # itk_component add msgd { iwidgets::Messagedialog $itk_interior.msgd -modality application } { usual ignore -modality } # # Use the grid to pack together the menubar, toolbar, mousebar, # childsite, and status area. # grid $itk_component(menubar) -row 0 -column 0 -columnspan 2 -sticky ew grid $itk_component(toolbar) -row 1 -column 0 -columnspan 2 -sticky ew grid $itk_component(mousebar) -row 2 -column 0 -sticky ns grid $itk_component(mwchildsite) -row 2 -column 1 -sticky nsew \ -padx 5 -pady 5 grid $itk_component(lineframe) -row 3 -column 0 -columnspan 2 -sticky ew grid columnconfigure $itk_interior 1 -weight 1 grid rowconfigure $itk_interior 2 -weight 1 # # Set the interior to be the childsite for derived classes. # set itk_interior $itk_component(mwchildsite) # # Initialize all the configuration options. # eval itk_initialize $args } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -helpline # # Specifies whether or not to display the help line. The value # may be given in any of the forms acceptable to Tk_GetBoolean. # ------------------------------------------------------------------ itcl::configbody iwidgets::Mainwindow::helpline { if {$itk_option(-helpline)} { pack $itk_component(help) -side left -fill x -expand yes -padx 2 } else { pack forget $itk_component(help) } } # ------------------------------------------------------------------ # OPTION: -statusline # # Specifies whether or not to display the status line. The value # may be given in any of the forms acceptable to Tk_GetBoolean. # ------------------------------------------------------------------ itcl::configbody iwidgets::Mainwindow::statusline { if {$itk_option(-statusline)} { pack $itk_component(status) -side right -fill x -expand yes -padx 2 } else { pack forget $itk_component(status) } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: childsite # # Return the childsite widget. # ------------------------------------------------------------------ itcl::body iwidgets::Mainwindow::childsite {} { return $itk_component(mwchildsite) } # ------------------------------------------------------------------ # METHOD: menubar ?args? # # Evaluate the args against the Menubar component. # ------------------------------------------------------------------ itcl::body iwidgets::Mainwindow::menubar {args} { if {[llength $args] == 0} { return $itk_component(menubar) } else { return [eval $itk_component(menubar) $args] } } # ------------------------------------------------------------------ # METHOD: toolbar ?args? # # Evaluate the args against the Toolbar component. # ------------------------------------------------------------------ itcl::body iwidgets::Mainwindow::toolbar {args} { if {[llength $args] == 0} { return $itk_component(toolbar) } else { return [eval $itk_component(toolbar) $args] } } # ------------------------------------------------------------------ # METHOD: mousebar ?args? # # Evaluate the args against the Mousebar component. # ------------------------------------------------------------------ itcl::body iwidgets::Mainwindow::mousebar {args} { if {[llength $args] == 0} { return $itk_component(mousebar) } else { return [eval $itk_component(mousebar) $args] } } # ------------------------------------------------------------------ # METHOD: msgd ?args? # # Evaluate the args against the Messagedialog component. # ------------------------------------------------------------------ itcl::body iwidgets::Mainwindow::msgd {args} { if {[llength $args] == 0} { return $itk_component(msgd) } else { return [eval $itk_component(msgd) $args] } } # ------------------------------------------------------------------ # PRIVATE METHOD: _exitCB # # Menu callback for the exit option from the file menu. The method # confirms the user's request to exit the application prior to # taking the action. # ------------------------------------------------------------------ itcl::body iwidgets::Mainwindow::_exitCB {} { # # Configure the message dialog for confirmation of the exit request. # msgd configure -title Confirmation -bitmap questhead \ -text "Exit confirmation\n\ Are you sure ?" msgd buttonconfigure OK -text Yes msgd buttonconfigure Cancel -text No msgd default Cancel msgd center $itk_component(hull) # # Activate the message dialog and given a positive response # proceed to exit the application # if {[msgd activate]} { ::exit } } ������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/extfileselectionbox.itk������������������������������������������������������0000644�0036047�0045461�00000116465�10417004216�020143� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Extfileselectionbox # ---------------------------------------------------------------------- # Implements a file selection box that is a slightly extended version # of the OSF/Motif standard XmExtfileselectionbox composite widget. # The Extfileselectionbox differs from the Motif standard in that the # filter and selection fields are comboboxes and the files and directory # lists are in a paned window. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@spd.dsccc.com # Anthony L. Parent tony.parent@symbios.com # # @(#) $Id: extfileselectionbox.itk,v 1.6 2006/04/11 19:50:38 hobbs Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Extfileselectionbox { keep -activebackground -activerelief -background -borderwidth -cursor \ -elementborderwidth -foreground -highlightcolor -highlightthickness \ -insertbackground -insertborderwidth -insertofftime -insertontime \ -insertwidth -jump -labelfont -selectbackground -selectborderwidth \ -textbackground -textfont -troughcolor } # ------------------------------------------------------------------ # EXTFILESELECTIONBOX # ------------------------------------------------------------------ itcl::class iwidgets::Extfileselectionbox { inherit itk::Widget constructor {args} {} destructor {} itk_option define -childsitepos childSitePos Position s itk_option define -fileson filesOn FilesOn true itk_option define -dirson dirsOn DirsOn true itk_option define -selectionon selectionOn SelectionOn true itk_option define -filteron filterOn FilterOn true itk_option define -mask mask Mask {*} itk_option define -directory directory Directory {} itk_option define -automount automount Automount {} itk_option define -nomatchstring noMatchString NoMatchString {} itk_option define -dirsearchcommand dirSearchCommand Command {} itk_option define -filesearchcommand fileSearchCommand Command {} itk_option define -selectioncommand selectionCommand Command {} itk_option define -filtercommand filterCommand Command {} itk_option define -selectdircommand selectDirCommand Command {} itk_option define -selectfilecommand selectFileCommand Command {} itk_option define -invalid invalid Command {bell} itk_option define -filetype fileType FileType {regular} itk_option define -width width Width 350 itk_option define -height height Height 300 public { method childsite {} method get {} method filter {} } protected { method _packComponents {{when later}} method _updateLists {{when later}} } private { method _selectDir {} method _dblSelectDir {} method _selectFile {} method _selectSelection {} method _selectFilter {} method _setFilter {} method _setSelection {} method _setDirList {} method _setFileList {} method _nPos {} method _sPos {} method _ePos {} method _wPos {} method _topPos {} method _bottomPos {} variable _packToken "" ;# non-null => _packComponents pending variable _updateToken "" ;# non-null => _updateLists pending variable _pwd "." ;# present working dir variable _interior ;# original interior setting } } # # Provide a lowercased access method for the Extfileselectionbox class. # proc ::iwidgets::extfileselectionbox {pathName args} { uplevel ::iwidgets::Extfileselectionbox $pathName $args } # # Use option database to override default resources of base classes. # option add *Extfileselectionbox.borderWidth 2 widgetDefault option add *Extfileselectionbox.filterLabel Filter widgetDefault option add *Extfileselectionbox.dirsLabel Directories widgetDefault option add *Extfileselectionbox.filesLabel Files widgetDefault option add *Extfileselectionbox.selectionLabel Selection widgetDefault option add *Extfileselectionbox.width 350 widgetDefault option add *Extfileselectionbox.height 300 widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::constructor {args} { # # Add back to the hull width and height options and make the # borderwidth zero since we don't need it. # itk_option add hull.width hull.height component hull configure -borderwidth 0 set _interior $itk_interior # # Create the filter entry. # itk_component add filter { iwidgets::Combobox $itk_interior.filter -unique true \ -command [itcl::code $this _selectFilter] -exportselection 0 \ -labelpos nw -completion 0 } { usual rename -labeltext -filterlabel filterLabel Text } set cmd [$itk_component(filter) cget -command] set cmd "$cmd;[itcl::code $this _selectFilter]" $itk_component(filter) configure -command "$cmd" -selectioncommand "$cmd"; # # Create a paned window for the directory and file lists. # itk_component add listpane { iwidgets::Panedwindow $itk_interior.listpane -orient vertical } $itk_component(listpane) add dirs -margin 5 $itk_component(listpane) add files -margin 5 # # Create the directory list. # itk_component add dirs { iwidgets::Scrolledlistbox [$itk_component(listpane) childsite dirs].dirs \ -selectioncommand [itcl::code $this _selectDir] \ -selectmode single -exportselection 0 \ -visibleitems 1x1 -labelpos nw \ -hscrollmode static -vscrollmode static \ -dblclickcommand [itcl::code $this _dblSelectDir] } { usual rename -labeltext -dirslabel dirsLabel Text } grid $itk_component(dirs) -sticky nsew grid rowconfigure [$itk_component(listpane) childsite dirs] 0 -weight 1 grid columnconfigure [$itk_component(listpane) childsite dirs] 0 -weight 1 # # Create the files list. # itk_component add files { iwidgets::Scrolledlistbox [$itk_component(listpane) childsite files].files \ -selectioncommand [itcl::code $this _selectFile] \ -selectmode single -exportselection 0 \ -visibleitems 1x1 -labelpos nw \ -hscrollmode static -vscrollmode static } { usual rename -labeltext -fileslabel filesLabel Text } grid $itk_component(files) -sticky nsew grid rowconfigure [$itk_component(listpane) childsite files] 0 -weight 1 grid columnconfigure [$itk_component(listpane) childsite files] 0 -weight 1 # # Create the selection entry. # itk_component add selection { iwidgets::Combobox $itk_interior.selection -unique true \ -command [itcl::code $this _selectSelection] -exportselection 0 \ -labelpos nw -completion 0 } { usual rename -labeltext -selectionlabel selectionLabel Text } # # Create the child site widget. # itk_component add -protected childsite { frame $itk_interior.fsbchildsite } # # Set the interior variable to the childsite for derived classes. # set itk_interior $itk_component(childsite) # # Explicitly handle configs that may have been ignored earlier. # eval itk_initialize $args # # When idle, pack the childsite and update the lists. # _packComponents _updateLists } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::destructor {} { if {$_packToken != ""} {after cancel $_packToken} if {$_updateToken != ""} {after cancel $_updateToken} } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -childsitepos # # Specifies the position of the child site in the selection box. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::childsitepos { _packComponents } # ------------------------------------------------------------------ # OPTION: -fileson # # Specifies whether or not to display the files list. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::fileson { if {$itk_option(-fileson)} { $itk_component(listpane) show files _updateLists } else { $itk_component(listpane) hide files } } # ------------------------------------------------------------------ # OPTION: -dirson # # Specifies whether or not to display the dirs list. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::dirson { if {$itk_option(-dirson)} { $itk_component(listpane) show dirs _updateLists } else { $itk_component(listpane) hide dirs } } # ------------------------------------------------------------------ # OPTION: -selectionon # # Specifies whether or not to display the selection entry widget. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::selectionon { _packComponents } # ------------------------------------------------------------------ # OPTION: -filteron # # Specifies whether or not to display the filter entry widget. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::filteron { _packComponents } # ------------------------------------------------------------------ # OPTION: -mask # # Specifies the initial file mask string. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::mask { global tcl_platform set prefix $_pwd # # Remove automounter paths. # if {$tcl_platform(platform) == "unix"} { if {$itk_option(-automount) != {}} { foreach autoDir $itk_option(-automount) { # Use catch because we can't be sure exactly what strings # were passed into the -automount option catch { if {[regsub ^/$autoDir $prefix {} prefix] != 0} { break } } } } } set curFilter $itk_option(-mask); $itk_component(filter) delete entry 0 end $itk_component(filter) insert entry 0 [file join "$_pwd" $itk_option(-mask)] # # Make sure the right most text is visable. # [$itk_component(filter) component entry] xview moveto 1 } # ------------------------------------------------------------------ # OPTION: -directory # # Specifies the initial default directory. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::directory { if {$itk_option(-directory) != {}} { if {! [file exists $itk_option(-directory)]} { error "bad directory option \"$itk_option(-directory)\":\ directory does not exist" } set olddir [pwd] cd $itk_option(-directory) set _pwd [pwd] cd $olddir configure -mask $itk_option(-mask) _selectFilter } } # ------------------------------------------------------------------ # OPTION: -automount # # Specifies list of directory prefixes to ignore. Typically, this # option would be used with values such as: # -automount {export tmp_mnt} # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::automount { } # ------------------------------------------------------------------ # OPTION: -nomatchstring # # Specifies the string to be displayed in the files list should # not regular files exist in the directory. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::nomatchstring { } # ------------------------------------------------------------------ # OPTION: -dirsearchcommand # # Specifies a command to be executed to perform a directory search. # The command will receive the current working directory and filter # mask as arguments. The command should return a list of files which # will be placed into the directory list. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::dirsearchcommand { } # ------------------------------------------------------------------ # OPTION: -filesearchcommand # # Specifies a command to be executed to perform a file search. # The command will receive the current working directory and filter # mask as arguments. The command should return a list of files which # will be placed into the file list. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::filesearchcommand { } # ------------------------------------------------------------------ # OPTION: -selectioncommand # # Specifies a command to be executed upon pressing return in the # selection entry widget. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::selectioncommand { } # ------------------------------------------------------------------ # OPTION: -filtercommand # # Specifies a command to be executed upon pressing return in the # filter entry widget. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::filtercommand { } # ------------------------------------------------------------------ # OPTION: -selectdircommand # # Specifies a command to be executed following selection of a # directory in the directory list. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::selectdircommand { } # ------------------------------------------------------------------ # OPTION: -selectfilecommand # # Specifies a command to be executed following selection of a # file in the files list. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::selectfilecommand { } # ------------------------------------------------------------------ # OPTION: -invalid # # Specify a command to executed should the filter contents be # proven invalid. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::invalid { } # ------------------------------------------------------------------ # OPTION: -filetype # # Specify the type of files which may appear in the file list. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::filetype { switch $itk_option(-filetype) { regular - directory - any { } default { error "bad filetype option \"$itk_option(-filetype)\":\ should be regular, directory, or any" } } _updateLists } # ------------------------------------------------------------------ # OPTION: -width # # Specifies the width of the file selection box. The value may be # specified in any of the forms acceptable to Tk_GetPixels. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::width { # # The width option was added to the hull in the constructor. # So, any width value given is passed automatically to the # hull. All we have to do is play with the propagation. # if {$itk_option(-width) != 0} { set propagate 0 } else { set propagate 1 } # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $itk_component(hull)] != $propagate} { grid propagate $itk_component(hull) $propagate } } # ------------------------------------------------------------------ # OPTION: -height # # Specifies the height of the file selection box. The value may be # specified in any of the forms acceptable to Tk_GetPixels. # ------------------------------------------------------------------ itcl::configbody iwidgets::Extfileselectionbox::height { # # The height option was added to the hull in the constructor. # So, any height value given is passed automatically to the # hull. All we have to do is play with the propagation. # if {$itk_option(-height) != 0} { set propagate 0 } else { set propagate 1 } # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $itk_component(hull)] != $propagate} { grid propagate $itk_component(hull) $propagate } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: childsite # # Returns the path name of the child site widget. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::childsite {} { return $itk_component(childsite) } # ------------------------------------------------------------------ # METHOD: get # # Returns the current selection. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::get {} { return [$itk_component(selection) get] } # ------------------------------------------------------------------ # METHOD: filter # # The user has pressed Return in the filter. Make sure the contents # contain a valid directory before setting default to directory. # Use the invalid option to warn the user of any problems. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::filter {} { set newdir [file dirname [$itk_component(filter) get]] if {! [file exists $newdir]} { uplevel #0 "$itk_option(-invalid)" return } set _pwd $newdir; if {$_pwd == "."} {set _pwd [pwd]}; _updateLists } # ------------------------------------------------------------------ # PRIVATE METHOD: _updateLists ?now? # # Updates the contents of both the file and directory lists, as well # resets the positions of the filter, and lists. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_updateLists {{when "later"}} { switch -- $when { later { if {$_updateToken == ""} { set _updateToken [after idle [itcl::code $this _updateLists now]] } } now { if {$itk_option(-dirson)} {_setDirList} if {$itk_option(-fileson)} {_setFileList} if {$itk_option(-filteron)} { _setFilter } if {$itk_option(-selectionon)} { $itk_component(selection) icursor end } if {$itk_option(-dirson)} { $itk_component(dirs) justify left } if {$itk_option(-fileson)} { $itk_component(files) justify left } set _updateToken "" } default { error "bad option \"$when\": should be later or now" } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _setFilter # # Set the filter to the current selection in the directory list plus # any existing mask in the filter. Translate the two special cases # of '.', and '..' directory names to full path names.. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_setFilter {} { global tcl_platform set prefix [$itk_component(dirs) getcurselection] set curFilter [file tail [$itk_component(filter) get]] while {[regexp {\.$} $prefix]} { if {[file tail $prefix] == "."} { if {$prefix == "."} { if {$_pwd == "."} { set _pwd [pwd] } elseif {$_pwd == ".."} { set _pwd [file dirname [pwd]] } set prefix $_pwd } else { set prefix [file dirname $prefix] } } elseif {[file tail $prefix] == ".."} { if {$prefix != ".."} { set prefix [file dirname [file dirname $prefix]] } else { if {$_pwd == "."} { set _pwd [pwd] } elseif {$_pwd == ".."} { set _pwd [file dirname [pwd]] } set prefix [file dirname "$_pwd"] } } else { break } } if { [file pathtype $prefix] != "absolute" } { set prefix [file join "$_pwd" $prefix] } # # Remove automounter paths. # if {$tcl_platform(platform) == "unix"} { if {$itk_option(-automount) != {}} { foreach autoDir $itk_option(-automount) { # Use catch because we can't be sure exactly what strings # were passed into the -automount option catch { if {[regsub ^/$autoDir $prefix {} prefix] != 0} { break } } } } } $itk_component(filter) delete entry 0 end $itk_component(filter) insert entry 0 [file join $prefix $curFilter] if {[info level -1] != "_selectDir"} { $itk_component(filter) insert list 0 [file join $prefix $curFilter] } # # Make sure insertion cursor is at the end. # $itk_component(filter) icursor end # # Make sure the right most text is visable. # [$itk_component(filter) component entry] xview moveto 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _setSelection # # Set the contents of the selection entry to either the current # selection of the file or directory list dependent on which lists # are currently mapped. For the file list, avoid seleciton of the # no match string. As for the directory list, translate file names. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_setSelection {} { global tcl_platform $itk_component(selection) delete entry 0 end if {$itk_option(-fileson)} { set selection [$itk_component(files) getcurselection] if {$selection != $itk_option(-nomatchstring)} { if {[file pathtype $selection] != "absolute"} { set selection [file join "$_pwd" $selection] } # # Remove automounter paths. # if {$tcl_platform(platform) == "unix"} { if {$itk_option(-automount) != {}} { foreach autoDir $itk_option(-automount) { # Use catch because we can't be sure exactly what strings # were passed into the -automount option catch { if {[regsub ^/$autoDir $selection {} selection] != 0} { break } } } } } $itk_component(selection) insert entry 0 $selection } else { $itk_component(files) selection clear 0 end } } else { set selection [$itk_component(dirs) getcurselection] if {[file tail $selection] == "."} { if {$selection != "."} { set selection [file dirname $selection] } else { set selection "$_pwd" } } elseif {[file tail $selection] == ".."} { if {$selection != ".."} { set selection [file dirname [file dirname $selection]] } else { set selection [file join "$_pwd" ..] } } else { set selection [file join "$_pwd" $selection] } # # Remove automounter paths. # if {$tcl_platform(platform) == "unix"} { if {$itk_option(-automount) != {}} { foreach autoDir $itk_option(-automount) { # Use catch because we can't be sure exactly what strings # were passed into the -automount option catch { if {[regsub ^/$autoDir $selection {} selection] != 0} { break } } } } } $itk_component(selection) insert entry 0 $selection } $itk_component(selection) insert list 0 $selection $itk_component(selection) icursor end # # Make sure the right most text is visable. # [$itk_component(selection) component entry] xview moveto 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _setDirList # # Clear the directory list and dependent on whether the user has # defined their own search procedure or not fill the list with their # results or those of a glob. Select the first element if it exists. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_setDirList {} { $itk_component(dirs) clear set currentIndex "" if {$itk_option(-dirsearchcommand) == {}} { set cwd "$_pwd" set counter 0 foreach i [lsort [glob -nocomplain \ [file join $cwd .*] [file join $cwd *]]] { if {[file isdirectory $i]} { set insert "[file tail $i]" if {$insert == "."} { set currentIndex $counter } $itk_component(dirs) insert end "$insert" incr counter } } } else { set mask [file tail [$itk_component(filter) get]] foreach file [uplevel #0 $itk_option(-dirsearchcommand) "$_pwd" $mask] { $itk_component(dirs) insert end $file } } if {[$itk_component(dirs) size]} { $itk_component(dirs) selection clear 0 end if {$currentIndex != ""} { $itk_component(dirs) selection set $currentIndex } else { $itk_component(dirs) selection set 0 } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _setFileList # # Clear the file list and dependent on whether the user has defined # their own search procedure or not fill the list with their results # or those of a 'glob'. If the files list has no contents, then set # the files list to the 'nomatchstring'. Clear all selections. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_setFileList {} { $itk_component(files) clear set mask [file tail [$itk_component(filter) get]] if {$itk_option(-filesearchcommand) == {}} { if {$mask == "*"} { set files [lsort [glob -nocomplain \ [file join "$_pwd" .*] [file join "$_pwd" *]]] } else { set files [lsort [glob -nocomplain [file join "$_pwd" $mask]]] } foreach i $files { if {($itk_option(-filetype) == "regular" && \ ! [file isdirectory $i]) || \ ($itk_option(-filetype) == "directory" && \ [file isdirectory $i]) || \ ($itk_option(-filetype) == "any")} { set insert "[file tail $i]" $itk_component(files) insert end "$insert" } } } else { foreach file [uplevel #0 $itk_option(-filesearchcommand) "$_pwd" $mask] { $itk_component(files) insert end $file } } if {[$itk_component(files) size] == 0} { if {$itk_option(-nomatchstring) != {}} { $itk_component(files) insert end $itk_option(-nomatchstring) } } $itk_component(files) selection clear 0 end } # ------------------------------------------------------------------ # PRIVATE METHOD: _selectDir # # For a selection in the directory list, set the filter and possibly # the selection entry based on the fileson option. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_selectDir {} { _setFilter if {$itk_option(-fileson)} {} { _setSelection } if {$itk_option(-selectdircommand) != {}} { uplevel #0 $itk_option(-selectdircommand) } } # ------------------------------------------------------------------ # PRIVATE METHOD: _dblSelectDir # # For a double click event in the directory list, select the # directory, set the default to the selection, and update both the # file and directory lists. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_dblSelectDir {} { filter } # ------------------------------------------------------------------ # PRIVATE METHOD: _selectFile # # The user has selected a file. Put the current selection in the # file list in the selection entry widget. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_selectFile {} { _setSelection if {$itk_option(-selectfilecommand) != {}} { uplevel #0 $itk_option(-selectfilecommand) } } # ------------------------------------------------------------------ # PRIVATE METHOD: _selectSelection # # The user has pressed Return in the selection entry widget. Call # the defined selection command if it exists. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_selectSelection {} { if {$itk_option(-selectioncommand) != {}} { uplevel #0 $itk_option(-selectioncommand) } } # ------------------------------------------------------------------ # PRIVATE METHOD: _selectFilter # # The user has pressed Return in the filter entry widget. Call the # defined selection command if it exists, otherwise just filter. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_selectFilter {} { if {$itk_option(-filtercommand) != {}} { uplevel #0 $itk_option(-filtercommand) } else { filter } } # ------------------------------------------------------------------ # PRIVATE METHOD: _packComponents # # Pack the selection, items, and child site widgets based on options. # Using the -in option of pack, put the childsite around the frame # in the hull for n, s, e, and w positions. Make sure and raise # the child site since using the 'in' option may obscure the site. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_packComponents {{when "later"}} { if {$when == "later"} { if {$_packToken == ""} { set _packToken [after idle [itcl::code $this _packComponents now]] } return } elseif {$when != "now"} { error "bad option \"$when\": should be now or later" } set _packToken "" # # Forget about any previous placements via the grid and # reset all the possible minsizes and weights for all # the rows and columns. # foreach component {childsite listpane filter selection} { grid forget $itk_component($component) } for {set row 0} {$row < 6} {incr row} { grid rowconfigure $_interior $row -minsize 0 -weight 0 } for {set col 0} {$col < 3} {incr col} { grid columnconfigure $_interior $col -minsize 0 -weight 0 } # # Place all the components based on the childsite poisition # option. # switch $itk_option(-childsitepos) { n { _nPos } w { _wPos } s { _sPos } e { _ePos } top { _topPos } bottom { _bottomPos } default { error "bad childsitepos option \"$itk_option(-childsitepos)\":\ should be n, e, s, w, top, or bottom" } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _nPos # # Position the childsite to the north and all the other components # appropriately based on the individual "on" options. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_nPos {} { grid $itk_component(childsite) -row 0 -column 0 \ -columnspan 1 -rowspan 1 -sticky nsew -padx 5 if {$itk_option(-filteron)} { grid $itk_component(filter) -row 1 -column 0 \ -columnspan 1 -sticky ew -padx 5 grid rowconfigure $_interior 2 -minsize 7 } grid $itk_component(listpane) -row 3 -column 0 \ -columnspan 1 -sticky nsew grid rowconfigure $_interior 3 -weight 1 if {$itk_option(-selectionon)} { grid rowconfigure $_interior 4 -minsize 7 grid $itk_component(selection) -row 5 -column 0 \ -columnspan 1 -sticky ew -padx 5 } grid columnconfigure $_interior 0 -weight 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _sPos # # Position the childsite to the south and all the other components # appropriately based on the individual "on" options. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_sPos {} { if {$itk_option(-filteron)} { grid $itk_component(filter) -row 0 -column 0 \ -columnspan 1 -sticky ew -padx 5 grid rowconfigure $_interior 1 -minsize 7 } grid $itk_component(listpane) -row 2 -column 0 \ -columnspan 1 -sticky nsew grid rowconfigure $_interior 2 -weight 1 if {$itk_option(-selectionon)} { grid rowconfigure $_interior 3 -minsize 7 grid $itk_component(selection) -row 4 -column 0 \ -columnspan 1 -sticky ew -padx 5 } grid $itk_component(childsite) -row 5 -column 0 \ -columnspan 1 -rowspan 1 -sticky nsew -padx 5 grid columnconfigure $_interior 0 -weight 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _ePos # # Position the childsite to the east and all the other components # appropriately based on the individual "on" options. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_ePos {} { if {$itk_option(-filteron)} { grid $itk_component(filter) -row 0 -column 0 \ -columnspan 1 -sticky ew -padx 5 grid rowconfigure $_interior 1 -minsize 7 } grid $itk_component(listpane) -row 2 -column 0 \ -columnspan 1 -sticky nsew grid rowconfigure $_interior 2 -weight 1 if {$itk_option(-selectionon)} { grid rowconfigure $_interior 3 -minsize 7 grid $itk_component(selection) -row 4 -column 0 \ -columnspan 1 -sticky ew -padx 5 } grid $itk_component(childsite) -row 0 -column 1 \ -rowspan 5 -columnspan 1 -sticky nsew grid columnconfigure $_interior 0 -weight 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _wPos # # Position the childsite to the west and all the other components # appropriately based on the individual "on" options. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_wPos {} { grid $itk_component(childsite) -row 0 -column 0 \ -rowspan 5 -columnspan 1 -sticky nsew if {$itk_option(-filteron)} { grid $itk_component(filter) -row 0 -column 1 \ -columnspan 1 -sticky ew -padx 5 grid rowconfigure $_interior 1 -minsize 7 } grid $itk_component(listpane) -row 2 -column 1 \ -columnspan 1 -sticky nsew grid rowconfigure $_interior 2 -weight 1 if {$itk_option(-selectionon)} { grid rowconfigure $_interior 3 -minsize 7 grid $itk_component(selection) -row 4 -column 1 \ -columnspan 1 -sticky ew -padx 5 } grid columnconfigure $_interior 1 -weight 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _topPos # # Position the childsite below the filter but above the lists and # all the other components appropriately based on the individual # "on" options. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_topPos {} { if {$itk_option(-filteron)} { grid $itk_component(filter) -row 0 -column 0 \ -columnspan 1 -sticky ew -padx 5 } grid $itk_component(childsite) -row 1 -column 0 \ -columnspan 1 -rowspan 1 -sticky nsew -padx 5 grid $itk_component(listpane) -row 2 -column 0 -sticky nsew grid rowconfigure $_interior 2 -weight 1 if {$itk_option(-selectionon)} { grid rowconfigure $_interior 3 -minsize 7 grid $itk_component(selection) -row 4 -column 0 \ -columnspan 1 -sticky ew -padx 5 } grid columnconfigure $_interior 0 -weight 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _bottomPos # # Position the childsite below the lists and above the selection # and all the other components appropriately based on the individual # "on" options. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectionbox::_bottomPos {} { if {$itk_option(-filteron)} { grid $itk_component(filter) -row 0 -column 0 \ -columnspan 1 -sticky ew -padx 5 grid rowconfigure $_interior 1 -minsize 7 } grid $itk_component(listpane) -row 2 -column 0 -sticky nsew grid rowconfigure $_interior 2 -weight 1 grid $itk_component(childsite) -row 3 -column 0 \ -columnspan 1 -rowspan 1 -sticky nsew -padx 5 if {$itk_option(-selectionon)} { grid $itk_component(selection) -row 4 -column 0 \ -columnspan 1 -sticky ew -padx 5 } grid columnconfigure $_interior 0 -weight 1 } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/dialog.itk�������������������������������������������������������������������0000644�0036047�0045461�00000006773�07334043777�015346� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Dialog # ---------------------------------------------------------------------- # Implements a standard dialog box providing standard buttons and a # child site for use in derived classes. The buttons include ok, apply, # cancel, and help. Options exist to configure the buttons. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) $Id: dialog.itk,v 1.2 2001/08/07 19:56:47 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Dialog { keep -background -cursor -foreground -modality } # ------------------------------------------------------------------ # DIALOG # ------------------------------------------------------------------ itcl::class iwidgets::Dialog { inherit iwidgets::Dialogshell constructor {args} {} } # # Provide a lowercased access method for the Dialog class. # proc ::iwidgets::dialog {pathName args} { uplevel ::iwidgets::Dialog $pathName $args } # # Use option database to override default resources of base classes. # option add *Dialog.master "." widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Dialog::constructor {args} { # # Add the standard buttons: OK, Apply, Cancel, and Help, making # OK be the default button. # add OK -text OK -command [itcl::code $this deactivate 1] add Apply -text Apply add Cancel -text Cancel -command [itcl::code $this deactivate 0] add Help -text Help default OK # # Bind the window manager delete protocol to invocation of the # cancel button. This can be overridden by the user via the # execution of a similar command outside the class. # wm protocol $itk_component(hull) WM_DELETE_WINDOW \ [itcl::code $this invoke Cancel] # # Initialize the widget based on the command line options. # eval itk_initialize $args } �����iwidgets-4.1.1/generic/hierarchy.itk����������������������������������������������������������������0000644�0036047�0045461�00000203007�13153526747�016051� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Hierarchy # ---------------------------------------------------------------------- # Hierarchical data viewer. Manages a list of nodes that can be # expanded or collapsed. Individual nodes can be highlighted. # Clicking with the right mouse button on any item brings up a # special item menu. Clicking on the background area brings up # a different popup menu. # ---------------------------------------------------------------------- # AUTHOR: Michael J. McLennan # Bell Labs Innovations for Lucent Technologies # mmclennan@lucent.com # # Mark L. Ulferts # DSC Communications # mulferts@austin.dsccc.com # # RCS: $Id: hierarchy.itk,v 1.10 2017/06/28 18:43:52 dgp Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1996 Lucent Technologies # ====================================================================== # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, # provided that the above copyright notice appear in all copies and that # both that the copyright notice and warranty disclaimer appear in # supporting documentation, and that the names of Lucent Technologies # any of their entities not be used in advertising or publicity # pertaining to distribution of the software without specific, written # prior permission. # # Lucent Technologies disclaims all warranties with regard to this # software, including all implied warranties of merchantability and # fitness. In no event shall Lucent Technologies be liable for any # special, indirect or consequential damages or any damages whatsoever # resulting from loss of use, data or profits, whether in an action of # contract, negligence or other tortuous action, arising out of or in # connection with the use or performance of this software. # # ---------------------------------------------------------------------- # Copyright (c) 1996 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Hierarchy { keep -cursor -textfont -font keep -background -foreground -textbackground keep -selectbackground -selectforeground } # ------------------------------------------------------------------ # HIERARCHY # ------------------------------------------------------------------ itcl::class iwidgets::Hierarchy { inherit iwidgets::Scrolledwidget constructor {args} {} destructor {} itk_option define -alwaysquery alwaysQuery AlwaysQuery 0 itk_option define -closedicon closedIcon Icon {} itk_option define -dblclickcommand dblClickCommand Command {} itk_option define -expanded expanded Expanded 0 itk_option define -filter filter Filter 0 itk_option define -font font Font \ -*-Courier-Medium-R-Normal--*-120-*-*-*-*-*-* itk_option define -height height Height 0 itk_option define -iconcommand iconCommand Command {} itk_option define -icondblcommand iconDblCommand Command {} itk_option define -imagecommand imageCommand Command {} itk_option define -imagedblcommand imageDblCommand Command {} itk_option define -imagemenuloadcommand imageMenuLoadCommand Command {} itk_option define -markbackground markBackground Foreground #a0a0a0 itk_option define -markforeground markForeground Background Black itk_option define -nodeicon nodeIcon Icon {} itk_option define -openicon openIcon Icon {} itk_option define -querycommand queryCommand Command {} itk_option define -selectcommand selectCommand Command {} itk_option define -selectbackground selectBackground Foreground #c3c3c3 itk_option define -selectforeground selectForeground Background Black itk_option define -textmenuloadcommand textMenuLoadCommand Command {} itk_option define -visibleitems visibleItems VisibleItems 80x24 itk_option define -width width Width 0 public { method clear {} method collapse {node} method current {} method draw {{when -now}} method expand {node} method expanded {node} method expState { } method mark {op args} method prune {node} method refresh {node} method selection {op args} method toggle {node} method bbox {index} method compare {index1 op index2} method debug {args} {eval $args} method delete {first {last {}}} method dlineinfo {index} method dump {args} method get {index1 {index2 {}}} method index {index} method insert {args} method scan {option args} method search {args} method see {index} method tag {op args} method window {option args} method xview {args} method yview {args} } protected { method _contents {uid} method _post {x y} method _drawLevel {node indent} method _select {x y} method _deselectSubNodes {uid} method _deleteNodeInfo {uid} method _getParent {uid} method _getHeritage {uid} method _isInternalTag {tag} method _iconSelect {node icon} method _iconDblSelect {node icon} method _imageSelect {node} method _imageDblClick {node} method _imagePost {node image type x y} method _double {x y} } private { method _configureTags {} variable _filterCode "" ;# Compact view flag. variable _hcounter 0 ;# Counter for hierarchy icons variable _icons ;# Array of user icons by uid variable _images ;# Array of our icons by uid variable _indents ;# Array of indentation by uid variable _marked ;# Array of marked nodes by uid variable _markers "" ;# List of markers for level being drawn variable _nodes ;# Array of subnodes by uid variable _pending "" ;# Pending draw flag variable _posted "" ;# List of tags at posted menu position variable _selected ;# Array of selected nodes by uid variable _tags ;# Array of user tags by uid variable _text ;# Array of displayed text by uid variable _states ;# Array of selection state by uid variable _ucounter 0 ;# Counter for user icons } } # # Provide a lowercased access method for the Hierarchy class. # proc ::iwidgets::hierarchy {pathName args} { uplevel ::iwidgets::Hierarchy $pathName $args } # # Use option database to override default resources of base classes. # option add *Hierarchy.menuCursor arrow widgetDefault option add *Hierarchy.labelPos n widgetDefault option add *Hierarchy.tabs 30 widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::constructor {args} { itk_option remove iwidgets::Labeledwidget::state # # Our -width and -height options are slightly different than # those implemented by our base class, so we're going to # remove them and redefine our own. # itk_option remove iwidgets::Scrolledwidget::width itk_option remove iwidgets::Scrolledwidget::height # # Create a clipping frame which will provide the border for # relief display. # itk_component add clipper { frame $itk_interior.clipper } { usual keep -borderwidth -relief -highlightthickness -highlightcolor rename -highlightbackground -background background Background } grid $itk_component(clipper) -row 0 -column 0 -sticky nsew grid rowconfigure $_interior 0 -weight 1 grid columnconfigure $_interior 0 -weight 1 # # Create a text widget for displaying our hierarchy. # itk_component add list { text $itk_component(clipper).list -wrap none -cursor center_ptr \ -state disabled -width 1 -height 1 \ -xscrollcommand \ [itcl::code $this _scrollWidget $itk_interior.horizsb] \ -yscrollcommand \ [itcl::code $this _scrollWidget $itk_interior.vertsb] \ -borderwidth 0 -highlightthickness 0 } { usual keep -spacing1 -spacing2 -spacing3 -tabs rename -font -textfont textFont Font rename -background -textbackground textBackground Background ignore -highlightthickness -highlightcolor ignore -insertbackground -insertborderwidth ignore -insertontime -insertofftime -insertwidth ignore -selectborderwidth ignore -borderwidth } grid $itk_component(list) -row 0 -column 0 -sticky nsew grid rowconfigure $itk_component(clipper) 0 -weight 1 grid columnconfigure $itk_component(clipper) 0 -weight 1 # # Configure the command on the vertical scroll bar in the base class. # $itk_component(vertsb) configure \ -command [itcl::code $itk_component(list) yview] # # Configure the command on the horizontal scroll bar in the base class. # $itk_component(horizsb) configure \ -command [itcl::code $itk_component(list) xview] # # Configure our text component's tab settings for twenty levels. # set tabs "" for {set i 1} {$i < 20} {incr i} { lappend tabs [expr {$i*12+4}] } $itk_component(list) configure -tabs $tabs # # Add popup menus that can be configured by the user to add # new functionality. # itk_component add itemMenu { menu $itk_component(list).itemmenu -tearoff 0 } { usual ignore -tearoff rename -cursor -menucursor menuCursor Cursor } itk_component add bgMenu { menu $itk_component(list).bgmenu -tearoff 0 } { usual ignore -tearoff rename -cursor -menucursor menuCursor Cursor } # # Adjust the bind tags to remove the class bindings. Also, add # bindings for mouse button 1 to do selection and button 3 to # display a popup. # set tags [bindtags $itk_component(list)] set idx [lsearch -exact $tags Text] bindtags $itk_component(list) [lreplace $tags $idx $idx] bind $itk_component(list) <ButtonPress-1> \ [itcl::code $this _select %x %y] bind $itk_component(list) <Double-1> \ [itcl::code $this _double %x %y] bind $itk_component(list) <ButtonPress-3> \ [itcl::code $this _post %x %y] # # Initialize the widget based on the command line options. # eval itk_initialize $args } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::destructor {} { if {$_pending != ""} { after cancel $_pending } } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -font # # Font used for text in the list. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::font { $itk_component(list) tag configure info \ -font $itk_option(-font) -spacing1 6 } # ------------------------------------------------------------------ # OPTION: -selectbackground # # Background color scheme for selected nodes. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::selectbackground { $itk_component(list) tag configure hilite \ -background $itk_option(-selectbackground) } # ------------------------------------------------------------------ # OPTION: -selectforeground # # Foreground color scheme for selected nodes. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::selectforeground { $itk_component(list) tag configure hilite \ -foreground $itk_option(-selectforeground) } # ------------------------------------------------------------------ # OPTION: -markbackground # # Background color scheme for marked nodes. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::markbackground { $itk_component(list) tag configure lowlite \ -background $itk_option(-markbackground) } # ------------------------------------------------------------------ # OPTION: -markforeground # # Foreground color scheme for marked nodes. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::markforeground { $itk_component(list) tag configure lowlite \ -foreground $itk_option(-markforeground) } # ------------------------------------------------------------------ # OPTION: -querycommand # # Command executed to query the contents of each node. If this # command contains "%n", it is replaced with the name of the desired # node. In its simpilest form it should return the children of the # given node as a list which will be depicted in the display. # # Since the names of the children are used as tags in the underlying # text widget, each child must be unique in the hierarchy. Due to # the unique requirement, the nodes shall be reffered to as uids # or uid in the singular sense. # # {uid [uid ...]} # # where uid is a unique id and primary key for the hierarchy entry # # Should the unique requirement pose a problem, the list returned # can take on another more extended form which enables the # association of text to be displayed with the uids. The uid must # still be unique, but the text does not have to obey the unique # rule. In addition, the format also allows the specification of # additional tags to be used on the same entry in the hierarchy # as the uid and additional icons to be displayed just before # the node. The tags and icons are considered to be the property of # the user in that the hierarchy widget will not depend on any of # their values. # # {{uid [text [tags [icons]]]} {uid [text [tags [icons]]]} ...} # # where uid is a unique id and primary key for the hierarchy entry # text is the text to be displayed for this uid # tags is a list of user tags to be applied to the entry # icons is a list of icons to be displayed in front of the text # # The hierarchy widget does a look ahead from each node to determine # if the node has a children. This can be cost some performace with # large hierarchies. User's can avoid this by providing a hint in # the user tags. A tag of "leaf" or "branch" tells the hierarchy # widget the information it needs to know thereby avoiding the look # ahead operation. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::querycommand { clear draw -eventually # Added for SF ticket #596111 _configureTags } # ------------------------------------------------------------------ # OPTION: -selectcommand # # Command executed to select an item in the list. If this command # contains "%n", it is replaced with the name of the selected node. # If it contains a "%s", it is replaced with a boolean indicator of # the node's current selection status, where a value of 1 denotes # that the node is currently selected and 0 that it is not. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::selectcommand { } # ------------------------------------------------------------------ # OPTION: -dblclickcommand # # Command executed to double click an item in the list. If this command # contains "%n", it is replaced with the name of the selected node. # If it contains a "%s", it is replaced with a boolean indicator of # the node's current selection status, where a value of 1 denotes # that the node is currently selected and 0 that it is not. # # Douglas R. Howard, Jr. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::dblclickcommand { } # ------------------------------------------------------------------ # OPTION: -iconcommand # # Command executed upon selection of user icons. If this command # contains "%n", it is replaced with the name of the node the icon # belongs to. Should it contain "%i" then the icon name is # substituted. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::iconcommand { } # ------------------------------------------------------------------ # OPTION: -icondblcommand # # Command executed upon double selection of user icons. If this command # contains "%n", it is replaced with the name of the node the icon # belongs to. Should it contain "%i" then the icon name is # substituted. # # Douglas R. Howard, Jr. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::icondblcommand { } # ------------------------------------------------------------------ # OPTION: -imagecommand # # Command executed upon selection of image icons. If this command # contains "%n", it is replaced with the name of the node the icon # belongs to. Should it contain "%i" then the icon name is # substituted. # # Douglas R. Howard, Jr. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::imagecommand { } # ------------------------------------------------------------------ # OPTION: -imagedblcommand # # Command executed upon double selection of user icons. If this command # contains "%n", it is replaced with the name of the node the icon # belongs to. # # Douglas R. Howard, Jr. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::imagedblcommand { } # ------------------------------------------------------------------ # OPTION: -alwaysquery # # Boolean flag which tells the hierarchy widget weather or not # each refresh of the display should be via a new query using # the -querycommand option or use the values previous found the # last time the query was made. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::alwaysquery { switch -- $itk_option(-alwaysquery) { 1 - true - yes - on { ;# okay } 0 - false - no - off { ;# okay } default { error "bad alwaysquery option \"$itk_option(-alwaysquery)\":\ should be boolean" } } } # ------------------------------------------------------------------ # OPTION: -filter # # When true only the branch nodes and selected items are displayed. # This gives a compact view of important items. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::filter { switch -- $itk_option(-filter) { 1 - true - yes - on { set newCode {set display [info exists _selected($child)]} } 0 - false - no - off { set newCode {set display 1} } default { error "bad filter option \"$itk_option(-filter)\":\ should be boolean" } } if {$newCode != $_filterCode} { set _filterCode $newCode draw -eventually } } # ------------------------------------------------------------------ # OPTION: -expanded # # When true, the hierarchy will be completely expanded when it # is first displayed. A fresh display can be triggered by # resetting the -querycommand option. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::expanded { switch -- $itk_option(-expanded) { 1 - true - yes - on { ;# okay } 0 - false - no - off { ;# okay } default { error "bad expanded option \"$itk_option(-expanded)\":\ should be boolean" } } } # ------------------------------------------------------------------ # OPTION: -openicon # # Specifies the open icon image to be used in the hierarchy. Should # one not be provided, then one will be generated, pixmap if # possible, bitmap otherwise. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::openicon { if {$itk_option(-openicon) == {}} { if {[lsearch [image names] openFolder] == -1} { if {[lsearch [image types] pixmap] != -1} { image create pixmap openFolder -data { /* XPM */ static char * dir_opened [] = { "16 16 4 1", /* colors */ ". c grey85 m white g4 grey90", "b c black m black g4 black", "y c yellow m white g4 grey80", "g c grey70 m white g4 grey70", /* pixels */ "................", "................", "................", "..bbbb..........", ".bggggb.........", "bggggggbbbbbbb..", "bggggggggggggb..", "bgbbbbbbbbbbbbbb", "bgbyyyyyyyyyyybb", "bbyyyyyyyyyyyyb.", "bbyyyyyyyyyyybb.", "byyyyyyyyyyyyb..", "bbbbbbbbbbbbbb..", "................", "................", "................"}; } } else { image create bitmap openFolder -data { #define open_width 16 #define open_height 16 static char open_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x81, 0x3f, 0x01, 0x20, 0xf9, 0xff, 0x0d, 0xc0, 0x07, 0x40, 0x03, 0x60, 0x01, 0x20, 0x01, 0x30, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; } } } set itk_option(-openicon) openFolder } else { if {[lsearch [image names] $itk_option(-openicon)] == -1} { error "bad openicon option \"$itk_option(-openicon)\":\ should be an existing image" } } } # ------------------------------------------------------------------ # OPTION: -closedicon # # Specifies the closed icon image to be used in the hierarchy. # Should one not be provided, then one will be generated, pixmap if # possible, bitmap otherwise. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::closedicon { if {$itk_option(-closedicon) == {}} { if {[lsearch [image names] closedFolder] == -1} { if {[lsearch [image types] pixmap] != -1} { image create pixmap closedFolder -data { /* XPM */ static char *dir_closed[] = { "16 16 3 1", ". c grey85 m white g4 grey90", "b c black m black g4 black", "y c yellow m white g4 grey80", "................", "................", "................", "..bbbb..........", ".byyyyb.........", "bbbbbbbbbbbbbb..", "byyyyyyyyyyyyb..", "byyyyyyyyyyyyb..", "byyyyyyyyyyyyb..", "byyyyyyyyyyyyb..", "byyyyyyyyyyyyb..", "byyyyyyyyyyyyb..", "bbbbbbbbbbbbbb..", "................", "................", "................"}; } } else { image create bitmap closedFolder -data { #define closed_width 16 #define closed_height 16 static char closed_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x84, 0x00, 0xfe, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; } } } set itk_option(-closedicon) closedFolder } else { if {[lsearch [image names] $itk_option(-closedicon)] == -1} { error "bad closedicon option \"$itk_option(-closedicon)\":\ should be an existing image" } } } # ------------------------------------------------------------------ # OPTION: -nodeicon # # Specifies the node icon image to be used in the hierarchy. Should # one not be provided, then one will be generated, pixmap if # possible, bitmap otherwise. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::nodeicon { if {$itk_option(-nodeicon) == {}} { if {[lsearch [image names] nodeFolder] == -1} { if {[lsearch [image types] pixmap] != -1} { image create pixmap nodeFolder -data { /* XPM */ static char *dir_node[] = { "16 16 3 1", ". c grey85 m white g4 grey90", "b c black m black g4 black", "y c yellow m white g4 grey80", "................", "................", "................", "...bbbbbbbbbbb..", "..bybyyyyyyyyb..", ".byybyyyyyyyyb..", "byyybyyyyyyyyb..", "bbbbbyyyyyyyyb..", "byyyyyyyyyyyyb..", "byyyyyyyyyyyyb..", "byyyyyyyyyyyyb..", "byyyyyyyyyyyyb..", "bbbbbbbbbbbbbb..", "................", "................", "................"}; } } else { image create bitmap nodeFolder -data { #define node_width 16 #define node_height 16 static char node_bits[] = { 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x50, 0x40, 0x48, 0x40, 0x44, 0x40, 0x42, 0x40, 0x7e, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; } } } set itk_option(-nodeicon) nodeFolder } else { if {[lsearch [image names] $itk_option(-nodeicon)] == -1} { error "bad nodeicon option \"$itk_option(-nodeicon)\":\ should be an existing image" } } } # ------------------------------------------------------------------ # OPTION: -width # # Specifies the width of the hierarchy widget as an entire unit. # The value may be specified in any of the forms acceptable to # Tk_GetPixels. Any additional space needed to display the other # components such as labels, margins, and scrollbars force the text # to be compressed. A value of zero along with the same value for # the height causes the value given for the visibleitems option # to be applied which administers geometry constraints in a different # manner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::width { if {$itk_option(-width) != 0} { set shell [lindex [grid info $itk_component(clipper)] 1] # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $shell]} { grid propagate $shell no } $itk_component(list) configure -width 1 $shell configure \ -width [winfo pixels $shell $itk_option(-width)] } else { configure -visibleitems $itk_option(-visibleitems) } } # ------------------------------------------------------------------ # OPTION: -height # # Specifies the height of the hierarchy widget as an entire unit. # The value may be specified in any of the forms acceptable to # Tk_GetPixels. Any additional space needed to display the other # components such as labels, margins, and scrollbars force the text # to be compressed. A value of zero along with the same value for # the width causes the value given for the visibleitems option # to be applied which administers geometry constraints in a different # manner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::height { if {$itk_option(-height) != 0} { set shell [lindex [grid info $itk_component(clipper)] 1] # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $shell]} { grid propagate $shell no } $itk_component(list) configure -height 1 $shell configure \ -height [winfo pixels $shell $itk_option(-height)] } else { configure -visibleitems $itk_option(-visibleitems) } } # ------------------------------------------------------------------ # OPTION: -visibleitems # # Specified the widthxheight in characters and lines for the text. # This option is only administered if the width and height options # are both set to zero, otherwise they take precedence. With the # visibleitems option engaged, geometry constraints are maintained # only on the text. The size of the other components such as # labels, margins, and scroll bars, are additive and independent, # effecting the overall size of the scrolled text. In contrast, # should the width and height options have non zero values, they # are applied to the scrolled text as a whole. The text is # compressed or expanded to maintain the geometry constraints. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::visibleitems { if {[regexp {^[0-9]+x[0-9]+$} $itk_option(-visibleitems)]} { if {($itk_option(-width) == 0) && \ ($itk_option(-height) == 0)} { set chars [lindex [split $itk_option(-visibleitems) x] 0] set lines [lindex [split $itk_option(-visibleitems) x] 1] set shell [lindex [grid info $itk_component(clipper)] 1] # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {! [grid propagate $shell]} { grid propagate $shell yes } $itk_component(list) configure -width $chars -height $lines } } else { error "bad visibleitems option\ \"$itk_option(-visibleitems)\": should be\ widthxheight" } } # ------------------------------------------------------------------ # OPTION: -textmenuloadcommand # # Dynamically loads the popup menu based on what was selected. # # Douglas R. Howard, Jr. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::textmenuloadcommand {} # ------------------------------------------------------------------ # OPTION: -imagemenuloadcommand # # Dynamically loads the popup menu based on what was selected. # # Douglas R. Howard, Jr. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hierarchy::imagemenuloadcommand {} # ------------------------------------------------------------------ # PUBLIC METHODS # ------------------------------------------------------------------ # ---------------------------------------------------------------------- # PUBLIC METHOD: clear # # Removes all items from the display including all tags and icons. # The display will remain empty until the -filter or -querycommand # options are set. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::clear {} { $itk_component(list) configure -state normal -cursor watch $itk_component(list) delete 1.0 end $itk_component(list) configure -state disabled -cursor $itk_option(-cursor) # Clear the tags eval $itk_component(list) tag delete [$itk_component(list) tag names] catch {unset _nodes} catch {unset _text} catch {unset _tags} catch {unset _icons} catch {unset _states} catch {unset _images} catch {unset _indents} catch {unset _marked} catch {unset _selected} set _markers "" set _posted "" set _ucounter 0 set _hcounter 0 foreach mark [$itk_component(list) mark names] { $itk_component(list) mark unset $mark } return } # ---------------------------------------------------------------------- # PUBLIC METHOD: selection option ?uid uid...? # # Handles all operations controlling selections in the hierarchy. # Selections may be cleared, added, removed, or queried. The add and # remove options accept a series of unique ids. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::selection {op args} { switch -- $op { clear { $itk_component(list) tag remove hilite 1.0 end catch {unset _selected} return } add { foreach node $args { set _selected($node) 1 catch { $itk_component(list) tag add hilite \ "$node.first" "$node.last" } } } remove { foreach node $args { catch { unset _selected($node) $itk_component(list) tag remove hilite \ "$node.first" "$node.last" } } } get { return [array names _selected] } default { error "bad selection operation \"$op\":\ should be add, remove, clear or get" } } } # ---------------------------------------------------------------------- # PUBLIC METHOD: mark option ?arg arg...? # # Handles all operations controlling marks in the hierarchy. Marks may # be cleared, added, removed, or queried. The add and remove options # accept a series of unique ids. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::mark {op args} { switch -- $op { clear { $itk_component(list) tag remove lowlite 1.0 end catch {unset _marked} return } add { foreach node $args { set _marked($node) 1 catch { $itk_component(list) tag add lowlite \ "$node.first" "$node.last" } } } remove { foreach node $args { catch { unset _marked($node) $itk_component(list) tag remove lowlite \ "$node.first" "$node.last" } } } get { return [array names _marked] } default { error "bad mark operation \"$op\":\ should be add, remove, clear or get" } } } # ---------------------------------------------------------------------- # PUBLIC METHOD: current # # Returns the node that was most recently selected by the right mouse # button when the item menu was posted. Usually used by the code # in the item menu to figure out what item is being manipulated. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::current {} { return $_posted } # ---------------------------------------------------------------------- # PUBLIC METHOD: expand node # # Expands the hierarchy beneath the specified node. Since this can take # a moment for large hierarchies, the cursor will be changed to a watch # during the expansion. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::expand {node} { if {! [info exists _states($node)]} { error "bad expand node argument: \"$node\", the node doesn't exist" } if {!$_states($node) && \ (([lsearch $_tags($node) branch] != -1) || \ ([llength [_contents $node]] > 0))} { $itk_component(list) configure -state normal -cursor watch update # # Get the indentation level for the node. # set indent $_indents($node) set _markers "" $itk_component(list) mark set insert "$node:start" _drawLevel $node $indent # # Following the draw, all our markers need adjusting. # foreach {name index} $_markers { $itk_component(list) mark set $name $index } # # Set the image to be the open icon, denote the new state, # and set the cursor back to normal along with the state. # $_images($node) configure -image $itk_option(-openicon) set _states($node) 1 $itk_component(list) configure -state disabled \ -cursor $itk_option(-cursor) } } # ---------------------------------------------------------------------- # PUBLIC METHOD: collapse node # # Collapses the hierarchy beneath the specified node. Since this can # take a moment for large hierarchies, the cursor will be changed to a # watch during the expansion. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::collapse {node} { if {! [info exists _states($node)]} { error "bad collapse node argument: \"$node\", the node doesn't exist" } if {[info exists _states($node)] && $_states($node) && \ (([lsearch $_tags($node) branch] != -1) || \ ([llength [_contents $node]] > 0))} { $itk_component(list) configure -state normal -cursor watch update _deselectSubNodes $node $itk_component(list) delete "$node:start" "$node:end" catch {$_images($node) configure -image $itk_option(-closedicon)} set _states($node) 0 $itk_component(list) configure -state disabled \ -cursor $itk_option(-cursor) } } # ---------------------------------------------------------------------- # PUBLIC METHOD: toggle node # # Toggles the hierarchy beneath the specified node. If the hierarchy # is currently expanded, then it is collapsed, and vice-versa. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::toggle {node} { if {! [info exists _states($node)]} { error "bad toggle node argument: \"$node\", the node doesn't exist" } if {$_states($node)} { collapse $node } else { expand $node } } # ---------------------------------------------------------------------- # PUBLIC METHOD: prune node # # Removes a particular node from the hierarchy. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::prune {node} { # # While we're working, change the state and cursor so we can # edit the text and give a busy visual clue. # $itk_component(list) configure -state normal -cursor watch # # Recursively delete all the subnode information from our internal # arrays and remove all the tags. # _deleteNodeInfo $node # # If the mark $node:end exists then the node has decendents so # so we'll remove from the mark $node:start to $node:end in order # to delete all the subnodes below it in the text. # if {[lsearch [$itk_component(list) mark names] $node:end] != -1} { $itk_component(list) delete $node:start $node:end $itk_component(list) mark unset $node:end } # # Next we need to remove the node itself. Using the ranges for # its tag we'll remove it from line start to the end plus one # character which takes us to the start of the next node. # foreach {start end} [$itk_component(list) tag ranges $node] { $itk_component(list) delete "$start linestart" "$end + 1 char" } # # Delete the tag for this node. # $itk_component(list) tag delete $node # # The node must be removed from the list of subnodes for its parent. # We don't really have a clean way to do upwards referencing, so # the dirty way will have to do. We'll cycle through each node # and if this node is in its list of subnodes, we'll remove it. # foreach uid [array names _nodes] { if {[set index [lsearch $_nodes($uid) $node]] != -1} { set _nodes($uid) [lreplace $_nodes($uid) $index $index] } } # # We're done, so change the state and cursor back to their # original values. # $itk_component(list) configure -state disabled -cursor $itk_option(-cursor) } # ---------------------------------------------------------------------- # PUBLIC METHOD: draw ?when? # # Performs a complete draw of the entire hierarchy. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::draw {{when -now}} { if {$when == "-eventually"} { if {$_pending == ""} { set _pending [after idle [itcl::code $this draw -now]] } return } elseif {$when != "-now"} { error "bad when option \"$when\": should be -eventually or -now" } $itk_component(list) configure -state normal -cursor watch update $itk_component(list) delete 1.0 end catch {unset _images} set _markers "" _drawLevel "" "" foreach {name index} $_markers { $itk_component(list) mark set $name $index } $itk_component(list) configure -state disabled -cursor $itk_option(-cursor) set _pending "" } # ---------------------------------------------------------------------- # PUBLIC METHOD: refresh node # # Performs a redraw of a specific node. If that node is currently # not visible, then no action is taken. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::refresh {node} { if {! [info exists _nodes($node)]} { error "bad refresh node argument: \"$node\", the node doesn't exist" } if {! $_states($node)} {return} foreach parent [_getHeritage $node] { if {! $_states($parent)} {return} } $itk_component(list) configure -state normal -cursor watch $itk_component(list) delete $node:start $node:end set _markers "" $itk_component(list) mark set insert "$node:start" set indent $_indents($node) _drawLevel $node $indent foreach {name index} $_markers { $itk_component(list) mark set $name $index } $itk_component(list) configure -state disabled -cursor $itk_option(-cursor) } # ------------------------------------------------------------------ # THIN WRAPPED TEXT METHODS: # # The following methods are thin wraps of standard text methods. # Consult the Tk text man pages for functionallity and argument # documentation. # ------------------------------------------------------------------ # ------------------------------------------------------------------ # PUBLIC METHOD: bbox index # # Returns four element list describing the bounding box for the list # item at index # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::bbox {index} { return [$itk_component(list) bbox $index] } # ------------------------------------------------------------------ # PUBLIC METHOD compare index1 op index2 # # Compare indices according to relational operator. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::compare {index1 op index2} { return [$itk_component(list) compare $index1 $op $index2] } # ------------------------------------------------------------------ # PUBLIC METHOD delete first ?last? # # Delete a range of characters from the text. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::delete {first {last {}}} { $itk_component(list) configure -state normal -cursor watch $itk_component(list) delete $first $last $itk_component(list) configure -state disabled -cursor $itk_option(-cursor) } # ------------------------------------------------------------------ # PUBLIC METHOD dump ?switches? index1 ?index2? # # Returns information about the contents of the text widget from # index1 to index2. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::dump {args} { return [eval $itk_component(list) dump $args] } # ------------------------------------------------------------------ # PUBLIC METHOD dlineinfo index # # Returns a five element list describing the area occupied by the # display line containing index. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::dlineinfo {index} { return [$itk_component(list) dlineinfo $index] } # ------------------------------------------------------------------ # PUBLIC METHOD get index1 ?index2? # # Return text from start index to end index. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::get {index1 {index2 {}}} { return [$itk_component(list) get $index1 $index2] } # ------------------------------------------------------------------ # PUBLIC METHOD index index # # Return position corresponding to index. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::index {index} { return [$itk_component(list) index $index] } # ------------------------------------------------------------------ # PUBLIC METHOD insert index chars ?tagList? # # Insert text at index. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::insert {args} { $itk_component(list) configure -state normal -cursor watch eval $itk_component(list) insert $args $itk_component(list) configure -state disabled -cursor $itk_option(-cursor) } # ------------------------------------------------------------------ # PUBLIC METHOD scan option args # # Implements scanning on texts. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::scan {option args} { eval $itk_component(list) scan $option $args } # ------------------------------------------------------------------ # PUBLIC METHOD search ?switches? pattern index ?varName? # # Searches the text for characters matching a pattern. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::search {args} { return [eval $itk_component(list) search $args] } # ------------------------------------------------------------------ # PUBLIC METHOD see index # # Adjusts the view in the window so the character at index is # visible. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::see {index} { $itk_component(list) see $index } # ------------------------------------------------------------------ # PUBLIC METHOD tag option ?arg arg ...? # # Manipulate tags dependent on options. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::tag {op args} { return [eval $itk_component(list) tag $op $args] } # ------------------------------------------------------------------ # PUBLIC METHOD window option ?arg arg ...? # # Manipulate embedded windows. # ------------------------------------------------------------------ itcl::body iwidgets::Hierarchy::window {option args} { return [eval $itk_component(list) window $option $args] } # ---------------------------------------------------------------------- # PUBLIC METHOD: xview args # # Thin wrap of the text widget's xview command. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::xview {args} { return [eval itk_component(list) xview $args] } # ---------------------------------------------------------------------- # PUBLIC METHOD: yview args # # Thin wrap of the text widget's yview command. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::yview {args} { return [eval $itk_component(list) yview $args] } # ---------------------------------------------------------------------- # PUBLIC METHOD: expanded node # # Tells if a node is expanded or collapsed # # Douglas R. Howard, Jr. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::expanded {node} { if {! [info exists _states($node)]} { error "bad collapse node argument: \"$node\", the node doesn't exist" } return $_states($node) } # ---------------------------------------------------------------------- # PUBLIC METHOD: expState # # Returns a list of all expanded nodes # # Douglas R. Howard, Jr. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::expState {} { set nodes [_contents ""] set open "" set i 0 while {1} { if {[info exists _states([lindex $nodes $i])] && $_states([lindex $nodes $i])} { lappend open [lindex $nodes $i] foreach child [_contents [lindex $nodes $i]] { lappend nodes $child } } incr i if {$i >= [llength $nodes]} {break} } return $open } # ------------------------------------------------------------------ # PROTECTED METHODS # ------------------------------------------------------------------ # ---------------------------------------------------------------------- # PROTECTED METHOD: _drawLevel node indent # # Used internally by draw to draw one level of the hierarchy. # Draws all of the nodes under node, using the indent string to # indent nodes. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_drawLevel {node indent} { lappend _markers "$node:start" [$itk_component(list) index insert] set bg [$itk_component(list) cget -background] # # Obtain the list of subnodes for this node and cycle through # each one displaying it in the hierarchy. # foreach child [_contents $node] { set _images($child) "$itk_component(list).hicon[incr _hcounter]" if {![info exists _states($child)]} { set _states($child) $itk_option(-expanded) } # # Check the user tags to see if they have been kind enough # to tell us ahead of time what type of node we are dealing # with branch or leaf. If they neglected to do so, then # get the contents of the child node to see if it has children # itself. # set display 0 if {[lsearch $_tags($child) leaf] != -1} { set type leaf } elseif {[lsearch $_tags($child) branch] != -1} { set type branch } else { if {[llength [_contents $child]] == 0} { set type leaf } else { set type branch } } # # Now that we know the type of node, branch or leaf, we know # the type of icon to use. # if {$type == "leaf"} { set icon $itk_option(-nodeicon) eval $_filterCode } else { if {$_states($child)} { set icon $itk_option(-openicon) } else { set icon $itk_option(-closedicon) } set display 1 } # # If display is set then we're going to be drawing this node. # Save off the indentation level for this node and do the indent. # if {$display} { set _indents($child) "$indent\t" $itk_component(list) insert insert $indent # # Add the branch or leaf icon and setup a binding to toggle # its expanded/collapsed state. # label $_images($child) -image $icon -background $bg # DRH - enhanced and added features that handle image clicking, # double clicking, and right clicking behavior bind $_images($child) <ButtonPress-1> \ "[itcl::code $this toggle $child]; [itcl::code $this _imageSelect $child]" bind $_images($child) <Double-1> [itcl::code $this _imageDblClick $child] bind $_images($child) <ButtonPress-3> \ [itcl::code $this _imagePost $child $_images($child) $type %x %y] $itk_component(list) window create insert -window $_images($child) # # If any user icons exist then draw them as well. The little # regexp is just to check and see if they've passed in a # command which needs to be evaluated as opposed to just # a variable. Also, attach a binding to call them if their # icon is selected. # if {[info exists _icons($child)]} { foreach image $_icons($child) { set wid "$itk_component(list).uicon[incr _ucounter]" if {[regexp {\[.*\]} $image]} { eval label $wid -image $image -background $bg } else { label $wid -image $image -background $bg } # DRH - this will bind events to the icons to allow # clicking, double clicking, and right clicking actions. bind $wid <ButtonPress-1> \ [itcl::code $this _iconSelect $child $image] bind $wid <Double-1> \ [itcl::code $this _iconDblSelect $child $image] bind $wid <ButtonPress-3> \ [itcl::code $this _imagePost $child $wid $type %x %y] $itk_component(list) window create insert -window $wid } } # # Create the list of tags to be applied to the text. Start # out with a tag of "info" and append "hilite" if the node # is currently selected, finally add the tags given by the # user. # set texttags [list "info" $child] if {[info exists _selected($child)]} { lappend texttags hilite } # The following conditional added for SF ticket #600941. if {[info exists _marked($child)]} { lappend texttags lowlite } foreach tag $_tags($child) { lappend texttags $tag } # # Insert the text for the node along with the tags and # append to the markers the start of this node. The text # has been broken at newlines into a list. We'll make sure # that each line is at the same indentation position. # set firstline 1 foreach line $_text($child) { if {$firstline} { $itk_component(list) insert insert " " } else { $itk_component(list) insert insert "$indent\t" } $itk_component(list) insert insert $line $texttags "\n" set firstline 0 } $itk_component(list) tag raise $child lappend _markers "$child:start" [$itk_component(list) index insert] # # If the state of the node is open, proceed to draw the next # node below it in the hierarchy. # if {$_states($child)} { _drawLevel $child "$indent\t" } } } lappend _markers "$node:end" [$itk_component(list) index insert] } # ---------------------------------------------------------------------- # PROTECTED METHOD: _contents uid # # Used internally to get the contents of a particular node. If this # is the first time the node has been seen or the -alwaysquery # option is set, the -querycommand code is executed to query the node # list, and the list is stored until the next time it is needed. # # The querycommand may return not only the list of subnodes for the # node but additional information on the tags and icons to be used. # The return value must be parsed based on the number of elements in # the list where the format is a list of lists: # # {{uid [text [tags [icons]]]} {uid [text [tags [icons]]]} ...} # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_contents {uid} { if {$itk_option(-alwaysquery)} { } else { if {[info exists _nodes($uid)]} { return $_nodes($uid) } } # # Substitute any %n's for the node name whose children we're # interested in obtaining. # set cmd $itk_option(-querycommand) regsub -all {%n} $cmd [list $uid] cmd set nodeinfolist [uplevel \#0 $cmd] # # Cycle through the node information returned by the query # command determining if additional information such as text, # user tags, or user icons have been provided. For text, # break it into a list at any newline characters. # set _nodes($uid) {} foreach nodeinfo $nodeinfolist { set subnodeuid [lindex $nodeinfo 0] lappend _nodes($uid) $subnodeuid set llen [llength $nodeinfo] if {$llen == 0 || $llen > 4} { error "invalid number of elements returned by query\ command for node: \"$uid\",\ should be uid \[text \[tags \[icons\]\]\]" } if {$llen == 1} { set _text($subnodeuid) [split $subnodeuid \n] } if {$llen > 1} { set _text($subnodeuid) [split [lindex $nodeinfo 1] \n] } if {$llen > 2} { set _tags($subnodeuid) [lindex $nodeinfo 2] } else { set _tags($subnodeuid) unknown } if {$llen > 3} { set _icons($subnodeuid) [lindex $nodeinfo 3] } } # # Return the list of nodes. # return $_nodes($uid) } # ---------------------------------------------------------------------- # PROTECTED METHOD: _post x y # # Used internally to post the popup menu at the coordinate (x,y) # relative to the widget. If (x,y) is on an item, then the itemMenu # component is posted. Otherwise, the bgMenu is posted. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_post {x y} { set rx [expr {[winfo rootx $itk_component(list)]+$x}] set ry [expr {[winfo rooty $itk_component(list)]+$y}] set index [$itk_component(list) index @$x,$y] # # The posted variable will hold the list of tags which exist at # this x,y position that will be passed back to the user. They # don't need to know about our internal tags, info, hilite, and # lowlite, so remove them from the list. # set _posted {} foreach tag [$itk_component(list) tag names $index] { if {![_isInternalTag $tag]} { lappend _posted $tag } } # # If we have tags then do the popup at this position. # if {$_posted != {}} { # DRH - here is where the user's function for dynamic popup # menu loading is done, if the user has specified to do so with the # "-textmenuloadcommand" if {$itk_option(-textmenuloadcommand) != {}} { eval $itk_option(-textmenuloadcommand) } tk_popup $itk_component(itemMenu) $rx $ry } else { tk_popup $itk_component(bgMenu) $rx $ry } } # ---------------------------------------------------------------------- # PROTECTED METHOD: _imagePost node image type x y # # Used internally to post the popup menu at the coordinate (x,y) # relative to the widget. If (x,y) is on an image, then the itemMenu # component is posted. # # Douglas R. Howard, Jr. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_imagePost {node image type x y} { set rx [expr {[winfo rootx $image]+$x}] set ry [expr {[winfo rooty $image]+$y}] # # The posted variable will hold the list of tags which exist at # this x,y position that will be passed back to the user. They # don't need to know about our internal tags, info, hilite, and # lowlite, so remove them from the list. # set _posted {} lappend _posted $node $type # # If we have tags then do the popup at this position. # if {$itk_option(-imagemenuloadcommand) != {}} { eval $itk_option(-imagemenuloadcommand) } tk_popup $itk_component(itemMenu) $rx $ry } # ---------------------------------------------------------------------- # PROTECTED METHOD: _select x y # # Used internally to select an item at the coordinate (x,y) relative # to the widget. The command associated with the -selectcommand # option is execute following % character substitutions. If %n # appears in the command, the selected node is substituted. If %s # appears, a boolean value representing the current selection state # will be substituted. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_select {x y} { if {$itk_option(-selectcommand) != {}} { if {[set seltags [$itk_component(list) tag names @$x,$y]] != {}} { foreach tag $seltags { if {![_isInternalTag $tag]} { lappend node $tag } } if {[lsearch $seltags "hilite"] == -1} { set selectstatus 0 } else { set selectstatus 1 } set cmd $itk_option(-selectcommand) regsub -all {%n} $cmd [lindex $node end] cmd regsub -all {%s} $cmd [list $selectstatus] cmd uplevel #0 $cmd } } return } # ---------------------------------------------------------------------- # PROTECTED METHOD: _double x y # # Used internally to double click an item at the coordinate (x,y) relative # to the widget. The command associated with the -dblclickcommand # option is execute following % character substitutions. If %n # appears in the command, the selected node is substituted. If %s # appears, a boolean value representing the current selection state # will be substituted. # # Douglas R. Howard, Jr. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_double {x y} { if {$itk_option(-dblclickcommand) != {}} { if {[set seltags [$itk_component(list) tag names @$x,$y]] != {}} { foreach tag $seltags { if {![_isInternalTag $tag]} { lappend node $tag } } if {[lsearch $seltags "hilite"] == -1} { set selectstatus 0 } else { set selectstatus 1 } set cmd $itk_option(-dblclickcommand) regsub -all {%n} $cmd [list $node] cmd regsub -all {%s} $cmd [list $selectstatus] cmd uplevel #0 $cmd } } return } # ---------------------------------------------------------------------- # PROTECTED METHOD: _iconSelect node icon # # Used internally to upon selection of user icons. The -iconcommand # is executed after substitution of the node for %n and icon for %i. # # Douglas R. Howard, Jr. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_iconSelect {node icon} { set cmd $itk_option(-iconcommand) regsub -all {%n} $cmd [list $node] cmd regsub -all {%i} $cmd [list $icon] cmd uplevel \#0 $cmd return {} } # ---------------------------------------------------------------------- # PROTECTED METHOD: _iconDblSelect node icon # # Used internally to upon double selection of user icons. The # -icondblcommand is executed after substitution of the node for %n and # icon for %i. # # Douglas R. Howard, Jr. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_iconDblSelect {node icon} { if {$itk_option(-icondblcommand) != {}} { set cmd $itk_option(-icondblcommand) regsub -all {%n} $cmd [list $node] cmd regsub -all {%i} $cmd [list $icon] cmd uplevel \#0 $cmd } return {} } # ---------------------------------------------------------------------- # PROTECTED METHOD: _imageSelect node icon # # Used internally to upon selection of user icons. The -imagecommand # is executed after substitution of the node for %n. # # Douglas R. Howard, Jr. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_imageSelect {node} { if {$itk_option(-imagecommand) != {}} { set cmd $itk_option(-imagecommand) regsub -all {%n} $cmd [list $node] cmd uplevel \#0 $cmd } return {} } # ---------------------------------------------------------------------- # PROTECTED METHOD: _imageDblClick node # # Used internally to upon double selection of images. The # -imagedblcommand is executed. # # Douglas R. Howard, Jr. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_imageDblClick {node} { if {$itk_option(-imagedblcommand) != {}} { set cmd $itk_option(-imagedblcommand) regsub -all {%n} $cmd [list $node] cmd uplevel \#0 $cmd } return {} } # ---------------------------------------------------------------------- # PROTECTED METHOD: _deselectSubNodes uid # # Used internally to recursively deselect all the nodes beneath a # particular node. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_deselectSubNodes {uid} { foreach node $_nodes($uid) { if {[array names _selected $node] != {}} { unset _selected($node) } if {[array names _nodes $node] != {}} { _deselectSubNodes $node } } } # ---------------------------------------------------------------------- # PROTECTED METHOD: _deleteNodeInfo uid # # Used internally to recursively delete all the information about a # node and its decendents. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_deleteNodeInfo {uid} { # # Recursively call ourseleves as we go down the hierarchy beneath # this node. # if {[info exists _nodes($uid)]} { foreach node $_nodes($uid) { if {[array names _nodes $node] != {}} { _deleteNodeInfo $node } } } # # Unset any entries in our arrays for the node. # catch {unset _nodes($uid)} catch {unset _text($uid)} catch {unset _tags($uid)} catch {unset _icons($uid)} catch {unset _states($uid)} catch {unset _images($uid)} catch {unset _indents($uid)} } # ---------------------------------------------------------------------- # PROTECTED METHOD: _getParent uid # # Used internally to determine the parent for a node. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_getParent {uid} { foreach node [array names _nodes] { if {[set index [lsearch $_nodes($node) $uid]] != -1} { return $node } } } # ---------------------------------------------------------------------- # PROTECTED METHOD: _getHeritage uid # # Used internally to determine the list of parents for a node. # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_getHeritage {uid} { set parents {} if {[set parent [_getParent $uid]] != {}} { lappend parents $parent } return $parents } # ---------------------------------------------------------------------- # PROTECTED METHOD (could be proc?): _isInternalTag tag # # Used internally to tags not to used for user callback commands # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_isInternalTag {tag} { set ii [expr {[lsearch -exact {info hilite lowlite unknown} $tag] != -1}]; return $ii; } # ---------------------------------------------------------------------- # PRIVATE METHOD: _configureTags # # This method added to fix SF ticket #596111. When the -querycommand # is reset after initial construction, the text component loses its # tag configuration. This method resets the hilite, lowlite, and info # tags. csmith: 9/5/02 # ---------------------------------------------------------------------- itcl::body iwidgets::Hierarchy::_configureTags {} { tag configure hilite -background $itk_option(-selectbackground) \ -foreground $itk_option(-selectforeground) tag configure lowlite -background $itk_option(-markbackground) \ -foreground $itk_option(-markforeground) tag configure info -font $itk_option(-font) -spacing1 6 } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/labeledwidget.itk������������������������������������������������������������0000644�0036047�0045461�00000035031�07340266355�016664� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Labeledwidget # ---------------------------------------------------------------------- # Implements a labeled widget which contains a label and child site. # The child site is a frame which can filled with any widget via a # derived class or though the use of the childsite method. This class # was designed to be a general purpose base class for supporting the # combination of label widget and a childsite, where a label may be # text, bitmap or image. The options include the ability to position # the label around the childsite widget, modify the font and margin, # and control the display of the label. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) $Id: labeledwidget.itk,v 1.4 2001/08/20 20:02:53 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Labeledwidget { keep -background -cursor -foreground -labelfont } # ------------------------------------------------------------------ # LABELEDWIDGET # ------------------------------------------------------------------ itcl::class iwidgets::Labeledwidget { inherit itk::Widget constructor {args} {} destructor {} itk_option define -disabledforeground disabledForeground \ DisabledForeground \#a3a3a3 itk_option define -labelpos labelPos Position w itk_option define -labelmargin labelMargin Margin 2 itk_option define -labeltext labelText Text {} itk_option define -labelvariable labelVariable Variable {} itk_option define -labelbitmap labelBitmap Bitmap {} itk_option define -labelimage labelImage Image {} itk_option define -state state State normal itk_option define -sticky sticky Sticky nsew public method childsite private method _positionLabel {{when later}} proc alignlabels {args} {} protected variable _reposition "" ;# non-null => _positionLabel pending } # # Provide a lowercased access method for the Labeledwidget class. # proc ::iwidgets::labeledwidget {pathName args} { uplevel ::iwidgets::Labeledwidget $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Labeledwidget::constructor {args} { # # Create a frame for the childsite widget. # itk_component add -protected lwchildsite { frame $itk_interior.lwchildsite } # # Create label. # itk_component add label { label $itk_interior.label } { usual rename -font -labelfont labelFont Font ignore -highlightcolor -highlightthickness } # # Set the interior to be the childsite for derived classes. # set itk_interior $itk_component(lwchildsite) # # Initialize the widget based on the command line options. # eval itk_initialize $args # # When idle, position the label. # _positionLabel } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Labeledwidget::destructor {} { if {$_reposition != ""} {after cancel $_reposition} } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -disabledforeground # # Specified the foreground to be used on the label when disabled. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledwidget::disabledforeground {} # ------------------------------------------------------------------ # OPTION: -labelpos # # Set the position of the label on the labeled widget. The margin # between the label and childsite comes along for the ride. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledwidget::labelpos { _positionLabel } # ------------------------------------------------------------------ # OPTION: -labelmargin # # Specifies the distance between the widget and label. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledwidget::labelmargin { _positionLabel } # ------------------------------------------------------------------ # OPTION: -labeltext # # Specifies the label text. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledwidget::labeltext { $itk_component(label) configure -text $itk_option(-labeltext) _positionLabel } # ------------------------------------------------------------------ # OPTION: -labelvariable # # Specifies the label text variable. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledwidget::labelvariable { $itk_component(label) configure -textvariable $itk_option(-labelvariable) _positionLabel } # ------------------------------------------------------------------ # OPTION: -labelbitmap # # Specifies the label bitmap. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledwidget::labelbitmap { $itk_component(label) configure -bitmap $itk_option(-labelbitmap) _positionLabel } # ------------------------------------------------------------------ # OPTION: -labelimage # # Specifies the label image. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledwidget::labelimage { $itk_component(label) configure -image $itk_option(-labelimage) _positionLabel } # ------------------------------------------------------------------ # OPTION: -sticky # # Specifies the stickyness of the child site. This option was added # by James Bonfield (committed by Chad Smith 8/20/01). # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledwidget::sticky { grid $itk_component(lwchildsite) -sticky $itk_option(-sticky) } # ------------------------------------------------------------------ # OPTION: -state # # Specifies the state of the label. # ------------------------------------------------------------------ itcl::configbody iwidgets::Labeledwidget::state { _positionLabel } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: childsite # # Returns the path name of the child site widget. # ------------------------------------------------------------------ itcl::body iwidgets::Labeledwidget::childsite {} { return $itk_component(lwchildsite) } # ------------------------------------------------------------------ # PROCEDURE: alignlabels widget ?widget ...? # # The alignlabels procedure takes a list of widgets derived from # the Labeledwidget class and adjusts the label margin to align # the labels. # ------------------------------------------------------------------ itcl::body iwidgets::Labeledwidget::alignlabels {args} { update set maxLabelWidth 0 # # Verify that all the widgets are of type Labeledwidget and # determine the size of the maximum length label string. # foreach iwid $args { set objcmd [itcl::find objects -isa Labeledwidget *::$iwid] if {$objcmd == ""} { error "$iwid is not a \"Labeledwidget\"" } set csWidth [winfo reqwidth $iwid.lwchildsite] set shellWidth [winfo reqwidth $iwid] if {($shellWidth - $csWidth) > $maxLabelWidth} { set maxLabelWidth [expr {$shellWidth - $csWidth}] } } # # Adjust the margins for the labels such that the child sites and # labels line up. # foreach iwid $args { set csWidth [winfo reqwidth $iwid.lwchildsite] set shellWidth [winfo reqwidth $iwid] set labelSize [expr {$shellWidth - $csWidth}] if {$maxLabelWidth > $labelSize} { set objcmd [itcl::find objects -isa Labeledwidget *::$iwid] set dist [expr {$maxLabelWidth - \ ($labelSize - [$objcmd cget -labelmargin])}] $objcmd configure -labelmargin $dist } } } # ------------------------------------------------------------------ # PROTECTED METHOD: _positionLabel ?when? # # Packs the label and label margin. If "when" is "now", the # change is applied immediately. If it is "later" or it is not # specified, then the change is applied later, when the application # is idle. # ------------------------------------------------------------------ itcl::body iwidgets::Labeledwidget::_positionLabel {{when later}} { if {$when == "later"} { if {$_reposition == ""} { set _reposition [after idle [itcl::code $this _positionLabel now]] } return } elseif {$when != "now"} { error "bad option \"$when\": should be now or later" } # # If we have a label, be it text, bitmap, or image continue. # if {($itk_option(-labeltext) != {}) || \ ($itk_option(-labelbitmap) != {}) || \ ($itk_option(-labelimage) != {}) || \ ($itk_option(-labelvariable) != {})} { # # Set the foreground color based on the state. # if {[info exists itk_option(-state)]} { switch -- $itk_option(-state) { disabled { $itk_component(label) configure \ -foreground $itk_option(-disabledforeground) } normal { $itk_component(label) configure \ -foreground $itk_option(-foreground) } } } set parent [winfo parent $itk_component(lwchildsite)] # # Switch on the label position option. Using the grid, # adjust the row/column setting of the label, margin, and # and childsite. The margin height/width is adjust based # on the orientation as well. Finally, set the weights such # that the childsite takes the heat on expansion and shrinkage. # switch $itk_option(-labelpos) { nw - n - ne { grid $itk_component(label) -row 0 -column 0 \ -sticky $itk_option(-labelpos) grid $itk_component(lwchildsite) -row 2 -column 0 \ -sticky $itk_option(-sticky) grid rowconfigure $parent 0 -weight 0 -minsize 0 grid rowconfigure $parent 1 -weight 0 -minsize \ [winfo pixels $itk_component(label) \ $itk_option(-labelmargin)] grid rowconfigure $parent 2 -weight 1 -minsize 0 grid columnconfigure $parent 0 -weight 1 -minsize 0 grid columnconfigure $parent 1 -weight 0 -minsize 0 grid columnconfigure $parent 2 -weight 0 -minsize 0 } en - e - es { grid $itk_component(lwchildsite) -row 0 -column 0 \ -sticky $itk_option(-sticky) grid $itk_component(label) -row 0 -column 2 \ -sticky $itk_option(-labelpos) grid rowconfigure $parent 0 -weight 1 -minsize 0 grid rowconfigure $parent 1 -weight 0 -minsize 0 grid rowconfigure $parent 2 -weight 0 -minsize 0 grid columnconfigure $parent 0 -weight 1 -minsize 0 grid columnconfigure $parent 1 -weight 0 -minsize \ [winfo pixels $itk_component(label) \ $itk_option(-labelmargin)] grid columnconfigure $parent 2 -weight 0 -minsize 0 } se - s - sw { grid $itk_component(lwchildsite) -row 0 -column 0 \ -sticky $itk_option(-sticky) grid $itk_component(label) -row 2 -column 0 \ -sticky $itk_option(-labelpos) grid rowconfigure $parent 0 -weight 1 -minsize 0 grid rowconfigure $parent 1 -weight 0 -minsize \ [winfo pixels $itk_component(label) \ $itk_option(-labelmargin)] grid rowconfigure $parent 2 -weight 0 -minsize 0 grid columnconfigure $parent 0 -weight 1 -minsize 0 grid columnconfigure $parent 1 -weight 0 -minsize 0 grid columnconfigure $parent 2 -weight 0 -minsize 0 } wn - w - ws { grid $itk_component(lwchildsite) -row 0 -column 2 \ -sticky $itk_option(-sticky) grid $itk_component(label) -row 0 -column 0 \ -sticky $itk_option(-labelpos) grid rowconfigure $parent 0 -weight 1 -minsize 0 grid rowconfigure $parent 1 -weight 0 -minsize 0 grid rowconfigure $parent 2 -weight 0 -minsize 0 grid columnconfigure $parent 0 -weight 0 -minsize 0 grid columnconfigure $parent 1 -weight 0 -minsize \ [winfo pixels $itk_component(label) \ $itk_option(-labelmargin)] grid columnconfigure $parent 2 -weight 1 -minsize 0 } default { error "bad labelpos option\ \"$itk_option(-labelpos)\": should be\ nw, n, ne, sw, s, se, en, e, es, wn, w, or ws" } } # # Else, neither the label text, bitmap, or image have a value, so # forget them so they don't appear and manage only the childsite. # } else { grid forget $itk_component(label) grid $itk_component(lwchildsite) -row 0 -column 0 -sticky $itk_option(-sticky) set parent [winfo parent $itk_component(lwchildsite)] grid rowconfigure $parent 0 -weight 1 -minsize 0 grid rowconfigure $parent 1 -weight 0 -minsize 0 grid rowconfigure $parent 2 -weight 0 -minsize 0 grid columnconfigure $parent 0 -weight 1 -minsize 0 grid columnconfigure $parent 1 -weight 0 -minsize 0 grid columnconfigure $parent 2 -weight 0 -minsize 0 } # # Reset the resposition flag. # set _reposition "" } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/spintime.itk�����������������������������������������������������������������0000644�0036047�0045461�00000037651�07337265315�015733� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spintime # ---------------------------------------------------------------------- # Implements a Time spinner widget. A time spinner contains three # integer spinners: one for hours, one for minutes and one for # seconds. Options exist to manage to behavior, appearance, and # format of each component spinner. # # ---------------------------------------------------------------------- # AUTHOR: Sue Yockey EMAIL: yockey@actc.com # Mark L. Ulferts mulferts@austin.dsccc.com # # @(#) $Id: spintime.itk,v 1.3 2001/08/17 19:04:45 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Default resources. # option add *Spintime.hourLabel "Hour" widgetDefault option add *Spintime.minuteLabel "Minute" widgetDefault option add *Spintime.secondLabel "Second" widgetDefault option add *Spintime.hourWidth 3 widgetDefault option add *Spintime.minuteWidth 3 widgetDefault option add *Spintime.secondWidth 3 widgetDefault # # Usual options. # itk::usual Spintime { keep -background -cursor -foreground -labelfont -textbackground -textfont } # ------------------------------------------------------------------ # SPINTIME # ------------------------------------------------------------------ itcl::class iwidgets::Spintime { inherit itk::Widget constructor {args} {} destructor {} itk_option define -orient orient Orient vertical itk_option define -labelpos labelPos Position w itk_option define -houron hourOn HourOn true itk_option define -minuteon minuteOn MinuteOn true itk_option define -secondon secondOn SecondOn true itk_option define -timemargin timeMargin Margin 1 itk_option define -militaryon militaryOn MilitaryOn true public { method get {{format "-string"}} method show {{date now}} } protected { method _packTime {{when later}} method _down60 {comp} variable _repack {} ;# Reconfiguration flag. variable _interior } } # # Provide a lowercased access method for the Spintime class. # proc ::iwidgets::spintime {pathName args} { uplevel ::iwidgets::Spintime $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Spintime::constructor {args} { set _interior $itk_interior set clicks [clock seconds] # # Create Hour Spinner # itk_component add hour { iwidgets::Spinint $itk_interior.hour -fixed 2 -range {0 23} -justify right } { keep -background -cursor -arroworient -foreground \ -labelfont -labelmargin -relief -textbackground \ -textfont -repeatdelay -repeatinterval rename -labeltext -hourlabel hourLabel Text rename -width -hourwidth hourWidth Width } # # Take off the default bindings for selction and motion. # bind [$itk_component(hour) component entry] <1> {break} bind [$itk_component(hour) component entry] <Button1-Motion> {break} # # Create Minute Spinner # itk_component add minute { iwidgets::Spinint $itk_interior.minute \ -decrement [itcl::code $this _down60 minute] \ -fixed 2 -range {0 59} -justify right } { keep -background -cursor -arroworient -foreground \ -labelfont -labelmargin -relief -textbackground \ -textfont -repeatdelay -repeatinterval rename -labeltext -minutelabel minuteLabel Text rename -width -minutewidth minuteWidth Width } # # Take off the default bindings for selction and motion. # bind [$itk_component(minute) component entry] <1> {break} bind [$itk_component(minute) component entry] <Button1-Motion> {break} # # Create Second Spinner # itk_component add second { iwidgets::Spinint $itk_interior.second \ -decrement [itcl::code $this _down60 second] \ -fixed 2 -range {0 59} -justify right } { keep -background -cursor -arroworient -foreground \ -labelfont -labelmargin -relief -textbackground \ -textfont -repeatdelay -repeatinterval rename -labeltext -secondlabel secondLabel Text rename -width -secondwidth secondWidth Width } # # Take off the default bindings for selction and motion. # bind [$itk_component(second) component entry] <1> {break} bind [$itk_component(second) component entry] <Button1-Motion> {break} # # Initialize the widget based on the command line options. # eval itk_initialize $args # # Show the current time. # show now } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Spintime::destructor {} { if {$_repack != ""} {after cancel $_repack} } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -orient # # Specifies the orientation of the 3 spinners for Hour, Minute # and second. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spintime::orient { _packTime } # ------------------------------------------------------------------ # OPTION: -labelpos # # Specifies the location of all 3 spinners' labels. # Overloaded # ------------------------------------------------------------------ itcl::configbody iwidgets::Spintime::labelpos { switch $itk_option(-labelpos) { n { $itk_component(hour) configure -labelpos n $itk_component(minute) configure -labelpos n $itk_component(second) configure -labelpos n # # Un-align labels # $itk_component(hour) configure -labelmargin 1 $itk_component(minute) configure -labelmargin 1 $itk_component(second) configure -labelmargin 1 } s { $itk_component(hour) configure -labelpos s $itk_component(minute) configure -labelpos s $itk_component(second) configure -labelpos s # # Un-align labels # $itk_component(hour) configure -labelmargin 1 $itk_component(minute) configure -labelmargin 1 $itk_component(second) configure -labelmargin 1 } w { $itk_component(hour) configure -labelpos w $itk_component(minute) configure -labelpos w $itk_component(second) configure -labelpos w } e { $itk_component(hour) configure -labelpos e $itk_component(minute) configure -labelpos e $itk_component(second) configure -labelpos e # # Un-align labels # $itk_component(hour) configure -labelmargin 1 $itk_component(minute) configure -labelmargin 1 $itk_component(second) configure -labelmargin 1 } default { error "bad labelpos option \"$itk_option(-labelpos)\",\ should be n, s, w or e" } } _packTime } # ------------------------------------------------------------------ # OPTION: -houron # # Specifies whether or not to display the hour spinner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spintime::houron { _packTime } # ------------------------------------------------------------------ # OPTION: -minuteon # # Specifies whether or not to display the minute spinner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spintime::minuteon { _packTime } # ------------------------------------------------------------------ # OPTION: -secondon # # Specifies whether or not to display the second spinner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spintime::secondon { _packTime } # ------------------------------------------------------------------ # OPTION: -timemargin # # Specifies the margin space between the hour and minute spinners # and the minute and second spinners. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spintime::timemargin { _packTime } # ------------------------------------------------------------------ # OPTION: -militaryon # # Specifies 24-hour clock or 12-hour. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spintime::militaryon { set clicks [clock seconds] if {$itk_option(-militaryon)} { $itk_component(hour) configure -range {0 23} $itk_component(hour) delete 0 end $itk_component(hour) insert end [clock format $clicks -format "%H"] } else { $itk_component(hour) configure -range {1 12} $itk_component(hour) delete 0 end $itk_component(hour) insert end [clock format $clicks -format "%I"] } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: get ?format? # # Get the value of the time spinner in one of two formats string or # as an integer clock value using the -string and -clicks options # respectively. The default is by string. Reference the clock # command for more information on obtaining time and its formats. # ------------------------------------------------------------------ itcl::body iwidgets::Spintime::get {{format "-string"}} { set hour [$itk_component(hour) get] set minute [$itk_component(minute) get] set second [$itk_component(second) get] switch -- $format { "-string" { return "$hour:$minute:$second" } "-clicks" { return [clock scan "$hour:$minute:$second"] } default { error "bad format option \"$format\":\ should be -string or -clicks" } } } # ------------------------------------------------------------------ # PUBLIC METHOD: show time # # Changes the currently displayed time to be that of the time # argument. The time may be specified either as a string or an # integer clock value. Reference the clock command for more # information on obtaining time and its format. # ------------------------------------------------------------------ itcl::body iwidgets::Spintime::show {{time "now"}} { if {$time == "now"} { set seconds [clock seconds] } else { if {[catch {clock format $time}] == 0} { set seconds $time } elseif {[catch {set seconds [clock scan $time]}] != 0} { error "bad time: \"$time\", must be a valid time\ string, clock clicks value or the keyword now" } } $itk_component(hour) delete 0 end if {$itk_option(-militaryon)} { scan [clock format $seconds -format "%H"] "%d" hour } else { scan hour [clock format $seconds -format "%I"] "%d" hour } $itk_component(hour) insert end $hour $itk_component(minute) delete 0 end scan [clock format $seconds -format "%M"] "%d" minute $itk_component(minute) insert end $minute $itk_component(second) delete 0 end scan [clock format $seconds -format "%S"] "%d" seconds $itk_component(second) insert end $seconds return } # ------------------------------------------------------------------ # PROTECTED METHOD: _packTime ?when? # # Pack components of time spinner. If "when" is "now", the change # is applied immediately. If it is "later" or it is not specified, # then the change is applied later, when the application is idle. # ------------------------------------------------------------------ itcl::body iwidgets::Spintime::_packTime {{when later}} { if {$when == "later"} { if {$_repack == ""} { set _repack [after idle [itcl::code $this _packTime now]] } return } elseif {$when != "now"} { error "bad option \"$when\": should be now or later" } for {set i 0} {$i < 5} {incr i} { grid rowconfigure $_interior $i -minsize 0 grid columnconfigure $_interior $i -minsize 0 } if {$itk_option(-minuteon)} { set minuteon 1 } else { set minuteon 0 } if {$itk_option(-secondon)} { set secondon 1 } else { set secondon 0 } set _repack "" switch $itk_option(-orient) { vertical { set row -1 if {$itk_option(-houron)} { grid $itk_component(hour) -row [incr row] -column 0 \ -sticky nsew } else { grid forget $itk_component(hour) } if {$itk_option(-minuteon)} { if {$itk_option(-houron)} { grid rowconfigure $_interior [incr row] \ -minsize $itk_option(-timemargin) } grid $itk_component(minute) -row [incr row] -column 0 \ -sticky nsew } else { grid forget $itk_component(minute) } if {$itk_option(-secondon)} { if {$minuteon || $secondon} { grid rowconfigure $_interior [incr row] \ -minsize $itk_option(-timemargin) } grid $itk_component(second) -row [incr row] -column 0 \ -sticky nsew } else { grid forget $itk_component(second) } if {$itk_option(-labelpos) == "w"} { iwidgets::Labeledwidget::alignlabels $itk_component(hour) \ $itk_component(minute) $itk_component(second) } } horizontal { set column -1 if {$itk_option(-houron)} { grid $itk_component(hour) -row 0 -column [incr column] \ -sticky nsew } else { grid forget $itk_component(hour) } if {$itk_option(-minuteon)} { if {$itk_option(-houron)} { grid columnconfigure $_interior [incr column] \ -minsize $itk_option(-timemargin) } grid $itk_component(minute) -row 0 -column [incr column] \ -sticky nsew } else { grid forget $itk_component(minute) } if {$itk_option(-secondon)} { if {$minuteon || $secondon} { grid columnconfigure $_interior [incr column] \ -minsize $itk_option(-timemargin) } grid $itk_component(second) -row 0 -column [incr column] \ -sticky nsew } else { grid forget $itk_component(second) } # # Un-align labels # $itk_component(hour) configure -labelmargin 1 $itk_component(minute) configure -labelmargin 1 $itk_component(second) configure -labelmargin 1 } default { error "bad orient option \"$itk_option(-orient)\", should\ be \"vertical\" or \"horizontal\"" } } } # ------------------------------------------------------------------ # METHOD: down60 # # Down arrow button press event. Decrement value in the minute # or second entry. # ------------------------------------------------------------------ itcl::body iwidgets::Spintime::_down60 {comp} { set step [$itk_component($comp) cget -step] set val [$itk_component($comp) get] incr val -$step if {$val < 0} { set val [expr {60-$step}] } $itk_component($comp) delete 0 end $itk_component($comp) insert 0 $val } ���������������������������������������������������������������������������������������iwidgets-4.1.1/generic/scrolledtext.itk�������������������������������������������������������������0000644�0036047�0045461�00000043601�07537260565�016613� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Scrolledtext # ---------------------------------------------------------------------- # Implements a scrolled text widget with additional options to manage # the vertical scrollbar. This includes options to control the method # in which the scrollbar is displayed, i.e. statically or dynamically. # Options also exist for adding a label to the scrolled text area and # controlling its position. Import/export of methods are provided for # file I/O. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) $Id: scrolledtext.itk,v 1.5 2002/09/10 03:05:25 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Scrolledtext { keep -activebackground -activerelief -background -borderwidth -cursor \ -elementborderwidth -foreground -highlightcolor -highlightthickness \ -insertbackground -insertborderwidth -insertofftime -insertontime \ -insertwidth -jump -labelfont -selectbackground -selectborderwidth \ -selectforeground -textbackground -textfont -troughcolor } # ------------------------------------------------------------------ # SCROLLEDTEXT # ------------------------------------------------------------------ itcl::class iwidgets::Scrolledtext { inherit iwidgets::Scrolledwidget constructor {args} {} destructor {} itk_option define -width width Width 0 itk_option define -height height Height 0 itk_option define -visibleitems visibleItems VisibleItems 80x24 public method bbox {index} public method childsite {} public method clear {} public method import {filename {index end}} public method export {filename} public method compare {index1 op index2} public method debug {args} public method delete {first {last {}}} public method dlineinfo {index} public method get {index1 {index2 {}}} public method image {option args} public method index {index} public method insert {args} public method mark {option args} public method scan {option args} public method search {args} public method see {index} public method tag {option args} public method window {option args} public method xview {args} public method yview {args} } # # Provide a lowercased access method for the Scrolledtext class. # proc ::iwidgets::scrolledtext {pathName args} { uplevel ::iwidgets::Scrolledtext $pathName $args } # # Use option database to override default resources of base classes. # option add *Scrolledtext.labelPos n widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::constructor {args} { # # Our -width and -height options are slightly different than # those implemented by our base class, so we're going to # remove them and redefine our own. # itk_option remove iwidgets::Scrolledwidget::width itk_option remove iwidgets::Scrolledwidget::height # # Create a clipping frame which will provide the border for # relief display. # itk_component add clipper { frame $itk_interior.clipper } { usual keep -borderwidth -relief -highlightthickness -highlightcolor rename -highlightbackground -background background Background } grid $itk_component(clipper) -row 0 -column 0 -sticky nsew grid rowconfigure $_interior 0 -weight 1 grid columnconfigure $_interior 0 -weight 1 # # Create the text area. # itk_component add text { text $itk_component(clipper).text \ -width 1 -height 1 \ -xscrollcommand \ [itcl::code $this _scrollWidget $itk_interior.horizsb] \ -yscrollcommand \ [itcl::code $this _scrollWidget $itk_interior.vertsb] \ -borderwidth 0 -highlightthickness 0 } { usual ignore -highlightthickness -highlightcolor -borderwidth keep -exportselection -padx -pady -setgrid \ -spacing1 -spacing2 -spacing3 -state -tabs -wrap rename -font -textfont textFont Font rename -background -textbackground textBackground Background } grid $itk_component(text) -row 0 -column 0 -sticky nsew grid rowconfigure $itk_component(clipper) 0 -weight 1 grid columnconfigure $itk_component(clipper) 0 -weight 1 # # Configure the command on the vertical scroll bar in the base class. # $itk_component(vertsb) configure \ -command [itcl::code $itk_component(text) yview] # # Configure the command on the horizontal scroll bar in the base class. # $itk_component(horizsb) configure \ -command [itcl::code $itk_component(text) xview] # # Initialize the widget based on the command line options. # eval itk_initialize $args } # ------------------------------------------------------------------ # DESTURCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::destructor {} { } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -width # # Specifies the width of the scrolled text as an entire unit. # The value may be specified in any of the forms acceptable to # Tk_GetPixels. Any additional space needed to display the other # components such as labels, margins, and scrollbars force the text # to be compressed. A value of zero along with the same value for # the height causes the value given for the visibleitems option # to be applied which administers geometry constraints in a different # manner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledtext::width { if {$itk_option(-width) != 0} { set shell [lindex [grid info $itk_component(clipper)] 1] # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $shell]} { grid propagate $shell no } $itk_component(text) configure -width 1 $shell configure \ -width [winfo pixels $shell $itk_option(-width)] } else { configure -visibleitems $itk_option(-visibleitems) } } # ------------------------------------------------------------------ # OPTION: -height # # Specifies the height of the scrolled text as an entire unit. # The value may be specified in any of the forms acceptable to # Tk_GetPixels. Any additional space needed to display the other # components such as labels, margins, and scrollbars force the text # to be compressed. A value of zero along with the same value for # the width causes the value given for the visibleitems option # to be applied which administers geometry constraints in a different # manner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledtext::height { if {$itk_option(-height) != 0} { set shell [lindex [grid info $itk_component(clipper)] 1] # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $shell]} { grid propagate $shell no } $itk_component(text) configure -height 1 $shell configure \ -height [winfo pixels $shell $itk_option(-height)] } else { configure -visibleitems $itk_option(-visibleitems) } } # ------------------------------------------------------------------ # OPTION: -visibleitems # # Specified the widthxheight in characters and lines for the text. # This option is only administered if the width and height options # are both set to zero, otherwise they take precedence. With the # visibleitems option engaged, geometry constraints are maintained # only on the text. The size of the other components such as # labels, margins, and scroll bars, are additive and independent, # effecting the overall size of the scrolled text. In contrast, # should the width and height options have non zero values, they # are applied to the scrolled text as a whole. The text is # compressed or expanded to maintain the geometry constraints. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledtext::visibleitems { if {[regexp {^[0-9]+x[0-9]+$} $itk_option(-visibleitems)]} { if {($itk_option(-width) == 0) && \ ($itk_option(-height) == 0)} { set chars [lindex [split $itk_option(-visibleitems) x] 0] set lines [lindex [split $itk_option(-visibleitems) x] 1] set shell [lindex [grid info $itk_component(clipper)] 1] # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {! [grid propagate $shell]} { grid propagate $shell yes } $itk_component(text) configure -width $chars -height $lines } } else { error "bad visibleitems option\ \"$itk_option(-visibleitems)\": should be\ widthxheight" } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: childsite # # Returns the path name of the child site widget. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::childsite {} { return $itk_component(text) } # ------------------------------------------------------------------ # METHOD: bbox index # # Returns four element list describing the bounding box for the list # item at index # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::bbox {index} { return [$itk_component(text) bbox $index] } # ------------------------------------------------------------------ # METHOD clear # # Clear the text area. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::clear {} { $itk_component(text) delete 1.0 end } # ------------------------------------------------------------------ # METHOD import filename # # Load text from an existing file (import filename) # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::import {filename {index end}} { set f [open $filename r] insert $index [read $f] close $f } # ------------------------------------------------------------------ # METHOD export filename # # write text to a file (export filename) # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::export {filename} { set f [open $filename w] set txt [$itk_component(text) get 1.0 end] puts $f $txt flush $f close $f } # ------------------------------------------------------------------ # METHOD compare index1 op index2 # # Compare indices according to relational operator. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::compare {index1 op index2} { return [$itk_component(text) compare $index1 $op $index2] } # ------------------------------------------------------------------ # METHOD debug ?boolean? # # Activates consistency checks in B-tree code associated with text # widgets. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::debug {args} { eval $itk_component(text) debug $args } # ------------------------------------------------------------------ # METHOD delete first ?last? # # Delete a range of characters from the text. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::delete {first {last {}}} { $itk_component(text) delete $first $last } # ------------------------------------------------------------------ # METHOD dlineinfo index # # Returns a five element list describing the area occupied by the # display line containing index. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::dlineinfo {index} { return [$itk_component(text) dlineinfo $index] } # ------------------------------------------------------------------ # METHOD get index1 ?index2? # # Return text from start index to end index. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::get {index1 {index2 {}}} { return [$itk_component(text) get $index1 $index2] } # ------------------------------------------------------------------ # METHOD image option ?arg arg ...? # # Manipulate images dependent on options. # # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::image {option args} { return [eval $itk_component(text) image $option $args] } # ------------------------------------------------------------------ # METHOD index index # # Return position corresponding to index. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::index {index} { return [$itk_component(text) index $index] } # ------------------------------------------------------------------ # METHOD insert index chars ?tagList? # # Insert text at index. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::insert {args} { eval $itk_component(text) insert $args } # ------------------------------------------------------------------ # METHOD mark option ?arg arg ...? # # Manipulate marks dependent on options. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::mark {option args} { return [eval $itk_component(text) mark $option $args] } # ------------------------------------------------------------------ # METHOD scan option args # # Implements scanning on texts. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::scan {option args} { eval $itk_component(text) scan $option $args } # ------------------------------------------------------------------ # METHOD search ?switches? pattern index ?varName? # # Searches the text for characters matching a pattern. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::search {args} { #----------------------------------------------------------- # BUG FIX: csmith (Chad Smith: csmith@adc.com), 11/18/99 #----------------------------------------------------------- # Need to run this command up one level on the stack since # the text widget may modify one of the arguments, which is # the case when -count is specified. #----------------------------------------------------------- return [uplevel eval $itk_component(text) search $args] } # ------------------------------------------------------------------ # METHOD see index # # Adjusts the view in the window so the character at index is # visible. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::see {index} { $itk_component(text) see $index } # ------------------------------------------------------------------ # METHOD tag option ?arg arg ...? # # Manipulate tags dependent on options. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::tag {option args} { return [eval $itk_component(text) tag $option $args] } # ------------------------------------------------------------------ # METHOD window option ?arg arg ...? # # Manipulate embedded windows. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::window {option args} { return [eval $itk_component(text) window $option $args] } # ------------------------------------------------------------------ # METHOD xview # # Changes x view in widget's window. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::xview {args} { return [eval $itk_component(text) xview $args] } # ------------------------------------------------------------------ # METHOD yview # # Changes y view in widget's window. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledtext::yview {args} { return [eval $itk_component(text) yview $args] } �������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/spinint.itk������������������������������������������������������������������0000644�0036047�0045461�00000017435�07334044000�015544� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spinint # ---------------------------------------------------------------------- # Implements an integer spinner widget. It inherits basic spinner # functionality from Spinner and adds specific features to create # an integer-only spinner. # Arrows may be placed horizontally or vertically. # User may specify an integer range and step value. # Spinner may be configured to wrap when min or max value is reached. # # NOTE: # Spinint integer values should not exceed the size of a long integer. # For a 32 bit long the integer range is -2147483648 to 2147483647. # # ---------------------------------------------------------------------- # AUTHOR: Sue Yockey Phone: (214) 519-2517 # E-mail: syockey@spd.dsccc.com # yockey@acm.org # # @(#) $Id: spinint.itk,v 1.3 2001/08/07 19:56:48 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Spinint { keep -background -borderwidth -cursor -foreground -highlightcolor \ -highlightthickness -insertbackground -insertborderwidth \ -insertofftime -insertontime -insertwidth -labelfont \ -selectbackground -selectborderwidth -selectforeground \ -textbackground -textfont } # ------------------------------------------------------------------ # SPININT # ------------------------------------------------------------------ itcl::class iwidgets::Spinint { inherit iwidgets::Spinner constructor {args} { Spinner::constructor -validate numeric } {} itk_option define -range range Range "" itk_option define -step step Step 1 itk_option define -wrap wrap Wrap true public method up {} public method down {} } # # Provide a lowercased access method for the Spinint class. # proc ::iwidgets::spinint {pathName args} { uplevel ::iwidgets::Spinint $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Spinint::constructor {args} { eval itk_initialize $args $itk_component(entry) delete 0 end if {[lindex $itk_option(-range) 0] == ""} { $itk_component(entry) insert 0 "0" } else { $itk_component(entry) insert 0 [lindex $itk_option(-range) 0] } } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -range # # Set min and max values for spinner. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinint::range { if {$itk_option(-range) != ""} { if {[llength $itk_option(-range)] != 2} { error "wrong # args: should be\ \"$itk_component(hull) configure -range {begin end}\"" } set min [lindex $itk_option(-range) 0] set max [lindex $itk_option(-range) 1] if {![regexp {^-?[0-9]+$} $min]} { error "bad range option \"$min\": begin value must be\ an integer" } if {![regexp {^-?[0-9]+$} $max]} { error "bad range option \"$max\": end value must be\ an integer" } if {$min > $max} { error "bad option starting range \"$min\": must be less\ than ending: \"$max\"" } } } # ------------------------------------------------------------------ # OPTION: -step # # Increment spinner by step value. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinint::step { } # ------------------------------------------------------------------ # OPTION: -wrap # # Specify whether spinner should wrap value if at min or max. # ------------------------------------------------------------------ itcl::configbody iwidgets::Spinint::wrap { } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: up # # Up arrow button press event. Increment value in entry. # ------------------------------------------------------------------ itcl::body iwidgets::Spinint::up {} { set min_range [lindex $itk_option(-range) 0] set max_range [lindex $itk_option(-range) 1] set val [$itk_component(entry) get] if {[lindex $itk_option(-range) 0] != ""} { # # Check boundaries. # if {$val >= $min_range && $val < $max_range} { incr val $itk_option(-step) $itk_component(entry) delete 0 end $itk_component(entry) insert 0 $val } else { if {$itk_option(-wrap)} { if {$val >= $max_range} { $itk_component(entry) delete 0 end $itk_component(entry) insert 0 $min_range } elseif {$val < $min_range} { $itk_component(entry) delete 0 end $itk_component(entry) insert 0 $min_range } else { uplevel #0 $itk_option(-invalid) } } else { uplevel #0 $itk_option(-invalid) } } } else { # # No boundaries. # incr val $itk_option(-step) $itk_component(entry) delete 0 end $itk_component(entry) insert 0 $val } } # ------------------------------------------------------------------ # METHOD: down # # Down arrow button press event. Decrement value in entry. # ------------------------------------------------------------------ itcl::body iwidgets::Spinint::down {} { set min_range [lindex $itk_option(-range) 0] set max_range [lindex $itk_option(-range) 1] set val [$itk_component(entry) get] if {[lindex $itk_option(-range) 0] != ""} { # # Check boundaries. # if {$val > $min_range && $val <= $max_range} { incr val -$itk_option(-step) $itk_component(entry) delete 0 end $itk_component(entry) insert 0 $val } else { if {$itk_option(-wrap)} { if {$val <= $min_range} { $itk_component(entry) delete 0 end $itk_component(entry) insert 0 $max_range } elseif {$val > $max_range} { $itk_component(entry) delete 0 end $itk_component(entry) insert 0 $max_range } else { uplevel #0 $itk_option(-invalid) } } else { uplevel #0 $itk_option(-invalid) } } } else { # # No boundaries. # incr val -$itk_option(-step) $itk_component(entry) delete 0 end $itk_component(entry) insert 0 $val } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/extfileselectiondialog.itk���������������������������������������������������0000644�0036047�0045461�00000015467�07437100166�020623� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Extfileselectiondialog # ---------------------------------------------------------------------- # Implements a file selection dialog that is a slightly extended version # of the OSF/Motif standard composite widget. The Extfileselectionbox # differs from the Motif standard in that the filter and selection # fields are comboboxes and the files and directory lists are in a # paned window. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@spd.dsccc.com # # @(#) $Id: extfileselectiondialog.itk,v 1.3 2002/02/27 06:45:10 mgbacke Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Extfileselectiondialog { keep -activebackground -activerelief -background -borderwidth -cursor \ -elementborderwidth -foreground -highlightcolor -highlightthickness \ -insertbackground -insertborderwidth -insertofftime -insertontime \ -insertwidth -jump -labelfont -modality -selectbackground \ -selectborderwidth -textbackground -textfont } # ------------------------------------------------------------------ # EXTFILESELECTIONDIALOG # ------------------------------------------------------------------ itcl::class iwidgets::Extfileselectiondialog { inherit iwidgets::Dialog constructor {args} {} public { method childsite {} method get {} method filter {} } protected method _dbldir {} } # # Provide a lowercased access method for the Extfileselectiondialog class. # proc ::iwidgets::extfileselectiondialog {pathName args} { uplevel ::iwidgets::Extfileselectiondialog $pathName $args } # # Use option database to override default resources of base classes. # option add *Extfileselectiondialog.borderWidth 2 widgetDefault option add *Extfileselectiondialog.title "File Selection Dialog" widgetDefault option add *Extfileselectiondialog.width 350 widgetDefault option add *Extfileselectiondialog.height 400 widgetDefault option add *Extfileselectiondialog.master "." widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectiondialog::constructor {args} { component hull configure -borderwidth 0 itk_option add hull.width hull.height # # Turn off pack propagation for the hull widget so the width # and height options become active. # pack propagate $itk_component(hull) no # # Instantiate a file selection box widget. # itk_component add fsb { iwidgets::Extfileselectionbox $itk_interior.fsb -width 150 -height 150 \ -selectioncommand [itcl::code $this invoke] \ -selectdircommand [itcl::code $this default Apply] \ -selectfilecommand [itcl::code $this default OK] } { usual keep -labelfont -childsitepos -directory -dirslabel \ -dirsearchcommand -dirson -fileslabel -fileson \ -filesearchcommand -filterlabel -filteron \ -filetype -invalid -mask -nomatchstring \ -selectionlabel -selectionon -sashcursor } grid $itk_component(fsb) -sticky nsew grid rowconfigure $itk_interior 0 -weight 1 grid columnconfigure $itk_interior 0 -weight 1 $itk_component(fsb) component filter configure \ -focuscommand [itcl::code $this default Apply] $itk_component(fsb) component selection configure \ -focuscommand [itcl::code $this default OK] $itk_component(fsb) component dirs configure \ -dblclickcommand [itcl::code $this _dbldir] $itk_component(fsb) component files configure \ -dblclickcommand [itcl::code $this invoke] buttonconfigure Apply -text "Filter" \ -command [itcl::code $itk_component(fsb) filter] set itk_interior [$itk_component(fsb) childsite] hide Help eval itk_initialize $args } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: childsite # # Thinwrapped method of file selection box class. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectiondialog::childsite {} { return [$itk_component(fsb) childsite] } # ------------------------------------------------------------------ # METHOD: get # # Thinwrapped method of file selection box class. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectiondialog::get {} { return [$itk_component(fsb) get] } # ------------------------------------------------------------------ # METHOD: filter # # Thinwrapped method of file selection box class. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectiondialog::filter {} { return [$itk_component(fsb) filter] } # ------------------------------------------------------------------ # PROTECTED METHOD: _dbldir # # Double select in directory list. If the files list is on then # make the default button the filter and invoke. If not, just invoke. # ------------------------------------------------------------------ itcl::body iwidgets::Extfileselectiondialog::_dbldir {} { if {$itk_option(-fileson)} { default Apply } invoke } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/calendar.itk�����������������������������������������������������������������0000644�0036047�0045461�00000100301�10625412176�015624� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Calendar # ---------------------------------------------------------------------- # Implements a calendar widget for the selection of a date. It displays # a single month at a time. Buttons exist on the top to change the # month in effect turning th pages of a calendar. As a page is turned, # the dates for the month are modified. Selection of a date visually # marks that date. The selected value can be monitored via the # -command option or just retrieved using the get method. Methods also # exist to select a date and show a particular month. The option set # allows the calendars appearance to take on many forms. # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts E-mail: mulferts@austin.dsccc.com # # ACKNOWLEDGEMENTS: Michael McLennan E-mail: mmclennan@lucent.com # # This code is an [incr Tk] port of the calendar code shown in Michael # J. McLennan's book "Effective Tcl" from Addison Wesley. Small # modificiations were made to the logic here and there to make it a # mega-widget and the command and option interface was expanded to make # it even more configurable, but the underlying logic is the same. # # @(#) $Id: calendar.itk,v 1.9 2007/05/24 22:41:02 hobbs Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Calendar { keep -background -cursor } # ------------------------------------------------------------------ # CALENDAR # ------------------------------------------------------------------ itcl::class iwidgets::Calendar { inherit itk::Widget constructor {args} {} itk_option define -days days Days {Su Mo Tu We Th Fr Sa} itk_option define -command command Command {} itk_option define -forwardimage forwardImage Image {} itk_option define -backwardimage backwardImage Image {} itk_option define -weekdaybackground weekdayBackground Background \#d9d9d9 itk_option define -weekendbackground weekendBackground Background \#d9d9d9 itk_option define -outline outline Outline \#d9d9d9 itk_option define -buttonforeground buttonForeground Foreground blue itk_option define -foreground foreground Foreground black itk_option define -selectcolor selectColor Foreground red itk_option define -selectthickness selectThickness SelectThickness 3 itk_option define -titlefont titleFont Font \ -*-helvetica-bold-r-normal--*-140-* itk_option define -dayfont dayFont Font \ -*-helvetica-medium-r-normal--*-120-* itk_option define -datefont dateFont Font \ -*-helvetica-medium-r-normal--*-120-* itk_option define -currentdatefont currentDateFont Font \ -*-helvetica-bold-r-normal--*-120-* itk_option define -startday startDay Day sunday itk_option define -int int DateFormat no public method get {{format "-string"}} ;# Returns the selected date public method select {{date_ "now"}} ;# Selects date, moving select ring public method show {{date_ "now"}} ;# Displays a specific date protected method _drawtext {canvas_ day_ date_ now_ x0_ y0_ x1_ y1_} private method _change {delta_} private method _configureHandler {} private method _redraw {} private method _days {{wmax {}}} private method _layout {time_} private method _select {date_} private method _selectEvent {date_} private method _adjustday {day_} private method _percentSubst {pattern_ string_ subst_} private variable _time {} private variable _selected {} private variable _initialized 0 private variable _offset 0 private variable _format {} } # # Provide a lowercased access method for the Calendar class. # proc ::iwidgets::calendar {pathName args} { uplevel ::iwidgets::Calendar $pathName $args } # # Use option database to override default resources of base classes. # option add *Calendar.width 200 widgetDefault option add *Calendar.height 165 widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::constructor {args} { # # Create the canvas which displays each page of the calendar. # itk_component add page { canvas $itk_interior.page } { keep -background -cursor -width -height } pack $itk_component(page) -expand yes -fill both # # Create the forward and backward buttons. Rather than pack # them directly in the hull, we'll waittill later and make # them canvas window items. # itk_component add backward { button $itk_component(page).backward \ -command [itcl::code $this _change -1] } { keep -background -cursor } itk_component add forward { button $itk_component(page).forward \ -command [itcl::code $this _change +1] } { keep -background -cursor } # # Set the initial time to now. # set _time [clock seconds] # # Bind to the configure event which will be used to redraw # the calendar and display the month. # bind $itk_component(page) <Configure> [itcl::code $this _configureHandler] # # Evaluate the option arguments. # eval itk_initialize $args } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -int # # Added by Mark Alston 2001/10/21 # # Allows for the use of dates in "international" format: YYYY-MM-DD. # It must be a boolean value. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::int { switch $itk_option(-int) { 1 - yes - true - on { set itk_option(-int) yes } 0 - no - false - off { set itk_option(-int) no } default { error "bad int option \"$itk_option(-int)\": should be boolean" } } } # ------------------------------------------------------------------ # OPTION: -command # # Sets the selection command for the calendar. When the user # selects a date on the calendar, the date is substituted in # place of "%d" in this command, and the command is executed. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::command {} # ------------------------------------------------------------------ # OPTION: -days # # The days option takes a list of values to set the text used to display the # days of the week header above the dates. The default value is # {Su Mo Tu We Th Fr Sa}. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::days { if {$_initialized} { if {[$itk_component(page) find withtag days] != {}} { $itk_component(page) delete days _days } } } # ------------------------------------------------------------------ # OPTION: -backwardimage # # Specifies a image to be displayed on the backwards calendar # button. If none is specified, a default is provided. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::backwardimage { # # If no image is given, then we'll use the default image. # if {$itk_option(-backwardimage) == {}} { # # If the default image hasn't yet been created, then we # need to create it. # if {[lsearch [image names] $this-backward] == -1} { image create bitmap $this-backward \ -foreground $itk_option(-buttonforeground) -data { #define back_width 16 #define back_height 16 static unsigned char back_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0xe0, 0x38, 0xf0, 0x3c, 0xf8, 0x3e, 0xfc, 0x3f, 0xfc, 0x3f, 0xf8, 0x3e, 0xf0, 0x3c, 0xe0, 0x38, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; } } # # Configure the button to use the default image. # $itk_component(backward) configure -image $this-backward # # Else, an image has been specified. First, we'll need to make sure # the image really exists before configuring the button to use it. # If it doesn't generate an error. # } else { if {[lsearch [image names] $itk_option(-backwardimage)] != -1} { $itk_component(backward) configure \ -image $itk_option(-backwardimage) } else { error "bad image name \"$itk_option(-backwardimage)\":\ image does not exist" } # # If we previously created a default image, we'll just remove it. # if {[lsearch [image names] $this-backward] != -1} { image delete $this-backward } } } # ------------------------------------------------------------------ # OPTION: -forwardimage # # Specifies a image to be displayed on the forwards calendar # button. If none is specified, a default is provided. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::forwardimage { # # If no image is given, then we'll use the default image. # if {$itk_option(-forwardimage) == {}} { # # If the default image hasn't yet been created, then we # need to create it. # if {[lsearch [image names] $this-forward] == -1} { image create bitmap $this-forward \ -foreground $itk_option(-buttonforeground) -data { #define fwd_width 16 #define fwd_height 16 static unsigned char fwd_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x1c, 0x07, 0x3c, 0x0f, 0x7c, 0x1f, 0xfc, 0x3f, 0xfc, 0x3f, 0x7c, 0x1f, 0x3c, 0x0f, 0x1c, 0x07, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; } } # # Configure the button to use the default image. # $itk_component(forward) configure -image $this-forward # # Else, an image has been specified. First, we'll need to make sure # the image really exists before configuring the button to use it. # If it doesn't generate an error. # } else { if {[lsearch [image names] $itk_option(-forwardimage)] != -1} { $itk_component(forward) configure \ -image $itk_option(-forwardimage) } else { error "bad image name \"$itk_option(-forwardimage)\":\ image does not exist" } # # If we previously created a default image, we'll just remove it. # if {[lsearch [image names] $this-forward] != -1} { image delete $this-forward } } } # ------------------------------------------------------------------ # OPTION: -weekdaybackground # # Specifies the background for the weekdays which allows it to # be visually distinguished from the weekend. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::weekdaybackground { if {$_initialized} { $itk_component(page) itemconfigure weekday \ -fill $itk_option(-weekdaybackground) } } # ------------------------------------------------------------------ # OPTION: -weekendbackground # # Specifies the background for the weekdays which allows it to # be visually distinguished from the weekdays. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::weekendbackground { if {$_initialized} { $itk_component(page) itemconfigure weekend \ -fill $itk_option(-weekendbackground) } } # ------------------------------------------------------------------ # OPTION: -foreground # # Specifies the foreground color for the textual items, buttons, # and divider on the calendar. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::foreground { if {$_initialized} { $itk_component(page) itemconfigure text \ -fill $itk_option(-foreground) $itk_component(page) itemconfigure line \ -fill $itk_option(-foreground) } } # ------------------------------------------------------------------ # OPTION: -outline # # Specifies the outline color used to surround the date text. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::outline { if {$_initialized} { $itk_component(page) itemconfigure square \ -outline $itk_option(-outline) } } # ------------------------------------------------------------------ # OPTION: -buttonforeground # # Specifies the foreground color of the forward and backward buttons. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::buttonforeground { if {$_initialized} { if {$itk_option(-forwardimage) == {}} { if {[lsearch [image names] $this-forward] != -1} { $this-forward configure \ -foreground $itk_option(-buttonforeground) } } else { $itk_component(forward) configure \ -foreground $itk_option(-buttonforeground) } if {$itk_option(-backwardimage) == {}} { if {[lsearch [image names] $this-backward] != -1} { $this-backward configure \ -foreground $itk_option(-buttonforeground) } } else { $itk_component(-backward) configure \ -foreground $itk_option(-buttonforeground) } } } # ------------------------------------------------------------------ # OPTION: -selectcolor # # Specifies the color of the ring displayed that distinguishes the # currently selected date. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::selectcolor { if {$_initialized} { $itk_component(page) itemconfigure $_selected-sensor \ -outline $itk_option(-selectcolor) } } # ------------------------------------------------------------------ # OPTION: -selectthickness # # Specifies the thickness of the ring displayed that distinguishes # the currently selected date. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::selectthickness { if {$_initialized} { $itk_component(page) itemconfigure $_selected-sensor \ -width $itk_option(-selectthickness) } } # ------------------------------------------------------------------ # OPTION: -titlefont # # Specifies the font used for the title text that consists of the # month and year. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::titlefont { if {$_initialized} { $itk_component(page) itemconfigure title \ -font $itk_option(-titlefont) } } # ------------------------------------------------------------------ # OPTION: -datefont # # Specifies the font used for the date text that consists of the # day of the month. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::datefont { if {$_initialized} { $itk_component(page) itemconfigure date \ -font $itk_option(-datefont) } } # ------------------------------------------------------------------ # OPTION: -currentdatefont # # Specifies the font used for the current date text. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::currentdatefont { if {$_initialized} { $itk_component(page) itemconfigure now \ -font $itk_option(-currentdatefont) } } # ------------------------------------------------------------------ # OPTION: -dayfont # # Specifies the font used for the day of the week text. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::dayfont { if {$_initialized} { $itk_component(page) itemconfigure days \ -font $itk_option(-dayfont) } } # ------------------------------------------------------------------ # OPTION: -startday # # Specifies the starting day for the week. The value must be a day of the # week: sunday, monday, tuesday, wednesday, thursday, friday, or # saturday. The default is sunday. # ------------------------------------------------------------------ itcl::configbody iwidgets::Calendar::startday { set day [string tolower $itk_option(-startday)] switch $day { sunday {set _offset 0} monday {set _offset 1} tuesday {set _offset 2} wednesday {set _offset 3} thursday {set _offset 4} friday {set _offset 5} saturday {set _offset 6} default { error "bad startday option \"$itk_option(-startday)\":\ should be sunday, monday, tuesday, wednesday,\ thursday, friday, or saturday" } } if {$_initialized} { $itk_component(page) delete all-page _redraw } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # PUBLIC METHOD: get ?format? # # Returns the currently selected date in one of two formats, string # or as an integer clock value using the -string and -clicks # options respectively. The default is by string. Reference the # clock command for more information on obtaining dates and their # formats. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::get {{format "-string"}} { switch -- $format { "-string" { return $_selected } "-clicks" { return [clock scan $_selected] } default { error "bad format option \"$format\":\ should be -string or -clicks" } } } # ------------------------------------------------------------------ # PUBLIC METHOD: select date_ # # Changes the currently selected date to the value specified. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::select {{date_ "now"}} { if {$date_ == "now"} { set time [clock seconds] } else { if {[catch {clock format $date_}] == 0} { set time $date_ } elseif {[catch {set time [clock scan $date_]}] != 0} { error "bad date: \"$date_\", must be a valid date string, clock clicks value or the keyword now" } } switch $itk_option(-int) { yes { set _format "%Y-%m-%d" } no { set _format "%m/%d/%Y" } } _select [clock format $time -format "$_format"] } # ------------------------------------------------------------------ # PUBLIC METHOD: show date_ # # Changes the currently display month to be that of the specified # date. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::show {{date_ "now"}} { if {$date_ == "now"} { set _time [clock seconds] } else { if {[catch {clock format $date_}] == 0} { set _time $date_ } elseif {[catch {set _time [clock scan $date_]}] != 0} { error "bad date: \"$date_\", must be a valid date string, clock clicks value or the keyword now" } } $itk_component(page) delete all-page _redraw } # ------------------------------------------------------------------ # PROTECTED METHOD: _drawtext canvas_ day_ date_ now_ # x0_ y0_ x1_ y1_ # # Draws the text in the date square. The method is protected such that # it can be overridden in derived classes that may wish to add their # own unique text. The method receives the day to draw along with # the coordinates of the square. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_drawtext {canvas_ day_ date_ now_ x0_ y0_ x1_ y1_} { set item [$canvas_ create text \ [expr {(($x1_ - $x0_) / 2) + $x0_}] \ [expr {(($y1_ -$y0_) / 2) + $y0_ + 1}] \ -anchor center -text "$day_" \ -fill $itk_option(-foreground)] if {$date_ == $now_} { $canvas_ itemconfigure $item \ -font $itk_option(-currentdatefont) \ -tags [list all-page date $date_-date text now] } else { $canvas_ itemconfigure $item \ -font $itk_option(-datefont) \ -tags [list all-page date $date_-date text] } } # ------------------------------------------------------------------ # PRIVATE METHOD: _configureHandler # # Processes a configure event received on the canvas. The method # deletes all the current canvas items and forces a redraw. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_configureHandler {} { set _initialized 1 $itk_component(page) delete all _redraw } # ------------------------------------------------------------------ # PRIVATE METHOD: _change delta_ # # Changes the current month displayed in the calendar, moving # forward or backward by <delta_> months where <delta_> is +/- # some number. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_change {delta_} { set dir [expr {($delta_ > 0) ? 1 : -1}] set month [clock format $_time -format "%m"] set month [string trimleft $month 0] set year [clock format $_time -format "%Y"] for {set i 0} {$i < abs($delta_)} {incr i} { incr month $dir if {$month < 1} { set month 12 incr year -1 } elseif {$month > 12} { set month 1 incr year 1 } } if {[catch {set _time [clock scan "$month/1/$year"]}]} { bell } else { _redraw } } # ------------------------------------------------------------------ # PRIVATE METHOD: _redraw # # Redraws the calendar. This method is invoked whenever the # calendar changes size or we need to effect a change such as draw # it with a new month. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_redraw {} { # # Set the format based on the option -int # switch $itk_option(-int) { yes { set _format "%Y-%m-%d" } no { set _format "%m/%d/%Y" } } # # Remove all the items that typically change per redraw request # such as the title and dates. Also, get the maximum width and # height of the page. # $itk_component(page) delete all-page set wmax [winfo width $itk_component(page)] set hmax [winfo height $itk_component(page)] # # If we haven't yet created the forward and backwards buttons, # then dot it; otherwise, skip it. # if {[$itk_component(page) find withtag button] == {}} { $itk_component(page) create window 3 3 -anchor nw \ -window $itk_component(backward) -tags button $itk_component(page) create window [expr {$wmax-3}] 3 -anchor ne \ -window $itk_component(forward) -tags button } # # Create the title centered between the buttons. # foreach {x0 y0 x1 y1} [$itk_component(page) bbox button] { set x [expr {(($x1-$x0)/2)+$x0}] set y [expr {(($y1-$y0)/2)+$y0}] } set title [clock format $_time -format "%B %Y"] $itk_component(page) create text $x $y -anchor center \ -text $title -font $itk_option(-titlefont) \ -fill $itk_option(-foreground) \ -tags [list title text all-page] # # Add the days of the week labels if they haven't yet been created. # if {[$itk_component(page) find withtag days] == {}} { _days $wmax } # # Add a line between the calendar header and the dates if needed. # set bottom [expr {[lindex [$itk_component(page) bbox all] 3] + 3}] if {[$itk_component(page) find withtag line] == {}} { $itk_component(page) create line 0 $bottom $wmax $bottom \ -width 2 -tags line } incr bottom 3 # # Get the layout for the time value and create the date squares. # This includes the surrounding date rectangle, the date text, # and the sensor. Bind selection to the sensor. # set current "" set now [clock format [clock seconds] -format "$_format"] set layout [_layout $_time] set weeks [expr {[lindex $layout end] + 1}] foreach {day date kind dcol wrow} $layout { set x0 [expr {$dcol*($wmax-7)/7+3}] set y0 [expr {$wrow*($hmax-$bottom-4)/$weeks+$bottom}] set x1 [expr {($dcol+1)*($wmax-7)/7+3}] set y1 [expr {($wrow+1)*($hmax-$bottom-4)/$weeks+$bottom}] if {$date == $_selected} { set current $date } # # Create the rectangle that surrounds the date and configure # its background based on the wheather it is a weekday or # a weekend. # set item [$itk_component(page) create rectangle $x0 $y0 $x1 $y1 \ -outline $itk_option(-outline)] if {$kind == "weekend"} { $itk_component(page) itemconfigure $item \ -fill $itk_option(-weekendbackground) \ -tags [list all-page square weekend] } else { $itk_component(page) itemconfigure $item \ -fill $itk_option(-weekdaybackground) \ -tags [list all-page square weekday] } # # Create the date text and configure its font based on the # wheather or not it is the current date. # _drawtext $itk_component(page) $day $date $now $x0 $y0 $x1 $y1 # # Create a sensor area to detect selections. Bind the # sensor and pass the date to the bind script. # $itk_component(page) create rectangle $x0 $y0 $x1 $y1 \ -outline "" -fill "" \ -tags [list $date-sensor all-sensor all-page] $itk_component(page) bind $date-sensor <ButtonPress-1> \ [itcl::code $this _selectEvent $date] $itk_component(page) bind $date-date <ButtonPress-1> \ [itcl::code $this _selectEvent $date] } # # Highlight the selected date if it is on this page. # if {$current != ""} { $itk_component(page) itemconfigure $current-sensor \ -outline $itk_option(-selectcolor) \ -width $itk_option(-selectthickness) $itk_component(page) raise $current-sensor } elseif {$_selected == ""} { set date [clock format $_time -format "$_format"] _select $date } } # ------------------------------------------------------------------ # PRIVATE METHOD: _days # # Used to rewite the days of the week label just below the month # title string. The days are given in the -days option. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_days {{wmax {}}} { if {$wmax == {}} { set wmax [winfo width $itk_component(page)] } set col 0 set bottom [expr {[lindex [$itk_component(page) bbox title buttons] 3] + 7}] foreach dayoweek $itk_option(-days) { set x0 [expr {$col*($wmax/7)}] set x1 [expr {($col+1)*($wmax/7)}] $itk_component(page) create text \ [expr {(($x1 - $x0) / 2) + $x0}] $bottom \ -anchor n -text "$dayoweek" \ -fill $itk_option(-foreground) \ -font $itk_option(-dayfont) \ -tags [list days text] incr col } } # ------------------------------------------------------------------ # PRIVATE METHOD: _layout time_ # # Used whenever the calendar is redrawn. Finds the month containing # a <time_> in seconds, and returns a list for all of the days in # that month. The list looks like this: # # {day1 date1 kind1 c1 r1 day2 date2 kind2 c2 r2 ...} # # where dayN is a day number like 1,2,3,..., dateN is the date for # dayN, kindN is the day type of weekday or weekend, and cN,rN # are the column/row indices for the square containing that date. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_layout {time_} { switch $itk_option(-int) { yes { set _format "%Y-%m-%d" } no { set _format "%m/%d/%Y" } } set month [clock format $time_ -format "%m"] set year [clock format $time_ -format "%Y"] if {[info tclversion] >= 8.5} { set startOfMonth [clock scan "$year-$month-01" -format %Y-%m-%d] set lastday [clock format [clock add $startOfMonth 1 month -1 day] -format %d] } else { foreach lastday {31 30 29 28} { if {[catch {clock scan "$month/$lastday/$year"}] == 0} { break } } } set seconds [clock scan "$month/1/$year"] set firstday [_adjustday [clock format $seconds -format %w]] set weeks [expr {ceil(double($lastday+$firstday)/7)}] set rlist "" for {set day 1} {$day <= $lastday} {incr day} { set seconds [clock scan "$month/$day/$year"] set date [clock format $seconds -format "$_format"] set dayoweek [clock format $seconds -format %w] if {$dayoweek == 0 || $dayoweek == 6} { set kind "weekend" } else { set kind "weekday" } set daycol [_adjustday $dayoweek] set weekrow [expr {($firstday+$day-1)/7}] lappend rlist $day $date $kind $daycol $weekrow } return $rlist } # ------------------------------------------------------------------ # PRIVATE METHOD: _adjustday day_ # # Modifies the day to be in accordance with the startday option. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_adjustday {day_} { set retday [expr {$day_ - $_offset}] if {$retday < 0} { set retday [expr {$retday + 7}] } return $retday } # ------------------------------------------------------------------ # PRIVATE METHOD: _select date_ # # Selects the current <date_> on the calendar. Highlights the date # on the calendar, and executes the command associated with the # calendar, with the selected date substituted in place of "%d". # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_select {date_} { switch $itk_option(-int) { yes { set _format "%Y-%m-%d" } no { set _format "%m/%d/%Y" } } set time [clock scan $date_] set date [clock format $time -format "$_format"] set _selected $date set current [clock format $_time -format "%m %Y"] set selected [clock format $time -format "%m %Y"] if {$current == $selected} { $itk_component(page) itemconfigure all-sensor \ -outline "" -width 1 $itk_component(page) itemconfigure $date-sensor \ -outline $itk_option(-selectcolor) \ -width $itk_option(-selectthickness) $itk_component(page) raise $date-sensor } else { set _time $time _redraw } } # ------------------------------------------------------------------ # PRIVATE METHOD: _selectEvent date_ # # Selects the current <date_> on the calendar. Highlights the date # on the calendar, and executes the command associated with the # calendar, with the selected date substituted in place of "%d". # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_selectEvent {date_} { _select $date_ if {[string trim $itk_option(-command)] != ""} { set cmd $itk_option(-command) set cmd [_percentSubst %d $cmd [get]] uplevel #0 $cmd } } # ------------------------------------------------------------------ # PRIVATE METHOD: _percentSubst pattern_ string_ subst_ # # This command is a "safe" version of regsub, for substituting # each occurance of <%pattern_> in <string_> with <subst_>. The # usual Tcl "regsub" command does the same thing, but also # converts characters like "&" and "\0", "\1", etc. that may # be present in the <subst_> string. # # Returns <string_> with <subst_> substituted in place of each # <%pattern_>. # ------------------------------------------------------------------ itcl::body iwidgets::Calendar::_percentSubst {pattern_ string_ subst_} { if {![string match %* $pattern_]} { error "bad pattern \"$pattern_\": should be %something" } set rval "" while {[regexp "(.*)${pattern_}(.*)" $string_ all head tail]} { set rval "$subst_$tail$rval" set string_ $head } set rval "$string_$rval" } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/hyperhelp.itk����������������������������������������������������������������0000644�0036047�0045461�00000045344�13254733345�016077� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Hyperhelp # ---------------------------------------------------------------------- # Implements a help facility using html formatted hypertext files. # # ---------------------------------------------------------------------- # AUTHOR: Kris Raney EMAIL: kraney@spd.dsccc.com # # @(#) $Id: hyperhelp.itk,v 1.5 2002/03/16 05:26:19 mgbacke Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1996 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Acknowledgements: # # Special thanks go to Sam Shen(SLShen@lbl.gov), as this code is based on his # help.tcl code from tk inspect. # # Default resources. # option add *Hyperhelp.width 575 widgetDefault option add *Hyperhelp.height 450 widgetDefault option add *Hyperhelp.modality none widgetDefault option add *Hyperhelp.vscrollMode static widgetDefault option add *Hyperhelp.hscrollMode static widgetDefault option add *Hyperhelp.maxHistory 20 widgetDefault # # Usual options. # itk::usual Hyperhelp { keep -activebackground -activerelief -background -borderwidth -cursor \ -foreground -highlightcolor -highlightthickness \ -selectbackground -selectborderwidth -selectforeground \ -textbackground } # ------------------------------------------------------------------ # HYPERHELP # ------------------------------------------------------------------ itcl::class iwidgets::Hyperhelp { inherit iwidgets::Shell constructor {args} {} itk_option define -topics topics Topics {} itk_option define -helpdir helpdir Directory . itk_option define -title title Title "Help" itk_option define -closecmd closeCmd CloseCmd {} itk_option define -maxhistory maxHistory MaxHistory 20 public variable beforelink {} public variable afterlink {} public method showtopic {topic} public method followlink {link} public method forward {} public method back {} public method updatefeedback {n} protected method _readtopic {file {anchorpoint {}}} protected method _pageforward {} protected method _pageback {} protected method _lineforward {} protected method _lineback {} protected method _fill_go_menu {} protected variable _history {} ;# History list of viewed pages protected variable _history_ndx -1 ;# current position in history list protected variable _history_len 0 ;# length of history list protected variable _histdir -1 ;# direction in history we just came ;# from protected variable _len 0 ;# length of text to be rendered protected variable _file {} ;# current topic private variable _remaining 0 ;# remaining text to be rendered private variable _rendering 0 ;# flag - in process of rendering } # # Provide a lowercased access method for the Scrolledlistbox class. # proc ::iwidgets::hyperhelp {pathName args} { uplevel ::iwidgets::Hyperhelp $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::constructor {args} { itk_option remove iwidgets::Shell::padx iwidgets::Shell::pady # # Create a pulldown menu # itk_component add -private menubar { frame $itk_interior.menu -relief raised -bd 2 } { keep -background -cursor } pack $itk_component(menubar) -side top -fill x itk_component add -private topicmb { menubutton $itk_component(menubar).topicmb -text "Topics" \ -menu $itk_component(menubar).topicmb.topicmenu \ -underline 0 -padx 8 -pady 2 } { keep -background -cursor -font -foreground \ -activebackground -activeforeground } pack $itk_component(topicmb) -side left itk_component add -private topicmenu { menu $itk_component(topicmb).topicmenu -tearoff no } { keep -background -cursor -font -foreground \ -activebackground -activeforeground } itk_component add -private navmb { menubutton $itk_component(menubar).navmb -text "Navigate" \ -menu $itk_component(menubar).navmb.navmenu \ -underline 0 -padx 8 -pady 2 } { keep -background -cursor -font -foreground \ -activebackground -activeforeground } pack $itk_component(navmb) -side left itk_component add -private navmenu { menu $itk_component(navmb).navmenu -tearoff no } { keep -background -cursor -font -foreground \ -activebackground -activeforeground } set m $itk_component(navmenu) $m add command -label "Forward" -underline 0 -state disabled \ -command [itcl::code $this forward] -accelerator f $m add command -label "Back" -underline 0 -state disabled \ -command [itcl::code $this back] -accelerator b $m add cascade -label "Go" -underline 0 -menu $m.go itk_component add -private navgo { menu $itk_component(navmenu).go -postcommand [itcl::code $this _fill_go_menu] } { keep -background -cursor -font -foreground \ -activebackground -activeforeground } # # Create a scrolledhtml object to display help pages # itk_component add scrtxt { iwidgets::scrolledhtml $itk_interior.scrtxt \ -linkcommand "$this followlink" -feedback "$this updatefeedback" } { keep -hscrollmode -vscrollmode -background -textbackground \ -fontname -fontsize -fixedfont -link \ -linkhighlight -borderwidth -cursor -sbwidth -scrollmargin \ -width -height -foreground -highlightcolor -visibleitems \ -highlightthickness -padx -pady -activerelief \ -relief -selectbackground -selectborderwidth \ -selectforeground -setgrid -wrap -unknownimage } pack $itk_component(scrtxt) -fill both -expand yes # # Bind shortcut keys # bind $itk_component(hull) <Key-f> [itcl::code $this forward] bind $itk_component(hull) <Key-b> [itcl::code $this back] bind $itk_component(hull) <Alt-Right> [itcl::code $this forward] bind $itk_component(hull) <Alt-Left> [itcl::code $this back] bind $itk_component(hull) <Key-space> [itcl::code $this _pageforward] bind $itk_component(hull) <Key-Next> [itcl::code $this _pageforward] bind $itk_component(hull) <Key-BackSpace> [itcl::code $this _pageback] bind $itk_component(hull) <Key-Prior> [itcl::code $this _pageback] bind $itk_component(hull) <Key-Delete> [itcl::code $this _pageback] bind $itk_component(hull) <Key-Down> [itcl::code $this _lineforward] bind $itk_component(hull) <Key-Up> [itcl::code $this _lineback] wm title $itk_component(hull) "Help" eval itk_initialize $args if {[lsearch -exact $args -closecmd] == -1} { configure -closecmd [itcl::code $this deactivate] } } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -topics # # Specifies the topics to display on the menu. For each topic, there should # be a file named <helpdir>/<topic>.html # ------------------------------------------------------------------ itcl::configbody iwidgets::Hyperhelp::topics { set m $itk_component(topicmenu) $m delete 0 last foreach topic $itk_option(-topics) { if {[lindex $topic 1] == {} } { $m add radiobutton -variable topic \ -value $topic \ -label $topic \ -command [list $this showtopic $topic] } else { if {[string index [file dirname [lindex $topic 1]] 0] != "/" && \ [string index [file dirname [lindex $topic 1]] 0] != "~"} { set link $itk_option(-helpdir)/[lindex $topic 1] } else { set link [lindex $topic 1] } $m add radiobutton -variable topic \ -value [lindex $topic 0] \ -label [lindex $topic 0] \ -command [list $this followlink $link] } } $m add separator $m add command -label "Close Help" -underline 0 \ -command $itk_option(-closecmd) } # ------------------------------------------------------------------ # OPTION: -title # # Specify the window title. # ------------------------------------------------------------------ itcl::configbody iwidgets::Hyperhelp::title { wm title $itk_component(hull) $itk_option(-title) } # ------------------------------------------------------------------ # OPTION: -helpdir # # Set location of help files # ------------------------------------------------------------------ itcl::configbody iwidgets::Hyperhelp::helpdir { if {[file pathtype $itk_option(-helpdir)] == "relative"} { configure -helpdir [file join [pwd] $itk_option(-helpdir)] } else { set _history {} set _history_len 0 set _history_ndx -1 $itk_component(navmenu) entryconfig 0 -state disabled $itk_component(navmenu) entryconfig 1 -state disabled configure -topics $itk_option(-topics) } } # ------------------------------------------------------------------ # OPTION: -closecmd # # Specify the command to execute when close is selected from the menu # ------------------------------------------------------------------ itcl::configbody iwidgets::Hyperhelp::closecmd { $itk_component(topicmenu) entryconfigure last -command $itk_option(-closecmd) } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: showtopic topic # # render text of help topic <topic>. The text is expected to be found in # <helpdir>/<topic>.html # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::showtopic {topic} { if ![regexp {(.*)#(.*)} $topic dummy topicname anchorpart] { set topicname $topic set anchorpart {} } if {$topicname == ""} { set topicname $_file set filepath $_file } else { set filepath $itk_option(-helpdir)/$topicname.html } if {[incr _history_ndx] < $itk_option(-maxhistory)} { set _history [lrange $_history 0 [expr {$_history_ndx - 1}]] set _history_len [expr {$_history_ndx + 1}] } else { incr _history_ndx -1 set _history [lrange $_history 1 $_history_ndx] set _history_len [expr {$_history_ndx + 1}] } lappend _history [list $topicname $filepath $anchorpart] _readtopic $filepath $anchorpart } # ------------------------------------------------------------------ # METHOD: followlink link # # Callback for click on a link. Shows new topic. # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::followlink {link} { if {[string compare $beforelink ""] != 0} { eval $beforelink $link } if ![regexp {(.*)#(.*)} $link dummy filepart anchorpart] { set filepart $link set anchorpart {} } if {$filepart != "" && [string index [file dirname $filepart] 0] != "/" && \ [string index [file dirname $filepart] 0] != "~"} { set filepart [$itk_component(scrtxt) pwd]/$filepart set hfile $filepart } else { set hfile $_file } incr _history_ndx set _history [lrange $_history 0 [expr {$_history_ndx - 1}]] set _history_len [expr {$_history_ndx + 1}] lappend _history [list [file rootname [file tail $hfile]] $hfile $anchorpart] set ret [_readtopic $filepart $anchorpart] if {[string compare $afterlink ""] != 0} { eval $afterlink $link } return $ret } # ------------------------------------------------------------------ # METHOD: forward # # Show topic one forward in history list # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::forward {} { if {$_rendering || ($_history_ndx+1) >= $_history_len} return incr _history_ndx eval _readtopic [lrange [lindex $_history $_history_ndx] 1 end] } # ------------------------------------------------------------------ # METHOD: back # # Show topic one back in history list # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::back {} { if {$_rendering || $_history_ndx <= 0} return incr _history_ndx -1 set _histdir 1 eval _readtopic [lrange [lindex $_history $_history_ndx] 1 end] } # ------------------------------------------------------------------ # METHOD: updatefeedback remaining # # Callback from text to update feedback widget # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::updatefeedback {n} { if {($_remaining - $n) > .1*$_len} { [$itk_interior.feedbackshell childsite].helpfeedback step [expr {$_remaining - $n}] update idletasks set _remaining $n } } # ------------------------------------------------------------------ # PRIVATE METHOD: _readtopic # # Read in file, render it in text area, and jump to anchorpoint # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::_readtopic {file {anchorpoint {}}} { if {$file != ""} { if {[string compare $file $_file] != 0} { if {[catch {set f [open $file r]} err]} { incr _history_ndx $_histdir set _history_len [expr {$_history_ndx + 1}] set _histdir -1 set m $itk_component(navmenu) if {($_history_ndx+1) < $_history_len} { $m entryconfig 0 -state normal } else { $m entryconfig 0 -state disabled } if {$_history_ndx > 0} { $m entryconfig 1 -state normal } else { $m entryconfig 1 -state disabled } return } set _file $file set txt [read $f] iwidgets::shell $itk_interior.feedbackshell -title \ "Rendering HTML" -padx 1 -pady 1 iwidgets::Feedback [$itk_interior.feedbackshell \ childsite].helpfeedback \ -steps [set _len [string length $txt]] \ -labeltext "Rendering HTML" -labelpos n pack [$itk_interior.feedbackshell childsite].helpfeedback $itk_interior.feedbackshell center $itk_interior $itk_interior.feedbackshell activate set _remaining $_len set _rendering 1 if {[catch {$itk_component(scrtxt) render $txt [file dirname \ $file]} err]} { if [regexp "</pre>" $err] { $itk_component(scrtxt) render "<tt>$err</tt>" } else { $itk_component(scrtxt) render "<pre>$err</pre>" } } wm title $itk_component(hull) "Help: $file" itcl::delete object [$itk_interior.feedbackshell \ childsite].helpfeedback itcl::delete object $itk_interior.feedbackshell set _rendering 0 } } set m $itk_component(navmenu) if {($_history_ndx+1) < $_history_len} { $m entryconfig 0 -state normal } else { $m entryconfig 0 -state disabled } if {$_history_ndx > 0} { $m entryconfig 1 -state normal } else { $m entryconfig 1 -state disabled } if {$anchorpoint != {}} { $itk_component(scrtxt) import -link #$anchorpoint } else { $itk_component(scrtxt) import -link # } set _histdir -1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _fill_go_menu # # update go submenu with current history # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::_fill_go_menu {} { set m $itk_component(navgo) catch {$m delete 0 last} for {set i [expr {$_history_len - 1}]} {$i >= 0} {incr i -1} { set topic [lindex [lindex $_history $i] 0] set filepath [lindex [lindex $_history $i] 1] set anchor [lindex [lindex $_history $i] 2] $m add command -label $topic \ -command [list $this followlink $filepath#$anchor] } } # ------------------------------------------------------------------ # PRIVATE METHOD: _pageforward # # Callback for page forward shortcut key # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::_pageforward {} { $itk_component(scrtxt) yview scroll 1 pages } # ------------------------------------------------------------------ # PRIVATE METHOD: _pageback # # Callback for page back shortcut key # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::_pageback {} { $itk_component(scrtxt) yview scroll -1 pages } # ------------------------------------------------------------------ # PRIVATE METHOD: _lineforward # # Callback for line forward shortcut key # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::_lineforward {} { $itk_component(scrtxt) yview scroll 1 units } # ------------------------------------------------------------------ # PRIVATE METHOD: _lineback # # Callback for line back shortcut key # ------------------------------------------------------------------ itcl::body iwidgets::Hyperhelp::_lineback {} { $itk_component(scrtxt) yview scroll -1 units } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/unknownimage.gif�������������������������������������������������������������0000644�0036047�0045461�00000000730�06577264042�016550� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GIF87a� �ô��ÿÿÿ���ÌÌÌ/OO¾¾¾ùÓ¢�‘ÿU‘Uª�Uÿÿªôôôâqi\Ç___ßßßËÍüýª¶ª‚‚‚������������������������������������,����� ��þ ޤCžhŠš£¤ªÄÚN€ã¾çS¶Òã8„Ém4!¢@M12öj@€ð4"Ê‘UÒ€ ÉP¤»*™I°¡ø¬R1I¢4&k€ô¤ë¶"qc1Xx{^@V yS#:J&{mŒoG 1:$ƒ— :&jGE`cR —.?yybG¨4(:¶??BB»±;n ÊF³ Ø8}"Õ Ø«=… Á2Œ�ÕÖåGj‘)œ#զجiТ‰`!œ‘~òX•ƒa¥ „‘@€ÀÅÞ‰MA’“€G¨æù-T6^=ðvÓ¿l ¤d€ ZË8c΄ÐM —9çí$EPœ"(�ÁÀƒžF’¤eÊQ›?¥âœµ±Ë&Z‘ ÕÃbØ bÒ’ÂÁöÅÚ¶pGјTµ®Ý»xM=�;����������������������������������������iwidgets-4.1.1/generic/selectionbox.itk�������������������������������������������������������������0000644�0036047�0045461�00000045321�07334044000�016551� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Selectionbox # ---------------------------------------------------------------------- # Implements a selection box composed of a scrolled list of items and # a selection entry field. The user may choose any of the items displayed # in the scrolled list of alternatives and the selection field will be # filled with the choice. The user is also free to enter a new value in # the selection entry field. Both the list and entry areas have labels. # A child site is also provided in which the user may create other widgets # to be used in conjunction with the selection box. # # ---------------------------------------------------------------------- # AUTHOR: Mark L. Ulferts EMAIL: mulferts@austin.dsccc.com # # @(#) $Id: selectionbox.itk,v 1.2 2001/08/07 19:56:48 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Usual options. # itk::usual Selectionbox { keep -activebackground -activerelief -background -borderwidth -cursor \ -elementborderwidth -foreground -highlightcolor -highlightthickness \ -insertbackground -insertborderwidth -insertofftime -insertontime \ -insertwidth -jump -labelfont -selectbackground -selectborderwidth \ -selectforeground -textbackground -textfont -troughcolor } # ------------------------------------------------------------------ # SELECTIONBOX # ------------------------------------------------------------------ itcl::class iwidgets::Selectionbox { inherit itk::Widget constructor {args} {} destructor {} itk_option define -childsitepos childSitePos Position center itk_option define -margin margin Margin 7 itk_option define -itemson itemsOn ItemsOn true itk_option define -selectionon selectionOn SelectionOn true itk_option define -width width Width 260 itk_option define -height height Height 320 public method childsite {} public method get {} public method curselection {} public method clear {component} public method insert {component index args} public method delete {first {last {}}} public method size {} public method scan {option args} public method nearest {y} public method index {index} public method selection {option args} public method selectitem {} private method _packComponents {{when later}} private variable _repacking {} ;# non-null => _packComponents pending } # # Provide a lowercased access method for the Selectionbox class. # proc ::iwidgets::selectionbox {pathName args} { uplevel ::iwidgets::Selectionbox $pathName $args } # # Use option database to override default resources of base classes. # option add *Selectionbox.itemsLabel Items widgetDefault option add *Selectionbox.selectionLabel Selection widgetDefault option add *Selectionbox.width 260 widgetDefault option add *Selectionbox.height 320 widgetDefault # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::constructor {args} { # # Set the borderwidth to zero and add width and height options # back to the hull. # component hull configure -borderwidth 0 itk_option add hull.width hull.height # # Create the child site widget. # itk_component add -protected sbchildsite { frame $itk_interior.sbchildsite } # # Create the items list. # itk_component add items { iwidgets::Scrolledlistbox $itk_interior.items -selectmode single \ -visibleitems 20x10 -labelpos nw -vscrollmode static \ -hscrollmode none } { usual keep -dblclickcommand -exportselection rename -labeltext -itemslabel itemsLabel Text rename -selectioncommand -itemscommand itemsCommand Command } configure -itemscommand [itcl::code $this selectitem] # # Create the selection entry. # itk_component add selection { iwidgets::Entryfield $itk_interior.selection -labelpos nw } { usual keep -exportselection rename -labeltext -selectionlabel selectionLabel Text rename -command -selectioncommand selectionCommand Command } # # Set the interior to the childsite for derived classes. # set itk_interior $itk_component(sbchildsite) # # Initialize the widget based on the command line options. # eval itk_initialize $args # # When idle, pack the components. # _packComponents } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::destructor {} { if {$_repacking != ""} {after cancel $_repacking} } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -childsitepos # # Specifies the position of the child site in the selection box. # ------------------------------------------------------------------ itcl::configbody iwidgets::Selectionbox::childsitepos { _packComponents } # ------------------------------------------------------------------ # OPTION: -margin # # Specifies distance between the items list and selection entry. # ------------------------------------------------------------------ itcl::configbody iwidgets::Selectionbox::margin { _packComponents } # ------------------------------------------------------------------ # OPTION: -itemson # # Specifies whether or not to display the items list. # ------------------------------------------------------------------ itcl::configbody iwidgets::Selectionbox::itemson { _packComponents } # ------------------------------------------------------------------ # OPTION: -selectionon # # Specifies whether or not to display the selection entry widget. # ------------------------------------------------------------------ itcl::configbody iwidgets::Selectionbox::selectionon { _packComponents } # ------------------------------------------------------------------ # OPTION: -width # # Specifies the width of the hull. The value may be specified in # any of the forms acceptable to Tk_GetPixels. A value of zero # causes the width to be adjusted to the required value based on # the size requests of the components. Otherwise, the width is # fixed. # ------------------------------------------------------------------ itcl::configbody iwidgets::Selectionbox::width { # # The width option was added to the hull in the constructor. # So, any width value given is passed automatically to the # hull. All we have to do is play with the propagation. # if {$itk_option(-width) != 0} { set propagate 0 } else { set propagate 1 } # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $itk_component(hull)] != $propagate} { grid propagate $itk_component(hull) $propagate } } # ------------------------------------------------------------------ # OPTION: -height # # Specifies the height of the hull. The value may be specified in # any of the forms acceptable to Tk_GetPixels. A value of zero # causes the height to be adjusted to the required value based on # the size requests of the components. Otherwise, the height is # fixed. # ------------------------------------------------------------------ itcl::configbody iwidgets::Selectionbox::height { # # The height option was added to the hull in the constructor. # So, any height value given is passed automatically to the # hull. All we have to do is play with the propagation. # if {$itk_option(-height) != 0} { set propagate 0 } else { set propagate 1 } # # Due to a bug in the tk4.2 grid, we have to check the # propagation before setting it. Setting it to the same # value it already is will cause it to toggle. # if {[grid propagate $itk_component(hull)] != $propagate} { grid propagate $itk_component(hull) $propagate } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: childsite # # Returns the path name of the child site widget. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::childsite {} { return $itk_component(sbchildsite) } # ------------------------------------------------------------------ # METHOD: get # # Returns the current selection. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::get {} { return [$itk_component(selection) get] } # ------------------------------------------------------------------ # METHOD: curselection # # Returns the current selection index. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::curselection {} { return [$itk_component(items) curselection] } # ------------------------------------------------------------------ # METHOD: clear component # # Delete the contents of either the selection entry widget or items # list. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::clear {component} { switch $component { selection { $itk_component(selection) clear } items { delete 0 end } default { error "bad clear argument \"$component\": should be\ selection or items" } } } # ------------------------------------------------------------------ # METHOD: insert component index args # # Insert element(s) into either the selection or items list widget. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::insert {component index args} { switch $component { selection { eval $itk_component(selection) insert $index $args } items { eval $itk_component(items) insert $index $args } default { error "bad insert argument \"$component\": should be\ selection or items" } } } # ------------------------------------------------------------------ # METHOD: delete first ?last? # # Delete one or more elements from the items list box. The default # is to delete by indexed range. If an item is to be removed by name, # it must be preceeded by the keyword "item". Only index numbers can # be used to delete a range of items. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::delete {first {last {}}} { set first [index $first] if {$last != {}} { set last [index $last] } else { set last $first } if {$first <= $last} { eval $itk_component(items) delete $first $last } else { error "first index must not be greater than second" } } # ------------------------------------------------------------------ # METHOD: size # # Returns a decimal string indicating the total number of elements # in the items list. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::size {} { return [$itk_component(items) size] } # ------------------------------------------------------------------ # METHOD: scan option args # # Implements scanning on items list. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::scan {option args} { eval $itk_component(items) scan $option $args } # ------------------------------------------------------------------ # METHOD: nearest y # # Returns the index to the nearest listbox item given a y coordinate. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::nearest {y} { return [$itk_component(items) nearest $y] } # ------------------------------------------------------------------ # METHOD: index index # # Returns the decimal string giving the integer index corresponding # to index. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::index {index} { return [$itk_component(items) index $index] } # ------------------------------------------------------------------ # METHOD: selection option args # # Adjusts the selection within the items list. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::selection {option args} { eval $itk_component(items) selection $option $args selectitem } # ------------------------------------------------------------------ # METHOD: selectitem # # Replace the selection entry field contents with the currently # selected items value. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::selectitem {} { $itk_component(selection) clear set numSelected [$itk_component(items) selecteditemcount] if {$numSelected == 1} { $itk_component(selection) insert end \ [$itk_component(items) getcurselection] } elseif {$numSelected > 1} { $itk_component(selection) insert end \ [lindex [$itk_component(items) getcurselection] 0] } $itk_component(selection) icursor end } # ------------------------------------------------------------------ # PRIVATE METHOD: _packComponents ?when? # # Pack the selection, items, and child site widgets based on options. # If "when" is "now", the change is applied immediately. If it is # "later" or it is not specified, then the change is applied later, # when the application is idle. # ------------------------------------------------------------------ itcl::body iwidgets::Selectionbox::_packComponents {{when later}} { if {$when == "later"} { if {$_repacking == ""} { set _repacking [after idle [itcl::code $this _packComponents now]] } return } elseif {$when != "now"} { error "bad option \"$when\": should be now or later" } set _repacking "" set parent [winfo parent $itk_component(sbchildsite)] set margin [winfo pixels $itk_component(hull) $itk_option(-margin)] switch $itk_option(-childsitepos) { n { grid $itk_component(sbchildsite) -row 0 -column 0 \ -sticky nsew -rowspan 1 grid $itk_component(items) -row 1 -column 0 -sticky nsew grid $itk_component(selection) -row 3 -column 0 -sticky ew grid rowconfigure $parent 0 -weight 0 -minsize 0 grid rowconfigure $parent 1 -weight 1 -minsize 0 grid rowconfigure $parent 2 -weight 0 -minsize $margin grid rowconfigure $parent 3 -weight 0 -minsize 0 grid columnconfigure $parent 0 -weight 1 -minsize 0 grid columnconfigure $parent 1 -weight 0 -minsize 0 } w { grid $itk_component(sbchildsite) -row 0 -column 0 \ -sticky nsew -rowspan 3 grid $itk_component(items) -row 0 -column 1 -sticky nsew grid $itk_component(selection) -row 2 -column 1 -sticky ew grid rowconfigure $parent 0 -weight 1 -minsize 0 grid rowconfigure $parent 1 -weight 0 -minsize $margin grid rowconfigure $parent 2 -weight 0 -minsize 0 grid rowconfigure $parent 3 -weight 0 -minsize 0 grid columnconfigure $parent 0 -weight 0 -minsize 0 grid columnconfigure $parent 1 -weight 1 -minsize 0 } s { grid $itk_component(items) -row 0 -column 0 -sticky nsew grid $itk_component(selection) -row 2 -column 0 -sticky ew grid $itk_component(sbchildsite) -row 3 -column 0 \ -sticky nsew -rowspan 1 grid rowconfigure $parent 0 -weight 1 -minsize 0 grid rowconfigure $parent 1 -weight 0 -minsize $margin grid rowconfigure $parent 2 -weight 0 -minsize 0 grid rowconfigure $parent 3 -weight 0 -minsize 0 grid columnconfigure $parent 0 -weight 1 -minsize 0 grid columnconfigure $parent 1 -weight 0 -minsize 0 } e { grid $itk_component(items) -row 0 -column 0 -sticky nsew grid $itk_component(selection) -row 2 -column 0 -sticky ew grid $itk_component(sbchildsite) -row 0 -column 1 \ -sticky nsew -rowspan 3 grid rowconfigure $parent 0 -weight 1 -minsize 0 grid rowconfigure $parent 1 -weight 0 -minsize $margin grid rowconfigure $parent 2 -weight 0 -minsize 0 grid rowconfigure $parent 3 -weight 0 -minsize 0 grid columnconfigure $parent 0 -weight 1 -minsize 0 grid columnconfigure $parent 1 -weight 0 -minsize 0 } center { grid $itk_component(items) -row 0 -column 0 -sticky nsew grid $itk_component(sbchildsite) -row 1 -column 0 \ -sticky nsew -rowspan 1 grid $itk_component(selection) -row 3 -column 0 -sticky ew grid rowconfigure $parent 0 -weight 1 -minsize 0 grid rowconfigure $parent 1 -weight 0 -minsize 0 grid rowconfigure $parent 2 -weight 0 -minsize $margin grid rowconfigure $parent 3 -weight 0 -minsize 0 grid columnconfigure $parent 0 -weight 1 -minsize 0 grid columnconfigure $parent 1 -weight 0 -minsize 0 } default { error "bad childsitepos option \"$itk_option(-childsitepos)\":\ should be n, e, s, w, or center" } } if {$itk_option(-itemson)} { } else { grid forget $itk_component(items) } if {$itk_option(-selectionon)} { } else { grid forget $itk_component(selection) } raise $itk_component(sbchildsite) } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������iwidgets-4.1.1/generic/scrolledhtml.itk�������������������������������������������������������������0000644�0036047�0045461�00000232204�10153652636�016562� 0����������������������������������������������������������������������������������������������������ustar �dgp�����������������������������771div�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Scrolledhtml # ---------------------------------------------------------------------- # Implements a scrolled html text widget by inheritance from scrolledtext # Import reads from an html file, while export still writes plain text # Also provides a render command, to display html text passed in as an # argument. # # This widget is HTML3.2 compliant, with the following exceptions: # a) nothing requiring a connection to an HTTP server is supported # b) some of the image alignments aren't supported, because they're not # supported by the text widget # c) the br attributes that go with the image alignments aren't implemented # d) background images are not supported, because they're not supported # by the text widget # e) automatic table/table cell sizing doesn't work very well. # # WISH LIST: # This section lists possible future enhancements. # # 1) size tables better using dlineinfo. # 2) make images scroll smoothly off top like they do off bottom. (limitation # of text widget?) # 3) add ability to get non-local URLs # a) support forms # b) support imagemaps # 4) keep track of visited links # 5) add tclets support # # BUGS: # Cells in a table can be caused to overlap. ex: # <table border width="100%"> # <tr><td>cell1</td><td align=right rowspan=2>cell2</td></tr> # <tr><td colspan=2>cell3 w/ overlap</td> # </table> # It hasn't been fixed because 1) it's a pain to fix, 2) the fix would slow # tables down by a significant amount, and 3) netscape has the same # bug, as of V3.01, and no one seems to care. # # In order to size tables properly, they must be visible, which causes an # annoying jump from table to table through the document at render time. # # ---------------------------------------------------------------------- # AUTHOR: Kris Raney EMAIL: kraney@spd.dsccc.com # # @(#) $Id: scrolledhtml.itk,v 1.8 2004/12/02 17:49:18 davygrvy Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1996 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # Acknowledgements: # # Special thanks go to Sam Shen(SLShen@lbl.gov), as this code is based on his # tkhtml.tcl code from tk inspect. The original code is copyright 1995 # Lawrence Berkeley Laboratory. # # This software is copyright (C) 1995 by the Lawrence Berkeley Laboratory. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that: (1) source code distributions # retain the above copyright notice and this paragraph in its entirety, (2) # distributions including binary code include the above copyright notice and # this paragraph in its entirety in the documentation or other materials # provided with the distribution, and (3) all advertising materials mentioning # features or use of this software display the following acknowledgement: # ``This product includes software developed by the University of California, # Lawrence Berkeley Laboratory and its contributors.'' Neither the name of # the University nor the names of its contributors may be used to endorse # or promote products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. # # This code is based on Angel Li's (angel@flipper.rsmas.miami.edu) HTML # # Default resources. # option add *Scrolledhtml.borderWidth 2 widgetDefault option add *Scrolledhtml.relief sunken widgetDefault option add *Scrolledhtml.scrollMargin 3 widgetDefault option add *Scrolledhtml.width 500 widgetDefault option add *Scrolledhtml.height 600 widgetDefault option add *Scrolledhtml.visibleItems 80x24 widgetDefault option add *Scrolledhtml.vscrollMode static widgetDefault option add *Scrolledhtml.hscrollMode static widgetDefault option add *Scrolledhtml.labelPos n widgetDefault option add *Scrolledhtml.wrap word widgetDefault # # Usual options. # itk::usual Scrolledhtml { keep -fontname -fontsize -fixedfont -link -alink -linkhighlight \ -activebackground -activerelief -background -borderwidth -cursor \ -elementborderwidth -foreground -highlightcolor -highlightthickness \ -insertbackground -insertborderwidth -insertofftime -insertontime \ -insertwidth -jump -labelfont -selectbackground -selectborderwidth \ -selectforeground -textbackground -textfont -troughcolor -unknownimage } # ------------------------------------------------------------------ # SCROLLEDHTML # ------------------------------------------------------------------ itcl::class iwidgets::Scrolledhtml { inherit iwidgets::Scrolledtext constructor {args} {} destructor {} itk_option define -feedback feedBack FeedBack {} itk_option define -linkcommand linkCommand LinkCommand {} itk_option define -fontname fontname FontName times itk_option define -fixedfont fixedFont FixedFont courier itk_option define -fontsize fontSize FontSize medium itk_option define -link link Link blue itk_option define -alink alink ALink red itk_option define -linkhighlight alink ALink red itk_option define -unknownimage unknownimage File {} itk_option define -textbackground textBackground Background {} itk_option define -update update Update 1 itk_option define -debug debug Debug 0 public method import {args} public method clear {} public method render {html {wd .}} public method title {} {return $_title} public method pwd {} {return $_cwd} protected method _setup {} protected method _set_tag {} protected method _reconfig_tags {} protected method _append_text {text} protected method _do {text} protected method _definefont {name foundry family weight slant registry} protected method _peek {instack} protected method _push {instack value} protected method _pop {instack} protected method _parse_fields {array_var string} protected method _href_click {cmd href} protected method _set_align {align} protected method _fixtablewidth {hottext table multiplier} protected method _header {level args} protected method _/header {level} protected method _entity_a {args} protected method _entity_/a {} protected method _entity_address {} protected method _entity_/address {} protected method _entity_b {} protected method _entity_/b {} protected method _entity_base {{args {}}} protected method _entity_basefont {{args {}}} protected method _entity_big {} protected method _entity_/big {} protected method _entity_blockquote {} protected method _entity_/blockquote {} protected method _entity_body {{args {}}} protected method _entity_/body {} protected method _entity_br {{args {}}} protected method _entity_center {} protected method _entity_/center {} protected method _entity_cite {} protected method _entity_/cite {} protected method _entity_code {} protected method _entity_/code {} protected method _entity_dir {{args {}}} protected method _entity_/dir {} protected method _entity_div {{args {}}} protected method _entity_dl {{args {}}} protected method _entity_/dl {} protected method _entity_dt {} protected method _entity_dd {} protected method _entity_dfn {} protected method _entity_/dfn {} protected method _entity_em {} protected method _entity_/em {} protected method _entity_font {{args {}}} protected method _entity_/font {} protected method _entity_h1 {{args {}}} protected method _entity_/h1 {} protected method _entity_h2 {{args {}}} protected method _entity_/h2 {} protected method _entity_h3 {{args {}}} protected method _entity_/h3 {} protected method _entity_h4 {{args {}}} protected method _entity_/h4 {} protected method _entity_h5 {{args {}}} protected method _entity_/h5 {} protected method _entity_h6 {{args {}}} protected method _entity_/h6 {} protected method _entity_hr {{args {}}} protected method _entity_i {} protected method _entity_/i {} protected method _entity_img {{args {}}} protected method _entity_kbd {} protected method _entity_/kbd {} protected method _entity_li {{args {}}} protected method _entity_listing {} protected method _entity_/listing {} protected method _entity_menu {{args {}}} protected method _entity_/menu {} protected method _entity_ol {{args {}}} protected method _entity_/ol {} protected method _entity_p {{args {}}} protected method _entity_pre {{args {}}} protected method _entity_/pre {} protected method _entity_samp {} protected method _entity_/samp {} protected method _entity_small {} protected method _entity_/small {} protected method _entity_sub {} protected method _entity_/sub {} protected method _entity_sup {} protected method _entity_/sup {} protected method _entity_strong {} protected method _entity_/strong {} protected method _entity_table {{args {}}} protected method _entity_/table {} protected method _entity_td {{args {}}} protected method _entity_/td {} protected method _entity_th {{args {}}} protected method _entity_/th {} protected method _entity_title {} protected method _entity_/title {} protected method _entity_tr {{args {}}} protected method _entity_/tr {} protected method _entity_tt {} protected method _entity_/tt {} protected method _entity_u {} protected method _entity_/u {} protected method _entity_ul {{args {}}} protected method _entity_/ul {} protected method _entity_var {} protected method _entity_/var {} protected variable _title {} ;# The title of the html document protected variable _licount 1 ;# list element count protected variable _listyle bullet ;# list element style protected variable _lipic {} ;# picture to use as bullet protected variable _color black ;# current text color protected variable _bgcolor #d9d9d9 ;# current background color protected variable _link blue ;# current link color protected variable _alink red ;# current highlight link color protected variable _smallpoints "60 80 100 120 140 180 240" ;# font point protected variable _mediumpoints "80 100 120 140 180 240 360" ;# sizes for protected variable _largepoints "100 120 140 180 240 360 480" ;# various protected variable _hugepoints "120 140 180 240 360 480 640" ;# fontsizes protected variable _font times ;# name of current font protected variable _rulerheight 6 ;# protected variable _indentincr 4 ;# increment to indent by protected variable _counter -1 ;# counter to give unique numbers protected variable _left 0 ;# initial left margin protected variable _left2 0 ;# subsequent left margin protected variable _right 0 ;# right margin protected variable _justify L ;# text justification protected variable _offset 0 ;# text offset (super/subscript) protected variable _textweight 0 ;# boldness of text protected variable _textslant 0 ;# whether to use italics protected variable _underline 0 ;# whether to use underline protected variable _verbatim 0 ;# whether to skip formatting protected variable _pre 0 ;# preformatted text protected variable _intitle 0 ;# in <title>... protected variable _anchorcount 0 ;# number of anchors protected variable _stack ;# array of stacks protected variable _pointsndx 2 ;# protected variable _fontnames ;# list of accepted font names protected variable _fontinfo ;# array of font info given font name protected variable _tag ;# protected variable _tagl ;# protected variable _tagfont ;# protected variable _cwd . ;# base directory of current page protected variable _anchor ;# array of indexes by anchorname protected variable _defaulttextbackground;# default text background protected variable _intable 0 ;# whether we are in a table now protected variable _hottext ;# widget where text currently goes protected variable _basefontsize 2 ;# as named protected variable _unknownimg {} ;# name of unknown image protected variable _images {} ;# list of images we created protected variable _prevpos {} ;# temporary used for table updates protected variable _prevtext {} ;# temporary used for table updates private variable _initialized 0 private variable _defUnknownImg [::image create photo -data { R0lGODdhHwAgAPQAAP///wAAAMzMzC9PT76+vvnTogCR/1WRVaoAVf//qvT09OKdcWlcx19f X9/f339/f8vN/J2d/aq2qoKCggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACwAAAAAHwAgAAAF/iAgjqRDnmiKmqOkqsTaToDjvudTttLjOITJbTQhGI+iQE0xMvZqQIDw NAEiAcqRVdKAGh0NyVCkuyqZBEmwofgRrFIxSaI0JmuA9KTrthIicWMTAQ8xWHgSe15AVgcJ eVMjDwECOkome22Mb0cHCzEPOiQPgwGXCjomakedA0VgY1IPDZcuP3l5YkcRDwMHqDQoEzq2 Pz8IQkK7Bw8HDg+xO26PCAgRDcpGswEK2Dh9ItUMDdirPYUKwTKMjwDV1gHlR2oCkSmcI9UE BabYrGnQoolgBCGckX7yWJWDYaUMAYSRFECAwMXeiU1BHpKTB4CBR4+oBOb5By1UNgUfXj0C 8HaP079sBCCkZIAKWst/OGPOhNBNHQmXOeftJBASRVCcEiIojQDBwIOeRo+SpGXKFFGbP6Xi nLWxEMsmWpEOC9XDYtigYtKSwsH2xdq2cEfRmFS1rt27eE09CAEAOw== }] } # # Provide a lowercased access method for the Scrolledhtml class. # proc ::iwidgets::scrolledhtml {pathName args} { uplevel ::iwidgets::Scrolledhtml $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::constructor {args} { # define the fonts we're going to use set _fontnames "" _definefont helvetica adobe helvetica "medium bold" "r o" iso8859 _definefont courier adobe courier "medium bold" "r o" iso8859 _definefont times adobe times "medium bold" "r i" iso8859 _definefont symbol adobe symbol "medium medium" "r r" adobe $itk_component(text) configure -state disabled eval itk_initialize $args if {[lsearch -exact $args -linkcommand] == -1} { configure -linkcommand [itcl::code $this import -link] } set _initialized 1 } # ------------------------------------------------------------------ # DESTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::destructor {} { foreach x $_images { ::image delete $x } if {$_unknownimg != $_defUnknownImg} { ::image delete $_unknownimg } } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -fontsize # # Set the general size of the font. # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledhtml::fontsize { switch $itk_option(-fontsize) { small { } medium { } large { } huge { } default { error "bad fontsize option\ \"$itk_option(-fontsize)\": should\ be small, medium, large, or huge" } } _reconfig_tags } # ------------------------------------------------------------------ # OPTION: -fixedfont # # Set the fixed font name # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledhtml::fixedfont { if {[lsearch -exact $_fontnames $itk_option(-fixedfont)] == -1} { error "Invalid font name \"$itk_option(-fixedfont)\". Must be one of \ $_fontnames" } } # ------------------------------------------------------------------ # OPTION: -fontname # # Set the default font name # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledhtml::fontname { if {[lsearch -exact $_fontnames $itk_option(-fontname)] == -1} { error "Invalid font name \"$itk_option(-fontname)\". Must be one of \ $_fontnames" } } # ------------------------------------------------------------------ # OPTION: -textbackground # # Set the default text background # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledhtml::textbackground { set _defaulttextbackground $itk_option(-textbackground) } # ------------------------------------------------------------------ # OPTION: -linkhighlight # # same as alink # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledhtml::linkhighlight { configure -alink $itk_option(-linkhighlight) } # ------------------------------------------------------------------ # OPTION: -unknownimage # # set image to use as substitute for images that aren't found # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledhtml::unknownimage { set oldimage $_unknownimg if {$itk_option(-unknownimage) != {}} { set uki $itk_option(-unknownimage) if [catch { set _unknownimg [::image create photo -file $uki] } err] { error "Couldn't create image $uki:\n$err\nUnknown image not found" } } else { set _unknownimg $_defUnknownImg } if {$oldimage != {} && $oldimage != $_defUnknownImg} { ::image delete $oldimage } } # ------------------------------------------------------------------ # OPTION: -update # # boolean indicating whether to update during rendering # ------------------------------------------------------------------ itcl::configbody iwidgets::Scrolledhtml::update { switch -- $itk_option(-update) { 0 {} 1 {} true { configure -update 1 } yes { configure -update 1 } false { configure -update 0 } yes { configure -update 0 } default { error "invalid -update; must be boolean" } } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # METHOD: clear # # Clears the text out # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::clear {} { $itk_component(text) config -state normal $itk_component(text) delete 1.0 end foreach x $_images { ::image delete $x } set _images {} _setup $itk_component(text) config -state disabled } # ------------------------------------------------------------------ # METHOD import ?-link? filename?#anchorname? # # read html text from a file (import filename) if the keyword link is present, # pathname is relative to last page, otherwise it is relative to current # directory. This allows the user to use a linkcommand of # " import -link" # # if '#anchorname' is appended to the filename, the page is displayed starting # at the anchor named 'anchorname' If an anchor is specified without a filename, # the current page is assumed. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::import {args} { update idletasks set len [llength $args] if {$len != 1 && $len != 2} { error "wrong # args: should be \ \"$itk_component(hull) import ?-link? filename\"" } set linkname [lindex $args [expr {$len - 1}]] # # Seperate filename#anchorname # if ![regexp {(.*)#(.*)} $linkname dummy filename anchorname] { set filename $linkname } if {$filename!=""} { # # Check for -link option # switch -- $len { 1 { # # open file & set cwd to that file's directory # set f [open $filename r] set _cwd [file dirname $filename] } 2 { switch -- [lindex $args 0] { -link { # # got -link, so set path relative to current locale, if path # is a relative pathname # if {[string compare "." [file dirname $filename]] == 0} { set f [open $_cwd/$filename r] } else { if {[string index [file dirname $filename] 0] != "/" &&\ [string index [file dirname $filename] 0] != "~"} { set f [open $_cwd/$filename r] append _cwd / append _cwd [file dirname $filename] } else { set f [open $filename r] set _cwd [file dirname $filename] } } } default { # got something other than -link error "invalid format: should be \ \"$itk_component(hull) import ?-link? filename\"" } } } } set txt [read $f] close $f render $txt $_cwd } # # if an anchor was requested, move that anchor into view # if [ info exists anchorname] { if {$anchorname!=""} { if [info exists _anchor($anchorname)] { $itk_component(text) see end $itk_component(text) see $_anchor($anchorname) } } else { $itk_component(text) see 0.0 } } } # ------------------------------------------------------------------ # METHOD: render text ?wd? # # Clear the text, then render html formatted text. Optional wd argument # sets the base directory for any links or images. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::render {html {wd .}} { update idletasks # # blank text and reset all state variables # clear set _cwd $wd # # make text writable # $itk_component(text) config -state normal set continuerendering 1 _set_tag while {$continuerendering} { # normal state while {[set len [string length $html]]} { # look for text up to the next <> element if [regexp -indices "^\[^<\]+" $html match] { set text [string range $html 0 [lindex $match 1]] _append_text "$text" set html \ [string range $html [expr {[lindex $match 1]+1}] end] } # we're either at a <>, or at the eot if [regexp -indices "^<((\[^>\"\]+|(\"\[^\"\]*\"))*)>" $html match entity] { regsub -all "\n" [string range $html [lindex $entity 0] \ [lindex $entity 1]] "" entity set cmd [string tolower [lindex $entity 0]] if {[info command _entity_$cmd]!=""} { if {[catch {eval _entity_$cmd [lrange $entity 1 end]} bad]} { if {$itk_option(-debug)} { global errorInfo puts stderr "render: _entity_$cmd [lrange $entity 1 end] = Error:$bad\n$errorInfo" } } } set html \ [string range $html [expr {[lindex $match 1]+1}] end] } if {$itk_option(-feedback) != {} } { eval $itk_option(-feedback) $len } if $_verbatim break } # we reach here if html is empty, or _verbatim is 1 if !$len break # _verbatim must be 1 # append text until next tag is reached if [regexp -indices "<.*>" $html match] { set text [string range $html 0 [expr {[lindex $match 0]-1}]] set html [string range $html [expr {[lindex $match 0]}] end] } else { set text $html set html "" } _append_text "$text" } $itk_component(text) config -state disabled } # ------------------------------------------------------------------ # PRIVATE METHOD: _setup # # Reset all state variables to prepare for a new page. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_setup {} { set _font $itk_option(-fontname) set _left 0 set _left2 0 set _right 0 set _justify L set _textweight 0 set _textslant 0 set _underline 0 set _verbatim 0 set _pre 0 set _title {} set _intitle 0 set _anchorcount 0 set _intable 0 set _hottext $itk_component(text) set _stack(font) {} set _stack(color) {} set _stack(bgcolor) {} set _stack(link) {} set _stack(alink) {} set _stack(justify) {} set _stack(listyle) {} set _stack(lipic) {} set _stack(href) {} set _stack(pointsndx) {} set _stack(left) {} set _stack(left2) {} set _stack(offset) {} set _stack(table) {} set _stack(tablewidth) {} set _stack(row) {} set _stack(column) {} set _stack(hottext) {} set _stack(tableborder) {} set _stack(cellpadding) {} set _stack(cellspacing) {} set _stack(licount) {} set _basefontsize 2 set _pointsndx 2 set _counter -1 set _bgcolor $_defaulttextbackground set _color $itk_option(-foreground) set _link $itk_option(-link) set _alink $itk_option(-alink) config -textbackground $_bgcolor foreach x [array names _anchor] { unset _anchor($x) } $itk_component(text) tag config hr -relief sunken -borderwidth 2 \ -font -*-*-*-*-*-*-$_rulerheight-*-*-*-*-*-*-* } # ------------------------------------------------------------------ # PRIVATE METHOD: _definefont name foundry family weight slant registry # # define font information used to generate font value from font name # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_definefont \ {name foundry family weight slant registry} { if {[lsearch -exact $_fontnames $name] == -1 } { lappend _fontnames $name } set _fontinfo($name) \ [list $foundry $family $weight $slant $registry] } # ------------------------------------------------------------------ # PRIVATE METHOD: _append_text text # # append text in the format described by the state variables # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_append_text {text} { if {!$_intable && $itk_option(-update)} {update} if {[string first "&" $text] != -1} { regsub -nocase -all "&" $text {\&} text regsub -nocase -all "<" $text "<" text regsub -nocase -all ">" $text ">" text regsub -nocase -all """ $text "\"" text } if !$_verbatim { if !$_pre { set text [string trim $text "\n\r"] regsub -all "\[ \n\r\t\]+" $text " " text } if ![string length $text] return } if {!$_pre && !$_intitle} { if {[catch {$_hottext get "end - 2c"} p]} { set p "" } set n [string index $text 0] if {$n == " " && $p == " "} { set text [string range $text 1 end] } if {[catch {$_hottext insert end $text $_tag}]} { set pht [winfo parent $_hottext] catch {$pht insert end $text $_tag} } return } if {$_pre && !$_intitle} { if {[catch {$_hottext insert end $text $_tag}]} { set pht [winfo parent $_hottext] catch {$pht insert end $text $_tag} } return } append _title $text } # ------------------------------------------------------------------ # PRIVATE METHOD: _set_tag # # generate a tag # ------------------------------------------------------------------ # a tag is constructed as: font?B?I?U?Points-LeftLeft2RightColorJustify itcl::body iwidgets::Scrolledhtml::_set_tag {} { set i -1 foreach var {foundry family weight slant registry} { set $var [lindex $_fontinfo($_font) \ [incr i]] } set x_font "-$foundry-$family-" set _tag $_font set args {} if {$_textweight > 0} { append _tag "B" append x_font [lindex $weight 1]- } else { append x_font [lindex $weight 0]- } if {$_textslant > 0} { append _tag "I" append x_font [lindex $slant 1]- } else { append x_font [lindex $slant 0]- } if {$_underline > 0} { append _tag "U" append args " -underline 1" } switch $_justify { L { append args " -justify left" } R { append args " -justify right" } C { append args " -justify center" } } append args " -offset $_offset" set pts [lindex [set [format "_%spoints" $itk_option(-fontsize)]] \ $_pointsndx] append _tag $_pointsndx - $_left \ $_left2 $_right \ $_color $_justify append x_font "normal-*-*-$pts-*-*-*-*-$registry-*" if $_anchorcount { set href [_peek href] set href_tag href[incr _counter] set tags [list $_tag $href_tag] if { $itk_option(-linkcommand)!= {} } { $_hottext tag bind $href_tag <1> \ [list uplevel #0 $itk_option(-linkcommand) $href] } $_hottext tag bind $href_tag \ [list $_hottext tag configure $href_tag \ -foreground $_alink] $_hottext tag bind $href_tag \ [list $_hottext tag configure $href_tag \ -foreground $_color] } else { set tags $_tag } if {![info exists _tagl($_tag)]} { set _tagfont($_tag) 1 eval $_hottext tag configure $_tag \ -foreground ${_color} \ -lmargin1 ${_left}m \ -lmargin2 ${_left2}m $args if [catch {eval $_hottext tag configure $_tag \ -font $x_font} err] { _definefont $_font * $family $weight $slant * regsub \$foundry $x_font * x_font regsub \$registry $x_font * x_font catch {eval $_hottext tag configure $_tag -font $x_font} } } if [info exists href_tag] { $_hottext tag raise $href_tag $_tag } set _tag $tags } # ------------------------------------------------------------------ # PRIVATE METHOD: _reconfig_tags # # reconfigure tags following a configuration change # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_reconfig_tags {} { if $_initialized { foreach tag [$itk_component(text) tag names] { foreach efont $_fontnames { if [regexp "${efont}(B?)(I?)(U?)(\[1-9\]\[0-9\]*)-" $tag t b i u points] { set j -1 set _font $efont foreach var {foundry family weight slant registry} { set $var [lindex $_fontinfo($_font) [incr j]] } set x_font "-$foundry-$family-" if {$b == "B"} { append x_font [lindex $weight 1]- } else { append x_font [lindex $weight 0]- } if {$i == "I"} { append x_font [lindex $slant 1]- } else { append x_font [lindex $slant 0]- } set pts [lindex [set [format \ "_%spoints" $itk_option(-fontsize)]] $points] append x_font "normal-*-*-$pts-*-*-*-*-$registry-*" $itk_component(text) tag config $tag -font $x_font break } } } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _push instack value # # push value onto stack(instack) # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_push {instack value} { set _stack($instack) [linsert $_stack($instack) 0 $value] } # ------------------------------------------------------------------ # PRIVATE METHOD: _pop instack # # pop value from stack(instack) # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_pop {instack} { if {$_stack($instack) == ""} { error "popping empty _stack $instack" } set val [lindex $_stack($instack) 0] set _stack($instack) [lrange $_stack($instack) 1 end] return $val } # ------------------------------------------------------------------ # PRIVATE METHOD: _peek instack # # peek at top value on stack(instack) # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_peek {instack} { return [lindex $_stack($instack) 0] } # ------------------------------------------------------------------ # PRIVATE METHOD: _parse_fields array_var string # # parse fields from a href or image tag. At the moment, doesn't support # spaces in field values. (e.g. alt="not avaliable") # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_parse_fields {array_var string} { upvar $array_var array if {$string != "{}" } { regsub -all "( *)=( *)" $string = string regsub -all {\\\"} $string \" string while {$string != ""} { if ![regexp "^ *(\[^ \n\r=\]+)=\"(\[^\"\n\r\t\]*)(.*)" $string \ dummy field value newstring] { if ![regexp "^ *(\[^ \n\r=\]+)=(\[^\n\r\t \]*)(.*)" $string \ dummy field value newstring] { if ![regexp "^ *(\[^ \n\r\]+)(.*)" $string dummy field newstring] { error "malformed command field; field = \"$string\"" continue } set value "" } } set array([string tolower $field]) $value set string "$newstring" } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _href_click # # process a click on an href # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_href_click {cmd href} { uplevel #0 $cmd $href } # ------------------------------------------------------------------ # PRIVATE METHOD: _set_align # # set text alignment # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_set_align {align} { switch [string tolower $align] { center { set _justify C } left { set _justify L } right { set _justify R } default {} } } # ------------------------------------------------------------------ # PRIVATE METHOD: _fixtablewidth # # fix table width & height # essentially, with nested tables the outer table must be configured before # the inner table, but the idle tasks get queued up in the opposite order, # so process later idle tasks before sizing yourself. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_fixtablewidth {hottext table multiplier} { update idletasks $hottext see $_anchor($table) update idletasks $table configure \ -width [expr {$multiplier * [winfo width $hottext] - \ 2* [$hottext cget -padx] - \ 2* [$hottext cget -borderwidth]} ] \ -height [winfo height $table] grid propagate $table 0 } # ------------------------------------------------------------------ # PRIVATE METHOD: _header level # # generic entity to set state for tag # Accepts argument of the form ?align=[left,right,center]? ?src=? # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_header {level args} { eval _parse_fields ar $args _push justify $_justify if [info exists ar(align)] { _entity_p align=$ar(align) } else { _entity_p } if [info exists ar(src)] { _entity_img src=$ar(src) } _push pointsndx $_pointsndx set _pointsndx [expr {7-$level}] incr _textweight _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _/header level # # generic entity to set state for tag # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_/header {level} { set _justify [_pop justify] set _pointsndx [_pop pointsndx] incr _textweight -1 _set_tag _entity_p } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_a # # add an anchor. Accepts arguments of the form ?href=filename#anchorpoint? # ?name=anchorname? # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_a {args} { _parse_fields ar $args _push color $_color if [info exists ar(href)] { _push href $ar(href) incr _anchorcount set _color $_link _entity_u } else { _push href {} } if [info exists ar(name)] { set _anchor($ar(name)) [$itk_component(text) index end] } if [info exists ar(id)] { set _anchor($ar(id)) [$itk_component(text) index end] } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/a # # End anchor # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/a {} { set href [_pop href] if {$href != {}} { incr _anchorcount -1 set _color [_pop color] _entity_/u } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_address # # display an address # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_address {} { _entity_br _entity_i } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/address # # change state back from address display # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/address {} { _entity_/i _entity_br } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_b # # Change current font to bold # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_b {} { incr _textweight _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/b # # change current font back from bold # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/b {} { incr _textweight -1 _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_base # # set the cwd of the document # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_base {{args {}}} { _parse_fields ar $args if [info exists ar(href)] { set _cwd [file dirname $ar(href)] } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_basefont # # set base font size # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_basefont {{args {}}} { _parse_fields ar $args if {[info exists ar(size)]} { set _basefontsize $ar(size) } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_big # # Change current font to a bigger size # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_big {} { _push pointsndx $_pointsndx if {[incr _pointsndx 2] > 6} { set _pointsndx 6 } _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/big # # change current font back from bigger size # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/big {} { set _pointsndx [_pop pointsndx] _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_blockquote # # display a block quote # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_blockquote {} { _entity_p _push left $_left incr _left $_indentincr _push left2 $_left2 set _left2 $_left _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/blockquote # # change back from blockquote # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/blockquote {} { _entity_p set _left [_pop left] set _left2 [_pop left2] _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_body # # begin body text. Takes argument of the form ?bgcolor=? ?text=? # ?link=? # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_body {{args {}}} { _parse_fields ar $args if [info exists ar(bgcolor)] { set _bgcolor $ar(bgcolor) set temp $itk_option(-textbackground) config -textbackground $_bgcolor set _defaulttextbackground $temp } if [info exists ar(text)] { set _color $ar(text) } if [info exists ar(link)] { set _link $ar(link) } if [info exists ar(alink)] { set _alink $ar(alink) } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/body # # end body text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/body {} { } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_br # # line break # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_br {{args {}}} { $_hottext insert end "\n" } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_center # # change justification to center # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_center {} { _push justify $_justify set _justify C _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/center # # change state back from center # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/center {} { set _justify [_pop justify] _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_cite # # display citation # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_cite {} { _entity_i } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/cite # # change state back from citation # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/cite {} { _entity_/i } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_code # # display code listing # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_code {} { _entity_pre } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/code # # end code listing # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/code {} { _entity_/pre } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_dir # # display dir list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_dir {{args {}}} { _entity_ul plain $args } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/dir # # end dir list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/dir {} { _entity_/ul } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_div # # divide text. same as

      # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_div {{args {}}} { _entity_p $args } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_dl # # begin definition list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_dl {{args {}}} { if {$_left == 0} { _entity_p } _push left $_left _push left2 $_left2 if {$_left2 == $_left } { incr _left2 [expr {$_indentincr+3}] } else { incr _left2 $_indentincr } incr _left $_indentincr _push listyle $_listyle _push licount $_licount set _listyle none _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/dl # # end definition list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/dl {} { set _left [_pop left] set _left2 [_pop left2] set _listyle [_pop listyle] set _licount [_pop licount] _set_tag if {$_left == 0} { _entity_p } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_dt # # definition term # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_dt {} { set _left [expr {$_left2 - 3}] _set_tag _entity_p } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_dd # # definition definition # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_dd {} { set _left $_left2 _set_tag _entity_br } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_dfn # # display defining instance of a term # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_dfn {} { _entity_i _entity_b } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/dfn # # change state back from defining instance of term # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/dfn {} { _entity_/b _entity_/i } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_em # # display emphasized text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_em {} { _entity_i } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/em # # change state back from emphasized text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/em {} { _entity_/i } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_font # # set font size and color # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_font {{args {}}} { _parse_fields ar $args _push pointsndx $_pointsndx _push color $_color if [info exists ar(size)] { if {![regexp {^[+-].*} $ar(size)]} { set _pointsndx $ar(size) } else { set _pointsndx [expr $_basefontsize $ar(size)] } if { $_pointsndx > 6 } { set _pointsndx 6 } else { if { $_pointsndx < 0 } { set _pointsndx 0 } } } if {[info exists ar(color)]} { set _color $ar(color) } _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/font # # close current font size # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/font {} { set _pointsndx [_pop pointsndx] set _color [_pop color] _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_h1 # # display header level 1. # Accepts argument of the form ?align=[left,right,center]? ?src=? # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_h1 {{args {}}} { _header 1 $args } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/h1 # # change state back from header 1 # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/h1 {} { _/header 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_h2 # # display header level 2 # Accepts argument of the form ?align=[left,right,center]? ?src=? # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_h2 {{args {}}} { _header 2 $args } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/h2 # # change state back from header 2 # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/h2 {} { _/header 2 } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_h3 # # display header level 3 # Accepts argument of the form ?align=[left,right,center]? ?src=? # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_h3 {{args {}}} { _header 3 $args } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/h3 # # change state back from header 3 # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/h3 {} { _/header 3 } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_h4 # # display header level 4 # Accepts argument of the form ?align=[left,right,center]? ?src=? # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_h4 {{args {}}} { _header 4 $args } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/h4 # # change state back from header 4 # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/h4 {} { _/header 4 } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_h5 # # display header level 5 # Accepts argument of the form ?align=[left,right,center]? ?src=? # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_h5 {{args {}}} { _header 5 $args } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/h5 # # change state back from header 5 # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/h5 {} { _/header 5 } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_h6 # # display header level 6 # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_h6 {{args {}}} { _header 6 $args } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/h6 # # change state back from header 6 # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/h6 {} { _/header 6 } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_hr # # Add a horizontal rule # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_hr {{args {}}} { _parse_fields ar $args if [info exists ar(size)] { set font "-font -*-*-*-*-*-*-$ar(size)-*-*-*-*-*-*-*" } else { set font "-font -*-*-*-*-*-*-2-*-*-*-*-*-*-*" } if [info exists ar(width)] { } if [info exists ar(noshade)] { set relief "-relief flat" set background "-background black" } else { set relief "-relief sunken" set background "" } # if [info exists ar(align)] { # $_hottext tag config hr$_counter -justify $ar(align) # set justify -justify $ar(align) # } else { # set justify "" # } eval $_hottext tag config hr[incr _counter] $relief $background $font \ -borderwidth 2 _entity_p $_hottext insert end " \n" hr$_counter } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_i # # display italicized text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_i {} { incr _textslant _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/i # # change state back from italicized text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/i {} { incr _textslant -1 _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_img # # display an image. takes argument of the form img= # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_img {{args {}}} { _parse_fields ar $args set alttext "" # # If proper argument exists # if [info exists ar(src)] { set imgframe $_hottext.img[incr _counter] # # if this is an anchor # if $_anchorcount { # create link colored border frame $imgframe -borderwidth 2 -background $_link bind $imgframe \ [list $imgframe configure -background $_alink] bind $imgframe \ [list $imgframe configure -background $_link] } else { # create plain frame frame $imgframe -borderwidth 0 -background $_color } # # try to load image # if {[string index $ar(src) 0] == "/" || [string index $ar(src) 0] == "~"} { set file $ar(src) } else { set file $_cwd/$ar(src) } if [catch {set img [::image create photo -file $file]} err] { if {[info exists ar(width)] && [info exists ar(height)] } { # suggestions exist, so make frame appropriate size and add a border $imgframe configure -width $ar(width) -height $ar(height) -borderwidth 2 pack propagate $imgframe false } # # If alt text is specified, display that # if [info exists ar(alt)] { # add a border $imgframe configure -borderwidth 2 set win $imgframe.text label $win -text "$ar(alt)" -background $_bgcolor \ -foreground $_color } else { # # use 'unknown image' set win $imgframe.image#auto # # make label containing image # label $win -image $_unknownimg -borderwidth 0 -background $_bgcolor } pack $win -fill both -expand true } else { ;# no error loading image lappend _images $img set win $imgframe.$img # # make label containing image # label $win -image $img -borderwidth 0 } pack $win # # set alignment # set align bottom if [info exists ar(align)] { switch $ar(align) { middle { set align center } right { set align center } default { set align [string tolower $ar(align)] } } } # # create window in text to display image # $_hottext window create end -window \ $imgframe -align $align # # set tag for window # $_hottext tag add $_tag $imgframe if $_anchorcount { set href [_peek href] set href_tag href[incr _counter] set tags [list $_tag $href_tag] if { $itk_option(-linkcommand)!= {} } { bind $win <1> [list uplevel #0 $itk_option(-linkcommand) $href] } } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_kbd # # Display keyboard input # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_kbd {} { incr _textweight _entity_tt _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/kbd # # change state back from displaying keyboard input # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/kbd {} { _entity_/tt incr _textweight -1 _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_li # # begin new list entry # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_li {{args {}}} { _parse_fields ar $args if [info exists ar(value)] { set _licount $ar(value) } _entity_br switch -exact $_listyle { bullet { set old_font $_font set _font symbol _set_tag $_hottext insert end "\xb7" $_tag set _font $old_font _set_tag } none { } picture { _entity_img src="$_lipic" width=4 height=4 align=middle } A { _entity_b $_hottext insert end [format "%c) " [expr {$_licount + 0x40}]] $_tag _entity_/b incr _licount } a { _entity_b $_hottext insert end [format "%c) " [expr {$_licount + 0x60}]] $_tag _entity_/b incr _licount } I { _entity_b $_hottext insert end "[::iwidgets::roman $_licount]) " $_tag _entity_/b incr _licount } i { _entity_b $_hottext insert end "[::iwidgets::roman $_licount lower])] " $_tag _entity_/b incr _licount } default { _entity_b $_hottext insert end "$_licount) " $_tag _entity_/b incr _licount } } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_listing # # diplay code listing # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_listing {} { _entity_pre } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/listing # # end code listing # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/listing {} { _entity_/pre } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_menu # # diplay menu list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_menu {{args {}}} { _entity_ul plain $args } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/menu # # end menu list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/menu {} { _entity_/ul } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_ol # # begin ordered list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_ol {{args {}}} { _parse_fields ar $args if $_left { _entity_br } else { _entity_p } if {![info exists ar(type)]} { set ar(type) 1 } _push licount $_licount if [info exists ar(start)] { set _licount $ar(start) } else { set _licount 1 } _push left $_left _push left2 $_left2 if {$_left2 == $_left } { incr _left2 [expr {$_indentincr+3}] } else { incr _left2 $_indentincr } incr _left $_indentincr _push listyle $_listyle set _listyle $ar(type) _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/ol # # end ordered list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/ol {} { set _left [_pop left] set _left2 [_pop left2] set _listyle [_pop listyle] set _licount [_pop licount] _set_tag _entity_p } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_p # # paragraph break # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_p {{args {}}} { _parse_fields ar $args if [info exists ar(align)] { _set_align $ar(align) } else { set _justify L } _set_tag if [info exists ar(id)] { set _anchor($ar(id)) [$itk_component(text) index end] } set x [$_hottext get end-3c] set y [$_hottext get end-2c] if {$x == "" && $y == ""} return if {$y == ""} { $_hottext insert end "\n\n" return } if {$x == "\n" && $y == "\n"} return if {$y == "\n"} { $_hottext insert end "\n" return } $_hottext insert end "\n\n" } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_pre # # display preformatted text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_pre {{args {}}} { _entity_tt _entity_br incr _pre } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/pre # # change state back from preformatted text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/pre {} { _entity_/tt set _pre 0 _entity_p } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_samp # # display sample text. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_samp {} { _entity_kbd } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/samp # # switch back to non-sample text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/samp {} { _entity_/kbd } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_small # # Change current font to a smaller size # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_small {} { _push pointsndx $_pointsndx if {[incr _pointsndx -2] < 0} { set _pointsndx 0 } _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/small # # change current font back from smaller size # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/small {} { set _pointsndx [_pop pointsndx] _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_sub # # display subscript # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_sub {} { _push offset $_offset incr _offset -2 _entity_small } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/sub # # switch back to non-subscript # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/sub {} { set _offset [_pop offset] _entity_/small } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_sup # # display superscript # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_sup {} { _push offset $_offset incr _offset 4 _entity_small } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/sup # # switch back to non-superscript # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/sup {} { set _offset [_pop offset] _entity_/small } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_strong # # display strong text. (i.e. make font bold) # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_strong {} { incr _textweight _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/strong # # switch back to non-strong text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/strong {} { incr _textweight -1 _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_table # # display a table. # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_table {{args {}}} { _parse_fields ar $args _entity_p set _intable 1 _push row -1 _push column 0 _push hottext $_hottext _push justify $_justify _push justify L # push color information for master of table, then push info for table _push color $_color _push bgcolor $_bgcolor _push link $_link _push alink $_alink if [info exists ar(bgcolor)] { set _bgcolor $ar(bgcolor) } if [info exists ar(text)] { set _color $ar(text) } if [info exists ar(link)] { set _link $ar(link) } if [info exists ar(alink)] { set _alink $ar(alink) } _push color $_color _push bgcolor $_bgcolor _push link $_link _push alink $_alink # push fake first row to avoid using optional /tr tag # (This needs to set a real color - not the empty string # becaule later code will try to use those values.) _push color $_color _push bgcolor $_bgcolor _push link {} _push alink {} if {[info exists ar(align)]} { _set_align $ar(align) _set_tag _append_text " " } set _justify L if [info exists ar(id)] { set _anchor($ar(id)) [$itk_component(text) index end] } if [info exists ar(cellpadding)] { _push cellpadding $ar(cellpadding) } else { _push cellpadding 0 } if [info exists ar(cellspacing)] { _push cellspacing $ar(cellspacing) } else { _push cellspacing 0 } if {[info exists ar(border)]} { _push tableborder 1 set relief raised if {$ar(border)==""} { set ar(border) 2 } } else { _push tableborder 0 set relief flat set ar(border) 2 } _push table [set table $_hottext.table[incr _counter]] iwidgets::labeledwidget $table -foreground $_color -background $_bgcolor -labelpos n if {[info exists ar(title)]} { $table configure -labeltext $ar(title) } # # create window in text to display table # $_hottext window create end -window $table set table [$table childsite] set _anchor($table) [$_hottext index "end - 1 line"] $table configure -borderwidth $ar(border) -relief $relief if {[info exists ar(width)]} { _push tablewidth $ar(width) } else { _push tablewidth 0 } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/table # # end table # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/table {} { if {$_intable} { _pop tableborder set table [[_pop table] childsite] _pop row _pop column _pop cellspacing _pop cellpadding # pop last row's defaults _pop color _pop bgcolor _pop link _pop alink # pop table defaults _pop color _pop bgcolor _pop link _pop alink # restore table master defaults set _color [_pop color] set _bgcolor [_pop bgcolor] set _link [_pop link] set _alink [_pop alink] foreach x [grid slaves $table] { set text [$x get 1.0 end] set tl [split $text \n] set max 0 foreach l $tl { set len [string length $l] if {$len > $max} { set max $len } } if {$max > [$x cget -width]} { $x configure -width $max } if {[$x cget -height] == 1} { $x configure -height [lindex [split [$x index "end - 1 chars"] "."] 0] } } $_hottext configure -state disabled set _hottext [_pop hottext] $_hottext configure -state normal if {[set tablewidth [_pop tablewidth]]!="0"} { if {[string index $tablewidth \ [expr {[string length $tablewidth] -1}]] == "%"} { set multiplier [expr {[string trimright $tablewidth "%"] / 100.0}] set idletask [after idle [itcl::code "$this _fixtablewidth $_hottext $table $multiplier"]] } else { $table configure -width $tablewidth grid propagate $table 0 } } _pop justify set _justify [_pop justify] _entity_br } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_td # # start table data cell # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_td {{args {}}} { if $_intable { _parse_fields ar $args set table [[_peek table] childsite] if {![info exists ar(colspan)]} { set ar(colspan) 1 } if {![info exists ar(rowspan)]} { set ar(rowspan) 1 } if {![info exists ar(width)]} { set ar(width) 10 } if {![info exists ar(height)]} { set ar(height) 0 } if [info exists ar(bgcolor)] { set _bgcolor $ar(bgcolor) } else { set _bgcolor [_peek bgcolor] } if [info exists ar(text)] { set _color $ar(text) } else { set _color [_peek color] } if [info exists ar(link)] { set _link $ar(link) } else { set _link [_peek link] } if [info exists ar(alink)] { set _alink $ar(alink) } else { set _alink [_peek alink] } $_hottext configure -state disabled set cellpadding [_peek cellpadding] set cellspacing [_peek cellspacing] set _hottext $table.cell[incr _counter] text $_hottext -relief flat -width $ar(width) -height $ar(height) \ -highlightthickness 0 -wrap word -cursor $itk_option(-cursor) \ -wrap word -cursor $itk_option(-cursor) \ -padx $cellpadding -pady $cellpadding if {$_color != ""} { $_hottext config -foreground $_color } if {$_bgcolor != ""} { $_hottext config -background $_bgcolor } if [info exists ar(nowrap)] { $_hottext configure -wrap none } if [_peek tableborder] { $_hottext configure -relief sunken } set row [_peek row] if {$row < 0} { set row 0 } set column [_pop column] if {$column < 0} { set column 0 } while {[grid slaves $table -row $row -column $column] != ""} { incr column } grid $_hottext -sticky nsew -row $row -column $column \ -columnspan $ar(colspan) -rowspan $ar(rowspan) \ -padx $cellspacing -pady $cellspacing grid columnconfigure $table $column -weight 1 _push column [expr {$column + $ar(colspan)}] if [info exists ar(align)] { _set_align $ar(align) } else { set _justify [_peek justify] } _set_tag } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/td # # end table data cell # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/td {} { } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_th # # start table header # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_th {{args {}}} { if $_intable { _parse_fields ar $args if [info exists ar(align)] { _entity_td $args } else { _entity_td align=center $args } _entity_b } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/th # # end table data cell # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/th {} { _entity_/td } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_title # # begin title of document # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_title {} { set _intitle 1 } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/title # # end title # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/title {} { set _intitle 0 } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_tr # # start table row # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_tr {{args {}}} { if $_intable { _parse_fields ar $args _pop justify if [info exists ar(align)] { _set_align $ar(align) _push justify $_justify } else { _push justify L } # pop last row's colors _pop color _pop bgcolor _pop link _pop alink if [info exists ar(bgcolor)] { set _bgcolor $ar(bgcolor) } else { set _bgcolor [_peek bgcolor] } if [info exists ar(text)] { set _color $ar(text) } else { set _color [_peek color] } if [info exists ar(link)] { set _link $ar(link) } else { set _link [_peek link] } if [info exists ar(alink)] { set _alink $ar(alink) } else { set _alink [_peek alink] } # push this row's defaults _push color $_color _push bgcolor $_bgcolor _push link $_link _push alink $_alink $_hottext configure -state disabled _push row [expr {[_pop row] + 1}] _pop column _push column 0 } } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/tr # # end table row # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/tr {} { } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_tt # # Show typewriter text, using the font given by -fixedfont # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_tt {} { _push font $_font set _font $itk_option(-fixedfont) set _verbatim 1 _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/tt # # Change back to non-typewriter mode to display text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/tt {} { set _font [_pop font] set _verbatim 0 _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_u # # display underlined text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_u {} { incr _underline _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/u # # change back from underlined text # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/u {} { incr _underline -1 _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_ul # # begin unordered list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_ul {{args {}}} { _parse_fields ar $args if $_left { _entity_br } else { _entity_p } if [info exists ar(id)] { set _anchor($ar(id)) [$itk_component(text) index end] } _push left $_left _push left2 $_left2 if {$_left2 == $_left } { incr _left2 [expr {$_indentincr+3}] } else { incr _left2 $_indentincr } incr _left $_indentincr _push listyle $_listyle _push licount $_licount if [info exists ar(plain)] { set _listyle none } { set _listyle bullet } if [info exists ar(dingbat)] { set ar(src) $ar(dingbat) } _push lipic $_lipic if [info exists ar(src)] { set _listyle picture set _lipic $ar(src) } _set_tag } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/ul # # end unordered list # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/ul {} { set _left [_pop left] set _left2 [_pop left2] set _listyle [_pop listyle] set _licount [_pop licount] set _lipic [_pop lipic] _set_tag _entity_p } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_var # # Display variable # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_var {} { _entity_i } # ------------------------------------------------------------------ # PRIVATE METHOD: _entity_/var # # change state back from variable display # ------------------------------------------------------------------ itcl::body iwidgets::Scrolledhtml::_entity_/var {} { _entity_/i } iwidgets-4.1.1/generic/timefield.itk0000644003604700454610000007460413153526747016046 0ustar dgp771div# # Timefield # ---------------------------------------------------------------------- # Implements a time entry field with adjustable built-in intelligence # levels. # ---------------------------------------------------------------------- # AUTHOR: John A. Tucker E-mail: jatucker@austin.dsccc.com # # @(#) $Id: timefield.itk,v 1.8 2017/05/30 18:26:14 dgp Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1997 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Use option database to override default resources of base classes. # option add *Timefield.justify center widgetDefault # # Usual options. # itk::usual Timefield { keep -background -borderwidth -cursor -foreground -highlightcolor \ -highlightthickness -labelfont -textbackground -textfont } # ------------------------------------------------------------------ # TIMEFIELD # ------------------------------------------------------------------ itcl::class iwidgets::Timefield { inherit iwidgets::Labeledwidget constructor {args} {} itk_option define -childsitepos childSitePos Position e itk_option define -command command Command {} itk_option define -seconds seconds Seconds on itk_option define -format format Format civilian itk_option define -iq iq Iq high itk_option define -gmt gmt GMT no itk_option define -state state State normal public { method get {{format "-string"}} method isvalid {} method show {{time "now"}} } protected { method _backwardCivilian {} method _backwardMilitary {} method _focusIn {} method _forwardCivilian {} method _forwardMilitary {} method _keyPress {char sym state} method _moveField {direction} method _setField {field} method _whichField {} method _toggleAmPm {} variable _cfield hour variable _formatString "%I:%M:%S %p" variable _fields {} variable _numFields 4 variable _forward {} variable _backward {} variable _timeVar "" common _militaryFields {hour minute second} common _civilianFields {hour minute second ampm} } } # # Provide a lowercased access method for the timefield class. # proc iwidgets::timefield {pathName args} { uplevel iwidgets::Timefield $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::constructor {args} { component hull configure -borderwidth 0 # # Create an entry field for entering the time. # itk_component add time { entry $itk_interior.time } { keep -borderwidth -cursor -exportselection \ -foreground -highlightcolor -highlightthickness \ -insertbackground -justify -relief -textvariable rename -font -textfont textFont Font rename -highlightbackground -background background Background rename -background -textbackground textBackground Background } # # Create the child site widget. # itk_component add -protected dfchildsite { frame $itk_interior.dfchildsite } set itk_interior $itk_component(dfchildsite) # # Add timefield event bindings for focus in and keypress events. # bind $itk_component(time) [itcl::code $this _focusIn] bind $itk_component(time) [itcl::code $this _keyPress %A %K %s] bind $itk_component(time) <1> "focus $itk_component(time); break" # # Disable some mouse button event bindings: # Button Motion # Double-Clicks # Triple-Clicks # Button2 # bind $itk_component(time) break bind $itk_component(time) break bind $itk_component(time) break bind $itk_component(time) break bind $itk_component(time) <2> break # # Initialize the widget based on the command line options. # eval itk_initialize $args # # Initialize the time to the current time. # show } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION: -childsitepos # # Specifies the position of the child site in the widget. Valid # locations are n, s, e, and w. # ------------------------------------------------------------------ itcl::configbody iwidgets::Timefield::childsitepos { set parent [winfo parent $itk_component(time)] switch $itk_option(-childsitepos) { n { grid $itk_component(dfchildsite) -row 0 -column 0 -sticky ew grid $itk_component(time) -row 1 -column 0 -sticky nsew grid rowconfigure $parent 0 -weight 0 grid rowconfigure $parent 1 -weight 1 grid columnconfigure $parent 0 -weight 1 grid columnconfigure $parent 1 -weight 0 } e { grid $itk_component(dfchildsite) -row 0 -column 1 -sticky ns grid $itk_component(time) -row 0 -column 0 -sticky nsew grid rowconfigure $parent 0 -weight 1 grid rowconfigure $parent 1 -weight 0 grid columnconfigure $parent 0 -weight 1 grid columnconfigure $parent 1 -weight 0 } s { grid $itk_component(dfchildsite) -row 1 -column 0 -sticky ew grid $itk_component(time) -row 0 -column 0 -sticky nsew grid rowconfigure $parent 0 -weight 1 grid rowconfigure $parent 1 -weight 0 grid columnconfigure $parent 0 -weight 1 grid columnconfigure $parent 1 -weight 0 } w { grid $itk_component(dfchildsite) -row 0 -column 0 -sticky ns grid $itk_component(time) -row 0 -column 1 -sticky nsew grid rowconfigure $parent 0 -weight 1 grid rowconfigure $parent 1 -weight 0 grid columnconfigure $parent 0 -weight 0 grid columnconfigure $parent 1 -weight 1 } default { error "bad childsite option\ \"$itk_option(-childsitepos)\":\ should be n, e, s, or w" } } } # ------------------------------------------------------------------ # OPTION: -command # # Command invoked upon detection of return key press event. # ------------------------------------------------------------------ itcl::configbody iwidgets::Timefield::command {} # ------------------------------------------------------------------ # OPTION: -iq # # Specifies the level of intelligence to be shown in the actions # taken by the time field during the processing of keypress events. # Valid settings include high or low. With a high iq, # the time prevents the user from typing in an invalid time. For # example, if the current time is 05/31/1997 and the user changes # the hour to 04, then the minute will be instantly modified for them # to be 30. In addition, leap seconds are fully taken into account. # A setting of low iq instructs the widget to do no validity checking # at all during time entry. With a low iq level, it is assumed that # the validity will be determined at a later time using the time's # isvalid command. # ------------------------------------------------------------------ itcl::configbody iwidgets::Timefield::iq { switch $itk_option(-iq) { high - low { } default { error "bad iq option \"$itk_option(-iq)\": should be high or low" } } } # ------------------------------------------------------------------ # OPTION: -format # # Specifies the time format displayed in the entry widget. # ------------------------------------------------------------------ itcl::configbody iwidgets::Timefield::format { switch $itk_option(-format) { civilian { set _backward _backwardCivilian set _forward _forwardCivilian set _fields $_civilianFields set _numFields 4 set _formatString "%I:%M:%S %p" $itk_component(time) config -width 11 } military { set _backward _backwardMilitary set _forward _forwardMilitary set _fields $_militaryFields set _numFields 3 set _formatString "%T" $itk_component(time) config -width 8 } default { error "bad iq option \"$itk_option(-iq)\":\ should be civilian or military" } } # # Update the current contents of the entry field to reflect # the configured format. # show $_timeVar } # ------------------------------------------------------------------ # OPTION: -gmt # # This option is used for GMT time. Must be a boolean value. # ------------------------------------------------------------------ itcl::configbody iwidgets::Timefield::gmt { switch $itk_option(-gmt) { 0 - no - false - off { } 1 - yes - true - on { } default { error "bad gmt option \"$itk_option(-gmt)\": should be boolean" } } } # ------------------------------------------------------------------ # OPTION: -state # # Disable the # ------------------------------------------------------------------ itcl::configbody iwidgets::Timefield::state { switch -- $itk_option(-state) { normal { $itk_component(time) configure -state normal } disabled { focus $itk_component(hull) $itk_component(time) configure -state disabled } default { error "Invalid value for -state: $itk_option(-state). Should be\ \"normal\" or \"disabled\"." } } } # ------------------------------------------------------------------ # METHODS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # PUBLIC METHOD: get ?format? # # Return the current contents of the timefield in one of two formats # string or as an integer clock value using the -string and -clicks # options respectively. The default is by string. Reference the # clock command for more information on obtaining times and their # formats. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::get {{format "-string"}} { set _timeVar [$itk_component(time) get] switch -- $format { "-string" { return $_timeVar } "-clicks" { return [::clock scan $_timeVar -gmt $itk_option(-gmt)] } default { error "bad format option \"$format\":\ should be -string or -clicks" } } } # ------------------------------------------------------------------ # PUBLIC METHOD: show time # # Changes the currently displayed time to be that of the time # argument. The time may be specified either as a string or an # integer clock value. Reference the clock command for more # information on obtaining times and their formats. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::show {{time "now"}} { set icursor [$itk_component(time) index insert] if {$time == {}} { set time "now" } switch -regexp -- $time { {^now$} { set seconds [::clock seconds] } {^[0-9]+$} { if { [catch {::clock format $time -gmt $itk_option(-gmt)}] } { error "bad time: \"$time\", must be a valid time \ string, clock clicks value or the keyword now" } set seconds $time } default { if {[catch {set seconds [::clock scan $time -gmt $itk_option(-gmt)]}]} { error "bad time: \"$time\", must be a valid time \ string, clock clicks value or the keyword now" } } } set _timeVar [::clock format $seconds -format $_formatString \ -gmt $itk_option(-gmt)] $itk_component(time) delete 0 end $itk_component(time) insert end $_timeVar $itk_component(time) icursor $icursor return $_timeVar } # ------------------------------------------------------------------ # PUBLIC METHOD: isvalid # # Returns a boolean indication of the validity of the currently # displayed time value. For example, 09:59::59 is valid whereas # 26:59:59 is invalid. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::isvalid {} { set _timeVar [$itk_component(time) get] if {[catch {set count [scan $_timeVar {%2d:%2d:%2d %1sM} h m s p]}]} { return 0 } if {$count != 4} { return 0 } if {![string match {[AP]} $p]} { return 0 } if {$s < 0 || $s > 59} { return 0 } if {$m < 0 || $m > 59} { return 0 } if {$itk_option(-format) == "military"} { if {$h < 0 || $h > 23} { return 0 } } else { if {$h < 1 || $h > 12} { return 0 } } return 1 } # ------------------------------------------------------------------ # PROTECTED METHOD: _focusIn # # This method is bound to the event. It resets the # insert cursor and field settings to be back to their last known # positions. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_focusIn {} { _setField $_cfield } # ------------------------------------------------------------------ # PROTECTED METHOD: _keyPress # # This method is the workhorse of the class. It is bound to the # event and controls the processing of all key strokes. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_keyPress {char sym state} { # # Determine which field we are in currently. This is needed # since the user may have moved to this position via a mouse # selection and so it would not be in the position we last # knew it to be. # set _cfield [_whichField ] # # Set up a few basic variables we'll be needing throughout the # rest of the method such as the position of the insert cursor # and the currently displayed minute, hour, and second. # set inValid 0 set icursor [$itk_component(time) index insert] set lastField [lindex $_fields end] set prevtime $_timeVar regexp {^([0-9])([0-9]):([0-9])([0-9]):([0-9])([0-9]).*$} \ $_timeVar dummy \ hour1 hour2 minute1 minute2 second1 second2 set hour "$hour1$hour2" set minute "$minute1$minute2" set second "$second1$second2" # # Process numeric keystrokes. This involes a fair amount of # processing with step one being to check and make sure we # aren't attempting to insert more that 6 characters. If # so ring the bell and break. # if {![catch {expr {int($char)}}]} { # If we are currently in the hour field then we process the # number entered based on the cursor position. If we are at # at the first position and our iq is low, then accept any # input. # # if the current format is military, then # validate the hour field which can be [00 - 23] # switch $_cfield { hour { if {$itk_option(-iq) == "low"} { $itk_component(time) delete $icursor $itk_component(time) insert $icursor $char } elseif {$itk_option(-format) == "military"} { if {$icursor == 0} { # # if the digit is less than 2, then # the second hour digit is valid for 0-9 # if {$char < 2} { $itk_component(time) delete 0 1 $itk_component(time) insert 0 $char # # if the digit is equal to 2, then # the second hour digit is valid for 0-3 # } elseif {$char == 2} { $itk_component(time) delete 0 1 $itk_component(time) insert 0 $char if {$hour2 > 3} { $itk_component(time) delete 1 2 $itk_component(time) insert 1 "0" $itk_component(time) icursor 1 } # # if the digit is greater than 2, then # set the first hour digit to 0 and the # second hour digit to the value. # } elseif {$char > 2} { $itk_component(time) delete 0 2 $itk_component(time) insert 0 "0$char" set icursor 1 } else { set inValid 1 } # # if the insertion cursor is for the second hour digit, then # format is military, then it can only be valid if the first # hour digit is less than 2 or the new digit is less than 4 # } else { if {$hour1 < 2 || $char < 4} { $itk_component(time) delete 1 2 $itk_component(time) insert 1 $char } else { set inValid 1 } } # # The format is civilian, so we need to # validate the hour field which can be [01 - 12] # } else { if {$icursor == 0} { # # if the digit is 0, then # the second hour digit is valid for 1-9 # so just insert it. # if {$char == 0 && $hour2 != 0} { $itk_component(time) delete 0 1 $itk_component(time) insert 0 $char # # if the digit is equal to 1, then # the second hour digit is valid for 0-2 # } elseif {$char == 1} { $itk_component(time) delete 0 1 $itk_component(time) insert 0 $char if {$hour2 > 2} { $itk_component(time) delete 1 2 $itk_component(time) insert 1 0 set icursor 1 } # # if the digit is greater than 1, then # set the first hour digit to 0 and the # second hour digit to the value. # } elseif {$char > 1} { $itk_component(time) delete 0 2 $itk_component(time) insert 0 "0$char" set icursor 1 } else { set inValid 1 } # # The insertion cursor is at the second hour digit, so # it can only be valid if the firs thour digit is 0 # or the new digit is less than or equal to 2 # } else { if {$hour1 == 0 || $char <= 2} { $itk_component(time) delete 1 2 $itk_component(time) insert 1 $char } else { set inValid 1 } } } if {$inValid} { bell } elseif {$icursor == 1} { _setField minute } } minute { if {$itk_option(-iq) == "low" || $char < 6 || $icursor == 4} { $itk_component(time) delete $icursor $itk_component(time) insert $icursor $char } elseif {$itk_option(-iq) == "high"} { if {$char > 5} { $itk_component(time) delete 3 5 $itk_component(time) insert 3 "0$char" set icursor 4 } } if {$icursor == 4} { _setField second } } second { if {$itk_option(-iq) == "low" || $char < 6 || $icursor == 7} { $itk_component(time) delete $icursor $itk_component(time) insert $icursor $char } elseif {$itk_option(-iq) == "high"} { if {$char > 5} { $itk_component(time) delete 6 8 $itk_component(time) insert 6 "0$char" set icursor 7 } } if {$icursor == 7} { _moveField forward } } } set _timeVar [$itk_component(time) get] return -code break } # # Process the plus and the up arrow keys. They both yield the same # effect, they increment the minute by one. # switch $sym { p - P { if {$itk_option(-format) == "civilian"} { $itk_component(time) delete 9 10 $itk_component(time) insert 9 P _setField hour } } a - A { if {$itk_option(-format) == "civilian"} { $itk_component(time) delete 9 10 $itk_component(time) insert 9 A _setField hour } } plus - Up { if {$_cfield == "ampm"} { _toggleAmPm } else { set newclicks [::clock scan "$prevtime 1 $_cfield"] show [::clock format $newclicks -format $_formatString] } } minus - Down { # # Process the minus and the down arrow keys which decrement the value # of the field in which the cursor is currently positioned. # if {$_cfield == "ampm"} { _toggleAmPm } else { set newclicks [::clock scan "$prevtime 1 $_cfield ago"] show [::clock format $newclicks -format $_formatString] } } Tab { # # A tab key moves the "hour:minute:second" field forward by one unless # the current field is the second. In that case we'll let tab # do what is supposed to and pass the focus onto the next widget. # if {$state == 0} { if {($itk_option(-format) == "civilian" && $_cfield == $lastField)} { _setField hour return -code continue } _moveField forward # # A ctrl-tab key moves the hour:minute:second field backwards by one # unless the current field is the hour. In that case we'll let # tab take the focus to a previous widget. # } elseif {$state == 4} { if {$_cfield == "hour"} { _setField hour return -code continue } _moveField backward } } Right { # # A right arrow key moves the insert cursor to the right one. # $_forward } Left - BackSpace - Delete { # # A left arrow, backspace, or delete key moves the insert cursor # to the left one. This is what you expect for the left arrow # and since the whole widget always operates in overstrike mode, # it makes the most sense for backspace and delete to do the same. # $_backward } Return { # # A Return key invokes the optionally specified command option. # uplevel #0 $itk_option(-command) } default { } } return -code break } # ------------------------------------------------------------------ # PROTECTED METHOD: _toggleAmPm # # Internal method which toggles the displayed time # between "AM" and "PM" when format is "civilian". # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_toggleAmPm {} { set firstChar [string index $_timeVar 9] $itk_component(time) delete 9 10 $itk_component(time) insert 9 [expr {($firstChar == "A") ? "P" : "A"}] $itk_component(time) icursor 9 set _timeVar [$itk_component(time) get] } # ------------------------------------------------------------------ # PROTECTED METHOD: _setField field # # Adjusts the current field to be that of the argument, setting the # insert cursor appropriately. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_setField {field} { # Move the position of the cursor to the first character of the # field given by the argument: # # Field First Character Index # ----- --------------------- # hour 0 # minute 3 # second 6 # ampm 9 # switch $field { hour { $itk_component(time) icursor 0 } minute { $itk_component(time) icursor 3 } second { $itk_component(time) icursor 6 } ampm { if {$itk_option(-format) == "military"} { error "bad field: \"$field\", must be hour, minute or second" } $itk_component(time) icursor 9 } default { if {$itk_option(-format) == "military"} { error "bad field: \"$field\", must be hour, minute or second" } else { error "bad field: \"$field\", must be hour, minute, second or ampm" } } } set _cfield $field return $_cfield } # ------------------------------------------------------------------ # PROTECTED METHOD: _moveField # # Moves the cursor one field forward or backward. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_moveField {direction} { # Since the value "_fields" list variable is always either value: # military => {hour minute second} # civilian => {hour minute second ampm} # # the index of the previous or next field index can be determined # by subtracting or adding 1 to current the index, respectively. # set index [lsearch $_fields $_cfield] expr {($direction == "forward") ? [incr index] : [incr index -1]} if {$index == $_numFields} { set index 0 } elseif {$index < 0} { set index [expr {$_numFields-1}] } _setField [lindex $_fields $index] } # ------------------------------------------------------------------ # PROTECTED METHOD: _whichField # # Returns the current field that the cursor is positioned within. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_whichField {} { # Return the current field based on the position of the cursor. # # Field Index # ----- ----- # hour 0,1 # minute 3,4 # second 6,7 # ampm 9,10 # set icursor [$itk_component(time) index insert] switch $icursor { 0 - 1 { set _cfield hour } 3 - 4 { set _cfield minute } 6 - 7 { set _cfield second } 9 - 10 { set _cfield ampm } } return $_cfield } # ------------------------------------------------------------------ # PROTECTED METHOD: _forwardCivilian # # Internal method which moves the cursor forward by one character # jumping over the slashes and wrapping. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_forwardCivilian {} { # # If the insertion cursor is at the second digit # of either the hour, minute or second field, then # move the cursor to the first digit of the right-most field. # # else move the insertion cursor right one character # set icursor [$itk_component(time) index insert] switch $icursor { 1 { _setField minute } 4 { _setField second } 7 { _setField ampm } 9 - 10 { _setField hour } default { $itk_component(time) icursor [expr {$icursor+1}] } } } # ------------------------------------------------------------------ # PROTECTED METHOD: _forwardMilitary # # Internal method which moves the cursor forward by one character # jumping over the slashes and wrapping. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_forwardMilitary {} { # # If the insertion cursor is at the second digit of either # the hour, minute or second field, then move the cursor to # the first digit of the right-most field. # # else move the insertion cursor right one character # set icursor [$itk_component(time) index insert] switch $icursor { 1 { _setField minute } 4 { _setField second } 7 { _setField hour } default { $itk_component(time) icursor [expr {$icursor+1}] } } } # ------------------------------------------------------------------ # PROTECTED METHOD: _backwardCivilian # # Internal method which moves the cursor backward by one character # jumping over the ":" and wrapping. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_backwardCivilian {} { # # If the insertion cursor is at the first character # of either the minute or second field or at the ampm # field, then move the cursor to the second character # of the left-most field. # # else if the insertion cursor is at the first digit of the # hour field, then move the cursor to the first character # of the ampm field. # # else move the insertion cursor left one character # set icursor [$itk_component(time) index insert] switch $icursor { 9 { _setField second $itk_component(time) icursor 7 } 6 { _setField minute $itk_component(time) icursor 4 } 3 { _setField hour $itk_component(time) icursor 1 } 0 { _setField ampm $itk_component(time) icursor 9 } default { $itk_component(time) icursor [expr {$icursor-1}] } } } # ------------------------------------------------------------------ # PROTECTED METHOD: _backwardMilitary # # Internal method which moves the cursor backward by one character # jumping over the slashes and wrapping. # ------------------------------------------------------------------ itcl::body iwidgets::Timefield::_backwardMilitary {} { # # If the insertion cursor is at the first digit of either # the minute or second field, then move the cursor to the # second character of the left-most field. # # else if the insertion cursor is at the first digit of the # hour field, then move the cursor to the second digit # of the second field. # # else move the insertion cursor left one character # set icursor [$itk_component(time) index insert] switch $icursor { 6 { _setField minute $itk_component(time) icursor 4 } 3 { _setField hour $itk_component(time) icursor 1 } 0 { _setField second $itk_component(time) icursor 7 } default { $itk_component(time) icursor [expr {$icursor-1}] } } } iwidgets-4.1.1/generic/extbutton.itk0000644003604700454610000003522207334044000016106 0ustar dgp771div#------------------------------------------------------------------------------- # Extbutton #------------------------------------------------------------------------------- # This [incr Widget] is pretty simple - it just extends the behavior of # the Tk button by allowing the user to add a bitmap or an image, which # can be placed at various locations relative to the text via the -imagepos # configuration option. # #------------------------------------------------------------------------------- # IMPORTANT NOTE: This [incr Widget] will only work with Tk 8.4 or later. # #------------------------------------------------------------------------------- # AUTHOR: Chad Smith E-mail: csmith@adc.com, itclguy@yahoo.com #------------------------------------------------------------------------------- # Permission to use, copy, modify, distribute, and license this software # and its documentation for any purpose is hereby granted as long as this # comment block remains intact. #------------------------------------------------------------------------------- # # Default resources # option add *Extbutton.borderwidth 2 widgetDefault option add *Extbutton.relief raised widgetDefault # # Usual options # itk::usual Extbutton { keep -cursor -font } itcl::class iwidgets::Extbutton { inherit itk::Widget constructor {args} {} itk_option define -activebackground activeBackground Foreground #ececec itk_option define -bd borderwidth BorderWidth 2 itk_option define -bitmap bitmap Bitmap {} itk_option define -command command Command {} itk_option define -defaultring defaultring DefaultRing 0 itk_option define -defaultringpad defaultringpad Pad 4 itk_option define -image image Image {} itk_option define -imagepos imagePos Position w itk_option define -relief relief Relief raised itk_option define -state state State normal itk_option define -text text Text {} public method invoke {} {eval $itk_option(-command)} public method flash {} private method changeColor {event_} private method sink {} private method raise {} {configure -relief $_oldValues(-relief)} private variable _oldValues } # # Provide the usual lowercase access command. # proc iwidgets::extbutton {path_ args} { uplevel iwidgets::Extbutton $path_ $args } #------------------------------------------------------------------------------- # OPTION: -bd # # DESCRIPTION: This isn't a new option. Similar to -image, we just need to # repack the frame when the borderwidth changes. This option is kept by # the private reliefframe component. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::bd { pack $itk_component(frame) -padx 4 -pady 4 } #------------------------------------------------------------------------------- # OPTION: -bitmap # # DESCRIPTION: This isn't a new option - we just need to reset the -image option # so that the user can toggle back and forth between images and bitmaps. # Otherwise, the image will take precedence and the user will be unable to # change to a bitmap without manually setting the label component's -image to # an empty string. This option is kept by the image component. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::bitmap { if {$itk_option(-bitmap) == ""} { return } if {$itk_option(-image) != ""} { configure -image {} } pack $itk_component(frame) -padx 4 -pady 4 } #------------------------------------------------------------------------------- # OPTION: -command # # DESCRIPTION: Invoke the given command to simulate the Tk button's -command # option. The command is invoked on events only or by # direct calls to the public invoke() method. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::command { if {$itk_option(-command) == ""} { return } # Only create the tag binding if the button is operable. if {$itk_option(-state) == "normal"} { bind $this-commandtag [itcl::code $this invoke] } # Associate the tag with each component if it's not already done. if {[lsearch [bindtags $itk_interior] $this-commandtag] == -1} { foreach component [component] { bindtags [component $component] \ [linsert [bindtags [component $component]] end $this-commandtag] } } } #------------------------------------------------------------------------------- # OPTION: -defaultring # # DESCRIPTION: Controls display of the sunken frame surrounding the button. # This option simulates the pushbutton iwidget -defaultring option. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::defaultring { switch -- $itk_option(-defaultring) { 1 {set ring 1} 0 {set ring 0} default { error "Invalid option for -defaultring: \"$itk_option(-defaultring)\". \ Should be 1 or 0." } } if ($ring) { $itk_component(ring) configure -borderwidth 2 pack $itk_component(reliefframe) -padx $itk_option(-defaultringpad) \ -pady $itk_option(-defaultringpad) } else { $itk_component(ring) configure -borderwidth 0 pack $itk_component(reliefframe) -padx 0 -pady 0 } } #------------------------------------------------------------------------------- # OPTION: -defaultringpad # # DESCRIPTION: The pad distance between the ring and the button. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::defaultringpad { # Must be an integer. if ![string is integer $itk_option(-defaultringpad)] { error "Invalid value specified for -defaultringpad:\ \"$itk_option(-defaultringpad)\". Must be an integer." } # Let's go ahead and make the maximum padding 20 pixels. Surely no one # will want more than that. if {$itk_option(-defaultringpad) < 0 || $itk_option(-defaultringpad) > 20} { error "Value for -defaultringpad must be between 0 and 20." } # If the ring is displayed, repack it according to the new padding amount. if {$itk_option(-defaultring)} { pack $itk_component(reliefframe) -padx $itk_option(-defaultringpad) \ -pady $itk_option(-defaultringpad) } } #------------------------------------------------------------------------------- # OPTION: -image # # DESCRIPTION: This isn't a new option - we just need to repack the frame after # the image is changed in case the size is different than the previous one. # This option is kept by the image component. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::image { pack $itk_component(frame) -padx 4 -pady 4 } #------------------------------------------------------------------------------- # OPTION: -imagepos # # DESCRIPTION: Allows the user to move the image to different locations areound # the text. Valid options are n, nw, ne, s, sw, se e, en, es, w, wn or ws. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::imagepos { switch -- $itk_option(-imagepos) { n {set side top; set anchor center} ne {set side top; set anchor e} nw {set side top; set anchor w} s {set side bottom; set anchor center} se {set side bottom; set anchor e} sw {set side bottom; set anchor w} w {set side left; set anchor center} wn {set side left; set anchor n} ws {set side left; set anchor s} e {set side right; set anchor center} en {set side right; set anchor n} es {set side right; set anchor s} default { error "Invalid option: \"$itk_option(-imagepos)\". \ Must be n, nw, ne, s, sw, se e, en, es, w, wn or ws." } } pack $itk_component(image) -side $side -anchor $anchor pack $itk_component(frame) -padx 4 -pady 4 } #------------------------------------------------------------------------------- # OPTION: -relief # # DESCRIPTION: Move the frame component according to the relief to simulate # the text in a Tk button when its relief is changed. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::relief { update idletasks switch -- $itk_option(-relief) { flat - ridge - groove { place $itk_component(frame) -x 5 -y 5 } raised { place $itk_component(frame) -x 4 -y 4 } sunken { place $itk_component(frame) -x 6 -y 6 } default { error "Invalid option: \"$itk_option(-relief)\". \ Must be flat, ridge, groove, raised, or sunken." } } } #------------------------------------------------------------------------------- # OPTION: -state # # DESCRIPTION: Simulate the button's -state option. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::state { switch -- $itk_option(-state) { disabled { bind $itk_interior { } bind $itk_interior { } bind $this-sunkentag <1> { } bind $this-raisedtag { } bind $this-commandtag { } set _oldValues(-fg) [cget -foreground] set _oldValues(-cursor) [cget -cursor] configure -foreground $itk_option(-disabledforeground) configure -cursor "X_cursor red black" } normal { bind $itk_interior [itcl::code $this changeColor enter] bind $itk_interior [itcl::code $this changeColor leave] bind $this-sunkentag <1> [itcl::code $this sink] bind $this-raisedtag [itcl::code $this raise] bind $this-commandtag [itcl::code $this invoke] configure -foreground $_oldValues(-fg) configure -cursor $_oldValues(-cursor) } default { error "Bad option for -state: \"$itk_option(-state)\". Should be\ normal or disabled." } } } #------------------------------------------------------------------------------- # OPTION: -text # # DESCRIPTION: This isn't a new option. Similar to -image, we just need to # repack the frame when the text changes. #------------------------------------------------------------------------------- itcl::configbody iwidgets::Extbutton::text { pack $itk_component(frame) -padx 4 -pady 4 } #------------------------------------------------------------------------------- # CONSTRUCTOR #------------------------------------------------------------------------------- itcl::body iwidgets::Extbutton::constructor {args} { # Extbutton will not work with versions of Tk less than 8.4 (the # -activeforeground option was added to the Tk label widget in 8.4, for # example). So disallow its use unless the right wish is being used. if {$::tk_version < 8.4} { error "The extbutton \[incr Widget\] can only be used with versions of\ Tk greater than 8.3.\nYou're currently using version $::tk_version." } # This frame is optionally displayed as a "default ring" around the button. itk_component add ring { frame $itk_interior.ring -relief sunken } { rename -background -ringbackground ringBackground Background } # Add an outer frame for the widget's relief. Ideally we could just keep # the hull's -relief, but it's too tricky to handle relief changes. itk_component add -private reliefframe { frame $itk_component(ring).f } { rename -borderwidth -bd borderwidth BorderWidth keep -relief usual } # This frame contains the image and text. It will be moved slightly to # simulate the text in a Tk button when the button is depressed/raised. itk_component add frame { frame $itk_component(reliefframe).f -borderwidth 0 } itk_component add image { label $itk_component(frame).img -borderwidth 0 } { keep -bitmap -background -image rename -foreground -bitmapforeground foreground Foreground } itk_component add label { label $itk_component(frame).txt -borderwidth 0 } { keep -activeforeground -background -disabledforeground keep -font -foreground -justify -text } pack $itk_component(image) $itk_component(label) -side left -padx 6 -pady 4 pack $itk_component(frame) -padx 4 -pady 4 pack $itk_component(reliefframe) -fill both pack $itk_component(ring) -fill both # Create a couple of binding tags for handling relief changes. Then # add these tags to each component. foreach component [component] { bindtags [component $component] \ [linsert [bindtags [component $component]] end $this-sunkentag] bindtags [component $component] \ [linsert [bindtags [component $component]] end $this-raisedtag] } set _oldValues(-fg) [cget -foreground] set _oldValues(-cursor) [cget -cursor] eval itk_initialize $args } #------------------------------------------------------------------------------- # METHOD: flash # # ACCESS: public # # DESCRIPTION: Simulate the Tk button flash command. # # ARGUMENTS: none #------------------------------------------------------------------------------- itcl::body iwidgets::Extbutton::flash {} { set oldbg [cget -background] config -background $itk_option(-activebackground) update idletasks after 50; config -background $oldbg; update idletasks after 50; config -background $itk_option(-activebackground); update idletasks after 50; config -background $oldbg } #------------------------------------------------------------------------------- # METHOD: changeColor # # ACCESS: private # # DESCRIPTION: This method is invoked by and events to change # the background and foreground colors of the widget. # # ARGUMENTS: event_ --> either "enter" or "leave" #------------------------------------------------------------------------------- itcl::body iwidgets::Extbutton::changeColor {event_} { switch -- $event_ { enter { set _oldValues(-bg) [cget -background] set _oldValues(-fg) [cget -foreground] configure -background $itk_option(-activebackground) configure -foreground $itk_option(-activeforeground) } leave { configure -background $_oldValues(-bg) configure -foreground $_oldValues(-fg) } } } #------------------------------------------------------------------------------- # METHOD: sink # # ACCESS: private # # DESCRIPTION: This method is invoked on <1> mouse events. It saves the # current relief for later restoral and configures the relief to sunken if # it isn't already sunken. # # ARGUMENTS: none #------------------------------------------------------------------------------- itcl::body iwidgets::Extbutton::sink {} { set _oldValues(-relief) [cget -relief] if {$_oldValues(-relief) == "sunken"} { return } configure -relief sunken } iwidgets-4.1.1/generic/notebook.itk0000644003604700454610000007376007336540173015721 0ustar dgp771div# # Notebook Widget # ---------------------------------------------------------------------- # The Notebook command creates a new window (given by the pathName # argument) and makes it into a Notebook widget. Additional options, # described above may be specified on the command line or in the # option database to configure aspects of the Notebook such as its # colors, font, and text. The Notebook command returns its pathName # argument. At the time this command is invoked, there must not exist # a window named pathName, but path Name's parent must exist. # # A Notebook is a widget that contains a set of pages. It displays one # page from the set as the selected page. When a page is selected, the # page's contents are displayed in the page area. When first created a # Notebook has no pages. Pages may be added or deleted using widget commands # described below. # # A special option may be provided to the Notebook. The -auto option # specifies whether the Nptebook will automatically handle the unpacking # and packing of pages when pages are selected. A value of true signifies # that the notebook will automatically manage it. This is the default # value. A value of false signifies the notebook will not perform automatic # switching of pages. # # WISH LIST: # This section lists possible future enhancements. # # ---------------------------------------------------------------------- # AUTHOR: Bill W. Scott EMAIL: bscott@spd.dsccc.com # # @(#) $Id: notebook.itk,v 1.4 2001/08/15 18:33:31 smithc Exp $ # ---------------------------------------------------------------------- # Copyright (c) 1995 DSC Technologies Corporation # ====================================================================== # Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission. # # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON- # INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE # AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # ====================================================================== # # Default resources. # option add *Notebook.background #d9d9d9 widgetDefault option add *Notebook.auto true widgetDefault # # Usual options. # itk::usual Notebook { keep -background -cursor } # ------------------------------------------------------------------ # NOTEBOOK # ------------------------------------------------------------------ itcl::class iwidgets::Notebook { inherit itk::Widget constructor {args} {} itk_option define -background background Background #d9d9d9 itk_option define -auto auto Auto true itk_option define -scrollcommand scrollCommand ScrollCommand {} public method add { args } public method childsite { args } public method delete { args } public method index { args } public method insert { args } public method prev { } public method next { } public method pageconfigure { args } public method pagecget { index option } public method select { index } public method view { args } private method _childSites { } private method _scrollCommand { } private method _index { pathList index select} private method _createPage { args } private method _deletePages { fromPage toPage } private method _configurePages { args } private method _tabCommand { } private variable _currPage -1 ;# numerical index of current page selected private variable _pages {} ;# list of Page components private variable _uniqueID 0 ;# one-up number for unique page numbering } # # Provide a lowercase access method for the Notebook class # proc ::iwidgets::notebook {pathName args} { uplevel ::iwidgets::Notebook $pathName $args } # ------------------------------------------------------------------ # CONSTRUCTOR # ------------------------------------------------------------------ itcl::body iwidgets::Notebook::constructor {args} { # # Create the outermost frame to maintain geometry. # itk_component add cs { frame $itk_interior.cs } { keep -cursor -background -width -height } pack $itk_component(cs) -fill both -expand yes pack propagate $itk_component(cs) no eval itk_initialize $args # force bg of all pages to reflect Notebook's background. _configurePages -background $itk_option(-background) } # ------------------------------------------------------------------ # OPTIONS # ------------------------------------------------------------------ # ------------------------------------------------------------------ # OPTION -background # # Sets the bg color of all the pages in the Notebook. # ------------------------------------------------------------------ itcl::configbody iwidgets::Notebook::background { if {$itk_option(-background) != {}} { _configurePages -background $itk_option(-background) } } # ------------------------------------------------------------------ # OPTION -auto # # Determines whether pages are automatically unpacked and # packed when pages get selected. # ------------------------------------------------------------------ itcl::configbody iwidgets::Notebook::auto { if {$itk_option(-auto) != {}} { } } # ------------------------------------------------------------------ # OPTION -scrollcommand # # Command string to be invoked when the notebook # has any changes to its current page, or number of pages. # # typically for scrollbars. # ------------------------------------------------------------------ itcl::configbody iwidgets::Notebook::scrollcommand { if {$itk_option(-scrollcommand) != {}} { _scrollCommand } } # ------------------------------------------------------------------ # METHOD: add add ?