Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v9 / lib / tk8.4 / demos / widget
CommitLineData
920dae64
AT
1#!/bin/sh
2# the next line restarts using wish \
3exec wish8.4 "$0" "$@"
4
5# widget --
6# This script demonstrates the various widgets provided by Tk,
7# along with many of the features of the Tk toolkit. This file
8# only contains code to generate the main window for the
9# application, which invokes individual demonstrations. The
10# code for the actual demonstrations is contained in separate
11# ".tcl" files is this directory, which are sourced by this script
12# as needed.
13#
14# RCS: @(#) $Id: widget,v 1.9.2.1 2003/09/25 05:37:48 das Exp $
15
16eval destroy [winfo child .]
17wm title . "Widget Demonstration"
18if {[tk windowingsystem] eq "x11"} {
19 # This won't work everywhere, but there's no other way in core Tk
20 # at the moment to display a coloured icon.
21 image create photo TclPowered \
22 -file [file join $tk_library images logo64.gif]
23 wm iconwindow . [toplevel ._iconWindow]
24 pack [label ._iconWindow.i -image TclPowered]
25 wm iconname . "tkWidgetDemo"
26}
27
28array set widgetFont {
29 main {Helvetica 12}
30 bold {Helvetica 12 bold}
31 title {Helvetica 18 bold}
32 status {Helvetica 10}
33 vars {Helvetica 14}
34}
35
36set widgetDemo 1
37set font $widgetFont(main)
38
39#----------------------------------------------------------------
40# The code below create the main window, consisting of a menu bar
41# and a text widget that explains how to use the program, plus lists
42# all of the demos as hypertext items.
43#----------------------------------------------------------------
44
45menu .menuBar -tearoff 0
46.menuBar add cascade -menu .menuBar.file -label "File" -underline 0
47menu .menuBar.file -tearoff 0
48
49# On the Mac use the specia .apple menu for the about item
50if {[tk windowingsystem] eq "classic" || [tk windowingsystem] eq "aqua"} {
51 .menuBar add cascade -menu .menuBar.apple
52 menu .menuBar.apple -tearoff 0
53 .menuBar.apple add command -label "About..." -command "aboutBox"
54} else {
55 .menuBar.file add command -label "About..." -command "aboutBox" \
56 -underline 0 -accelerator "<F1>"
57 .menuBar.file add sep
58}
59
60.menuBar.file add command -label "Quit" -command "exit" -underline 0 \
61 -accelerator "Meta-Q"
62. configure -menu .menuBar
63bind . <F1> aboutBox
64
65frame .statusBar
66label .statusBar.lab -text " " -relief sunken -bd 1 \
67 -font $widgetFont(status) -anchor w
68label .statusBar.foo -width 8 -relief sunken -bd 1 \
69 -font $widgetFont(status) -anchor w
70pack .statusBar.lab -side left -padx 2 -expand yes -fill both
71pack .statusBar.foo -side left -padx 2
72pack .statusBar -side bottom -fill x -pady 2
73
74frame .textFrame
75scrollbar .s -orient vertical -command {.t yview} -highlightthickness 0 \
76 -takefocus 1
77pack .s -in .textFrame -side right -fill y
78text .t -yscrollcommand {.s set} -wrap word -width 70 -height 30 \
79 -font $widgetFont(main) -setgrid 1 -highlightthickness 0 \
80 -padx 4 -pady 2 -takefocus 0
81pack .t -in .textFrame -expand y -fill both -padx 1
82pack .textFrame -expand yes -fill both
83
84# Create a bunch of tags to use in the text widget, such as those for
85# section titles and demo descriptions. Also define the bindings for
86# tags.
87
88.t tag configure title -font $widgetFont(title)
89.t tag configure bold -font $widgetFont(bold)
90
91# We put some "space" characters to the left and right of each demo description
92# so that the descriptions are highlighted only when the mouse cursor
93# is right over them (but not when the cursor is to their left or right)
94#
95.t tag configure demospace -lmargin1 1c -lmargin2 1c
96
97
98if {[winfo depth .] == 1} {
99 .t tag configure demo -lmargin1 1c -lmargin2 1c \
100 -underline 1
101 .t tag configure visited -lmargin1 1c -lmargin2 1c \
102 -underline 1
103 .t tag configure hot -background black -foreground white
104} else {
105 .t tag configure demo -lmargin1 1c -lmargin2 1c \
106 -foreground blue -underline 1
107 .t tag configure visited -lmargin1 1c -lmargin2 1c \
108 -foreground #303080 -underline 1
109 .t tag configure hot -foreground red -underline 1
110}
111.t tag bind demo <ButtonRelease-1> {
112 invoke [.t index {@%x,%y}]
113}
114set lastLine ""
115.t tag bind demo <Enter> {
116 set lastLine [.t index {@%x,%y linestart}]
117 .t tag add hot "$lastLine +1 chars" "$lastLine lineend -1 chars"
118 .t config -cursor hand2
119 showStatus [.t index {@%x,%y}]
120}
121.t tag bind demo <Leave> {
122 .t tag remove hot 1.0 end
123 .t config -cursor xterm
124 .statusBar.lab config -text ""
125}
126.t tag bind demo <Motion> {
127 set newLine [.t index {@%x,%y linestart}]
128 if {[string compare $newLine $lastLine] != 0} {
129 .t tag remove hot 1.0 end
130 set lastLine $newLine
131
132 set tags [.t tag names {@%x,%y}]
133 set i [lsearch -glob $tags demo-*]
134 if {$i >= 0} {
135 .t tag add hot "$lastLine +1 chars" "$lastLine lineend -1 chars"
136 }
137 }
138 showStatus [.t index {@%x,%y}]
139}
140
141# Create the text for the text widget.
142
143proc addDemoSection {title demos} {
144 .t insert end "\n" {} $title title " \n " demospace
145 set num 0
146 foreach {name description} $demos {
147 .t insert end "[incr num]. $description." [list demo demo-$name]
148 .t insert end " \n " demospace
149 }
150}
151
152.t insert end "Tk Widget Demonstrations\n" title
153.t insert end "\nThis application provides a front end for several short\
154 scripts that demonstrate what you can do with Tk widgets. Each of\
155 the numbered lines below describes a demonstration; you can click\
156 on it to invoke the demonstration. Once the demonstration window\
157 appears, you can click the " {} "See Code" bold " button to see the\
158 Tcl/Tk code that created the demonstration. If you wish, you can\
159 edit the code and click the " {} "Rerun Demo" bold " button in the\
160 code window to reinvoke the demonstration with the modified code.\n"
161
162addDemoSection "Labels, buttons, checkbuttons, and radiobuttons" {
163 label "Labels (text and bitmaps)"
164 unicodeout "Labels and UNICODE text"
165 button "Buttons"
166 check "Check-buttons (select any of a group)"
167 radio "Radio-buttons (select one of a group)"
168 puzzle "A 15-puzzle game made out of buttons"
169 icon "Iconic buttons that use bitmaps"
170 image1 "Two labels displaying images"
171 image2 "A simple user interface for viewing images"
172 labelframe "Labelled frames"
173}
174addDemoSection "Listboxes" {
175 states "The 50 states"
176 colors "Colors: change the color scheme for the application"
177 sayings "A collection of famous and infamous sayings"
178}
179addDemoSection "Entries and Spin-boxes" {
180 entry1 "Entries without scrollbars"
181 entry2 "Entries with scrollbars"
182 entry3 "Validated entries and password fields"
183 spin "Spin-boxes"
184 form "Simple Rolodex-like form"
185}
186addDemoSection "Text" {
187 text "Basic editable text"
188 style "Text display styles"
189 bind "Hypertext (tag bindings)"
190 twind "A text widget with embedded windows"
191 search "A search tool built with a text widget"
192}
193addDemoSection "Canvases" {
194 items "The canvas item types"
195 plot "A simple 2-D plot"
196 ctext "Text items in canvases"
197 arrow "An editor for arrowheads on canvas lines"
198 ruler "A ruler with adjustable tab stops"
199 floor "A building floor plan"
200 cscroll "A simple scrollable canvas"
201}
202addDemoSection "Scales" {
203 hscale "Horizontal scale"
204 vscale "Vertical scale"
205}
206addDemoSection "Paned Windows" {
207 paned1 "Horizontal paned window"
208 paned2 "Vertical paned window"
209}
210addDemoSection "Menus" {
211 menu "Menus and cascades (sub-menus)"
212 menubu "Menu-buttons"
213}
214addDemoSection "Common Dialogs" {
215 msgbox "Message boxes"
216 filebox "File selection dialog"
217 clrpick "Color picker"
218}
219addDemoSection "Miscellaneous" {
220 bitmap "The built-in bitmaps"
221 dialog1 "A dialog box with a local grab"
222 dialog2 "A dialog box with a global grab"
223}
224
225.t configure -state disabled
226focus .s
227
228# positionWindow --
229# This procedure is invoked by most of the demos to position a
230# new demo window.
231#
232# Arguments:
233# w - The name of the window to position.
234
235proc positionWindow w {
236 wm geometry $w +300+300
237}
238
239# showVars --
240# Displays the values of one or more variables in a window, and
241# updates the display whenever any of the variables changes.
242#
243# Arguments:
244# w - Name of new window to create for display.
245# args - Any number of names of variables.
246
247proc showVars {w args} {
248 global widgetFont
249 catch {destroy $w}
250 toplevel $w
251 wm title $w "Variable values"
252 label $w.title -text "Variable values:" -width 20 -anchor center \
253 -font $widgetFont(vars)
254 pack $w.title -side top -fill x
255 set len 1
256 foreach i $args {
257 if {[string length $i] > $len} {
258 set len [string length $i]
259 }
260 }
261 foreach i $args {
262 frame $w.$i
263 label $w.$i.name -text "$i: " -width [expr $len + 2] -anchor w
264 label $w.$i.value -textvar $i -anchor w
265 pack $w.$i.name -side left
266 pack $w.$i.value -side left -expand 1 -fill x
267 pack $w.$i -side top -anchor w -fill x
268 }
269 button $w.ok -text OK -command "destroy $w" -default active
270 bind $w <Return> "tkButtonInvoke $w.ok"
271 pack $w.ok -side bottom -pady 2
272}
273
274# invoke --
275# This procedure is called when the user clicks on a demo description.
276# It is responsible for invoking the demonstration.
277#
278# Arguments:
279# index - The index of the character that the user clicked on.
280
281proc invoke index {
282 global tk_library
283 set tags [.t tag names $index]
284 set i [lsearch -glob $tags demo-*]
285 if {$i < 0} {
286 return
287 }
288 set cursor [.t cget -cursor]
289 .t configure -cursor watch
290 update
291 set demo [string range [lindex $tags $i] 5 end]
292 uplevel [list source [file join $tk_library demos $demo.tcl]]
293 update
294 .t configure -cursor $cursor
295
296 .t tag add visited "$index linestart +1 chars" "$index lineend -1 chars"
297}
298
299# showStatus --
300#
301# Show the name of the demo program in the status bar. This procedure
302# is called when the user moves the cursor over a demo description.
303#
304proc showStatus index {
305 global tk_library
306 set tags [.t tag names $index]
307 set i [lsearch -glob $tags demo-*]
308 set cursor [.t cget -cursor]
309 if {$i < 0} {
310 .statusBar.lab config -text " "
311 set newcursor xterm
312 } else {
313 set demo [string range [lindex $tags $i] 5 end]
314 .statusBar.lab config -text "Run the \"$demo\" sample program"
315 set newcursor hand2
316 }
317 if [string compare $cursor $newcursor] {
318 .t config -cursor $newcursor
319 }
320}
321
322
323# showCode --
324# This procedure creates a toplevel window that displays the code for
325# a demonstration and allows it to be edited and reinvoked.
326#
327# Arguments:
328# w - The name of the demonstration's window, which can be
329# used to derive the name of the file containing its code.
330
331proc showCode w {
332 global tk_library
333 set file [string range $w 1 end].tcl
334 if ![winfo exists .code] {
335 toplevel .code
336 frame .code.buttons
337 pack .code.buttons -side bottom -fill x
338 button .code.buttons.dismiss -text Dismiss \
339 -default active -command "destroy .code"
340 button .code.buttons.rerun -text "Rerun Demo" -command {
341 eval [.code.text get 1.0 end]
342 }
343 pack .code.buttons.dismiss .code.buttons.rerun -side left \
344 -expand 1 -pady 2
345 frame .code.frame
346 pack .code.frame -expand yes -fill both -padx 1 -pady 1
347 text .code.text -height 40 -wrap word\
348 -xscrollcommand ".code.xscroll set" \
349 -yscrollcommand ".code.yscroll set" \
350 -setgrid 1 -highlightthickness 0 -pady 2 -padx 3
351 scrollbar .code.xscroll -command ".code.text xview" \
352 -highlightthickness 0 -orient horizontal
353 scrollbar .code.yscroll -command ".code.text yview" \
354 -highlightthickness 0 -orient vertical
355
356 grid .code.text -in .code.frame -padx 1 -pady 1 \
357 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky news
358 grid .code.yscroll -in .code.frame -padx 1 -pady 1 \
359 -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky news
360# grid .code.xscroll -in .code.frame -padx 1 -pady 1 \
361# -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news
362 grid rowconfig .code.frame 0 -weight 1 -minsize 0
363 grid columnconfig .code.frame 0 -weight 1 -minsize 0
364 } else {
365 wm deiconify .code
366 raise .code
367 }
368 wm title .code "Demo code: [file join $tk_library demos $file]"
369 wm iconname .code $file
370 set id [open [file join $tk_library demos $file]]
371 .code.text delete 1.0 end
372 .code.text insert 1.0 [read $id]
373 .code.text mark set insert 1.0
374 close $id
375}
376
377# aboutBox --
378#
379# Pops up a message box with an "about" message
380#
381proc aboutBox {} {
382 tk_messageBox -icon info -type ok -title "About Widget Demo" -message \
383"Tk widget demonstration
384
385Copyright (c) 1996-1997 Sun Microsystems, Inc.
386
387Copyright (c) 1997-2000 Ajuba Solutions, Inc.
388
389Copyright (c) 2001-2002 Donal K. Fellows"
390}
391
392# Local Variables:
393# mode: tcl
394# End: