Spaces:
Running
Running
File size: 4,765 Bytes
ba2f5d6 |
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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# -*-mode: tcl; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
# $Id: ArrowBtn.tcl,v 1.3 2001/12/09 05:31:07 idiscovery Exp $
#
# Tix Demostration Program
#
# This sample program is structured in such a way so that it can be
# executed from the Tix demo program "widget": it must have a
# procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone
# program using tixwish.
# This file demonstrates how to write a new Tix widget class.
#
# ArrowBtn.tcl --
#
# Arrow Button: a sample Tix widget.
#
set arrow(n) [image create bitmap -data {
#define up_width 15
#define up_height 15
static unsigned char up_bits[] = {
0x80, 0x00, 0xc0, 0x01, 0xe0, 0x03, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f,
0xfe, 0x3f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00};
}]
set arrow(w) [image create bitmap -data {
#define left_width 15
#define left_height 15
static unsigned char left_bits[] = {
0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x70, 0x00, 0x78, 0x00, 0x7c, 0x00,
0xfe, 0x3f, 0xff, 0x3f, 0xfe, 0x3f, 0x7c, 0x00, 0x78, 0x00, 0x70, 0x00,
0x60, 0x00, 0x40, 0x00, 0x00, 0x00};
}]
set arrow(s) [image create bitmap -data {
#define down_width 15
#define down_height 15
static unsigned char down_bits[] = {
0x00, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
0xc0, 0x01, 0xc0, 0x01, 0xfe, 0x3f, 0xfc, 0x1f, 0xf8, 0x0f, 0xf0, 0x07,
0xe0, 0x03, 0xc0, 0x01, 0x80, 0x00};
}]
set arrow(e) [image create bitmap -data {
#define right_width 15
#define right_height 15
static unsigned char right_bits[] = {
0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f,
0xfe, 0x3f, 0xfe, 0x7f, 0xfe, 0x3f, 0x00, 0x1f, 0x00, 0x0f, 0x00, 0x07,
0x00, 0x03, 0x00, 0x01, 0x00, 0x00};
}]
tixWidgetClass tixArrowButton {
-classname TixArrowButton
-superclass tixPrimitive
-method {
flash invoke invert
}
-flag {
-direction -state
}
-configspec {
{-direction direction Direction e tixArrowButton:CheckDirection}
{-state state State normal}
}
-alias {
{-dir -direction}
}
}
proc tixArrowButton:InitWidgetRec {w} {
upvar #0 $w data
tixChainMethod $w InitWidgetRec
set data(count) 0
}
proc tixArrowButton:ConstructWidget {w} {
upvar #0 $w data
global arrow
tixChainMethod $w ConstructWidget
set data(w:button) [button $w.button -image $arrow($data(-direction))]
pack $data(w:button) -expand yes -fill both
}
proc tixArrowButton:SetBindings {w} {
upvar #0 $w data
tixChainMethod $w SetBindings
bind $data(w:button) <1> "tixArrowButton:IncrCount $w"
}
proc tixArrowButton:IncrCount {w} {
upvar #0 $w data
incr data(count)
}
proc tixArrowButton:CheckDirection {dir} {
if {[lsearch {n w s e} $dir] != -1} {
return $dir
} else {
error "wrong direction value \"$dir\""
}
}
proc tixArrowButton:flash {w} {
upvar #0 $w data
$data(w:button) flash
}
proc tixArrowButton:invoke {w} {
upvar #0 $w data
$data(w:button) invoke
}
proc tixArrowButton:invert {w} {
upvar #0 $w data
set curDirection $data(-direction)
case $curDirection {
n {
set newDirection s
}
s {
set newDirection n
}
e {
set newDirection w
}
w {
set newDirection e
}
}
$w config -direction $newDirection
}
proc tixArrowButton:config-direction {w value} {
upvar #0 $w data
global arrow
$data(w:button) configure -image $arrow($value)
}
proc tixArrowButton:config-state {w value} {
upvar #0 $w data
global arrow
$data(w:button) configure -state $value
}
#----------------------------------------------------------------------
#
# Instantiate several widgets of the tixArrowButton class
#
#----------------------------------------------------------------------
proc RunSample {w} {
set top [frame $w.top -border 1 -relief raised]
tixArrowButton $top.a -dir w
tixArrowButton $top.b -dir e
pack $top.a $top.b -side left -expand yes -fill both -padx 50 -pady 10
tixButtonBox $w.box -orientation horizontal
$w.box add ok -text Ok -underline 0 -command "destroy $w" \
-width 6
pack $w.box -side bottom -fill x
pack $w.top -side top -fill both -expand yes
}
# This "if" statement makes it possible to run this script file inside or
# outside of the main demo program "widget".
#
if {![info exists tix_demo_running]} {
wm withdraw .
set w .demo
toplevel $w; wm transient $w ""
RunSample $w
bind $w <Destroy> "exit"
}
|