Title

joptionbutton.tcl

Introduction

The joptionbutton.tcl library is distributed as part of the jstools package. It provides a button that pops up an option menu so your users can make a one­of­many choice. It's equivalent in functionality to a group of radio buttons, but a little easier to use and more sparing of screen real­estate.

This document describes joptionbutton.tcl version 4.0/4.0.

Usage

Accessing the Library

In order to use the joptionbutton.tcl library, it (and any other libraries it depends on) must be in your Tcl auto_path, described in tclvars(n). Information about how to arrange that, and other conventions common to the jstools libraries, is in the Usage section of The jstools Libraries.

Credits and Copyright

Author

Jay Sekora

js@calumet.org

http://shore.net/~js/

Copyright

The library is copyright © 1992-1995 by Jay Sekora, but may be freely redistributed under the conditions at the top of the file.

Overview

Procedure

j:option - create option button with associated menu

j:option:configure - set attributes of option button

j:option:popup - pop up option button's menu

j:alert

Usage

j:option w [options]

Argument

w is the name of the new option button to create

Options

-font font (default {})

-list list (default "(none)"; not really optional)

-width width (default 20)

-current current (default first element of list)

Example

toplevel .prefs

j:option .prefs.colour -list {red yellow blue} \

-current $PREFS(colour)

pack .prefs.colour

bind .prefs.ok {set PREFS(colour) [.prefs.colour get]}

Description

This procedure creates a new option button, w, with an associated menu, which can be posted by clicking on the button. An option button is useful for asking the user to select one option from a constrained set of choices. The menu will contain all the elements of list, and the button will be labelled with current. If current is not in list, it will be added to the beginning of list the first time the menu is brought up. Choosing another item from the menu will cause the button's text to change to that item, and cause the item to become the new current value of the option button. If font is specified and non­null, both the button and the menu will be displayed in that font. The menu will be width characters wide, and the button will also be width characters wide unless it is packed in such a way as to change its dimensions.

The current value of the button can be manipulated with the get and set widget commands, and the current values of the widget options can be changed or retrieved with the configure widget command.

Widget Commands

w get

This widget command returns the current value of the option button.

w set value

This widget command sets the current value of the option button.

w configure option [argument]

This widget command lets you retrieve (if argument is omitted) or set (if it is provided) the current value of any of the options, font, list, width, or current.

j:option:configure

Usage

j:option:configure w option [argument]

Arguments

w is the pathname of the option button to be configured

option is one of -font, -list, -current, or -width

argument, if specified, is the new value of option

Description

This procedure is used internally by j:option, and should not need to be called directly. It implements the configure widget command.

j:option:popup

Usage

j:option:popup w button

Arguments

w is the pathname of the frame to hold the popup menu

button is the pathname of the option button

Description

This procedure is used internally by j:option, and should not need to be called directly. It is invoked when an option button is clicked on. It creates a new frame w, packs a listbox in it to simulate a menu, positions it appropriately over the option button, and sets up mouse bindings letting the user select an item from the listbox. (The reason for using a listbox rather than a menu is that the width of a menu can't be set.)

Bugs and Misfeatures

If an option button is packed such that it's larger or smaller than its requested width (as specified by the -width option), its menu will be the wrong size.

Only one option at a time can be specified to j:option:configure, and hence to the configure widget command.

Future Directions

* I'm probably going to rewrite this to be more compatible with the Tk 4.0 tk_optionMenu procedure.