123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- # -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
- #
- # $Id: ChkList.tcl,v 1.6 2004/03/28 02:44:57 hobbs Exp $
- #
- # ChkList.tcl --
- #
- # This file implements the TixCheckList widget.
- #
- # Copyright (c) 1993-1999 Ioi Kim Lam.
- # Copyright (c) 2000-2001 Tix Project Group.
- # Copyright (c) 2004 ActiveState
- #
- # See the file "license.terms" for information on usage and redistribution
- # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- #
- tixWidgetClass tixCheckList {
- -classname TixCheckList
- -superclass tixTree
- -method {
- getselection getstatus setstatus
- }
- -flag {
- -radio
- }
- -configspec {
- {-radio radio Radio false tixVerifyBoolean}
- {-ignoreinvoke ignoreInvoke IgnoreInvoke true tixVerifyBoolean}
- }
- -static {
- -radio
- }
- -default {
- {.scrollbar auto}
- {.doubleClick false}
- {*Scrollbar.takeFocus 0}
- {*borderWidth 1}
- {*hlist.background #c3c3c3}
- {*hlist.drawBranch 1}
- {*hlist.height 10}
- {*hlist.highlightBackground #d9d9d9}
- {*hlist.indicator 1}
- {*hlist.indent 20}
- {*hlist.itemType imagetext}
- {*hlist.padX 3}
- {*hlist.padY 0}
- {*hlist.relief sunken}
- {*hlist.takeFocus 1}
- {*hlist.wideSelection 0}
- {*hlist.width 20}
- }
- }
- proc tixCheckList:InitWidgetRec {w} {
- upvar #0 $w data
- tixChainMethod $w InitWidgetRec
- if {$data(-radio)} {
- set data(selected) ""
- }
- }
- #----------------------------------------------------------------------
- #
- # Widget commands
- #
- #----------------------------------------------------------------------
- # Helper function for getselection
- #
- proc tixCheckList:GetSel {w var ent mode} {
- upvar #0 $w data
- upvar $var img
- set ents ""
- catch {
- if {[$data(w:hlist) entrycget $ent -bitmap] eq $img($mode)} {
- lappend ents $ent
- }
- }
- foreach child [$data(w:hlist) info children $ent] {
- set ents [concat $ents [tixCheckList:GetSel $w img $child $mode]]
- }
- return $ents
- }
- # Mode can be on, off, default
- #
- proc tixCheckList:getselection {w {mode on}} {
- upvar #0 $w data
- set img(on) [tix getbitmap ck_on]
- set img(off) [tix getbitmap ck_off]
- set img(default) [tix getbitmap ck_def]
- set ents ""
- foreach child [$data(w:hlist) info children] {
- set ents [concat $ents [tixCheckList:GetSel $w img $child $mode]]
- }
- return $ents
- }
- proc tixCheckList:getstatus {w ent} {
- upvar #0 $w data
- if {[$data(w:hlist) entrycget $ent -itemtype] eq "imagetext"} {
- set img(on) [tix getbitmap ck_on]
- set img(off) [tix getbitmap ck_off]
- set img(default) [tix getbitmap ck_def]
- set bitmap [$data(w:hlist) entrycget $ent -bitmap]
- if {$bitmap eq $img(on)} {
- set status on
- }
- if {$bitmap eq $img(off)} {
- set status off
- }
- if {$bitmap eq $img(default)} {
- set status default
- }
- }
- if {[info exists status]} {
- return $status
- } else {
- return "none"
- }
- }
- proc tixCheckList:setstatus {w ent {mode on}} {
- upvar #0 $w data
- if {$data(-radio)} {
- set status [tixCheckList:getstatus $w $ent]
- if {$status eq $mode} {
- return
- }
- if {$mode eq "on"} {
- if {$data(selected) != ""} {
- tixCheckList:Select $w $data(selected) off
- }
- set data(selected) $ent
- tixCheckList:Select $w $ent $mode
- } elseif {$mode eq "off"} {
- if {$data(selected) eq $ent} {
- return
- }
- tixCheckList:Select $w $ent $mode
- } else {
- tixCheckList:Select $w $ent $mode
- }
- } else {
- tixCheckList:Select $w $ent $mode
- }
- }
- proc tixCheckList:Select {w ent mode} {
- upvar #0 $w data
- if {[$data(w:hlist) entrycget $ent -itemtype] eq "imagetext"} {
- set img(on) ck_on
- set img(off) ck_off
- set img(default) ck_def
- if [catch {
- set bitmap [tix getbitmap $img($mode)]
- $data(w:hlist) entryconfig $ent -bitmap $bitmap
- }] {
- # must be the "none" mode
- #
- catch {
- $data(w:hlist) entryconfig $ent -bitmap ""
- }
- }
- }
- return $mode
- }
- proc tixCheckList:HandleCheck {w ent} {
- upvar #0 $w data
- if {[$data(w:hlist) entrycget $ent -itemtype] eq "imagetext"} {
- set img(on) [tix getbitmap ck_on]
- set img(off) [tix getbitmap ck_off]
- set img(default) [tix getbitmap ck_def]
- set curMode [tixCheckList:getstatus $w $ent]
- case $curMode {
- on {
- tixCheckList:setstatus $w $ent off
- }
- off {
- tixCheckList:setstatus $w $ent on
- }
- none {
- return
- }
- default {
- tixCheckList:setstatus $w $ent on
- }
- }
- }
- }
- proc tixCheckList:Command {w B} {
- upvar #0 $w data
- upvar $B bind
- set ent [tixEvent flag V]
- tixCheckList:HandleCheck $w $ent
- tixChainMethod $w Command $B
- }
- proc tixCheckList:BrowseCmd {w B} {
- upvar #0 $w data
- upvar $B bind
- set ent [tixEvent flag V]
- case [tixEvent type] {
- {<ButtonPress-1> <space>} {
- tixCheckList:HandleCheck $w $ent
- }
- }
- tixChainMethod $w BrowseCmd $B
- }
|