aboutsummaryrefslogtreecommitdiff
path: root/demos/allOptions.tcl
blob: 46b60c6f67dd07943b8e98dbe684c93085647110 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# these simple samples have been developped by C. Mertz mertz@cena.fr in perl
# tcl version by Jean-Paul Imbert imbert@cena.fr

if {![info exists zincDemo]} {
    error "This script should be run from the zinc-widget demo."
}

namespace eval allOptions {
    variable w .allOptions
    catch {destroy $w}
    toplevel $w
    wm title $w "Zinc All Option Demonstration"
    wm iconname $w "All options"

    frame $w.buttons
    pack $w.buttons -side bottom -fill x -pady 2m
    button $w.buttons.dismiss -text Dismiss -command "destroy $w"
    button $w.buttons.code -text "See Code" -command "showCode $w"
    pack $w.buttons.dismiss $w.buttons.code -side left -expand 1

    # The explanation displayed when running this demo
    label $w.label -justify left -text {Click on one of the following
	buttons to get a list of Item
	attributes (or zinc options)
	with their types.}

    pack $w.label -padx 10 -pady 10


    # Creating the zinc widget
    zinc $w.zinc -width 1 -height 1 -borderwidth 0 -relief sunken
    pack $w.zinc

    # Creating an instance of every item type

    variable itemTypes
    # These Items have fields! So the number of fields must be given at creation time
    foreach type {tabular track waypoint} {
	set itemTypes($type)  [$w.zinc add $type 1 0]
    }

    # These items needs no specific initial values
    foreach type {group icon map reticle text window} {
	set itemTypes($type) [$w.zinc add $type 1]
    }

    # These items needs some coordinates at creation time
    # However curves usually needs more than 2 points.
    foreach type {arc curve rectangle} {
	set itemTypes($type) [$w.zinc add $type 1 {0 0 1 1}]
    }

    # Triangles item needs at least 3 points for the coordinates 
    foreach type {triangles} {
	set itemTypes($type) [$w.zinc add $type 1 {0 0 1 1 2 2}]
    }

    proc showAllOptions { w type} {
	variable itemTypes

	if [winfo exists .tl] {destroy .tl}
	toplevel .tl
	if {[string compare $type zinc]==0} {
	    set options  [$w.zinc configure]
	    set typeopt optionClass
	    set readopt defaultValue
	    set readoff 3
	    set  title  {All options of zinc widget}
	} else {
	    set options  [$w.zinc itemconfigure $itemTypes($type)];
	    set title  "All attributes of an $type item"
	    set typeopt Type
	    set readopt ReadOnly
	    set readoff 2
	}

	wm title .tl $title

	frame .tl.f1
	set bgcolor ivory

	label .tl.f1.opt -text Option -background $bgcolor -relief ridge -width 20
	label .tl.f1.typ -text $typeopt -background $bgcolor -relief ridge -width 20
	label .tl.f1.rd -text $readopt  -background $bgcolor -relief ridge -width 21

	pack .tl.f1.opt .tl.f1.typ  .tl.f1.rd -side left
	set nbelem [llength $options]
	frame .tl.f2
	listbox .tl.f2.l1 -width 20 -height $nbelem
	listbox .tl.f2.l2 -width 20 -height $nbelem
	listbox .tl.f2.l3 -width 20 -height $nbelem
	pack .tl.f2.l1 .tl.f2.l2 .tl.f2.l3 -side left
	pack .tl.f1 .tl.f2 -side top -anchor nw

	# Remplissage des list box
	foreach elem $options {
	    .tl.f2.l1 insert end [lindex $elem 0]
	    .tl.f2.l2 insert end [lindex $elem 1]
	    .tl.f2.l3 insert end [lindex $elem $readoff]
	}
    }

    pack [frame $w.col]

    variable width 0
    foreach type [lsort [array names itemTypes]] {
	if {[string length $type] > $width} {
	    set width  [string length $type]
	}
    }

    foreach type [lsort [array names itemTypes]] {
	button $w.col.$type -text "$type" -width $width -command "::allOptions::showAllOptions $w $type"
	pack $w.col.$type -pady 4

    }

    button $w.col.b -text "zinc widget options" -command "::allOptions::showAllOptions $w zinc"
    pack $w.col.b -pady 4
}