You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
4.7 KiB
Tcl
188 lines
4.7 KiB
Tcl
# -*-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"
|
|
}
|