home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Freeware 31 / FreelogHS31.iso / Texte / scribus / scribus-1.3.3.9-win32-install.exe / tcl / tix8.1 / ChkList.tcl < prev    next >
Text File  |  2001-12-08  |  5KB  |  239 lines

  1. # -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
  2. #
  3. #    $Id: ChkList.tcl,v 1.2.2.2 2001/12/09 02:54:02 idiscovery Exp $
  4. #
  5. # ChkList.tcl --
  6. #
  7. #    This file implements the TixCheckList widget.
  8. #
  9. # Copyright (c) 1993-1999 Ioi Kim Lam.
  10. # Copyright (c) 2000-2001 Tix Project Group.
  11. #
  12. # See the file "license.terms" for information on usage and redistribution
  13. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  14. #
  15.  
  16. tixWidgetClass tixCheckList {
  17.     -classname TixCheckList
  18.     -superclass tixTree
  19.     -method {
  20.     getselection getstatus setstatus
  21.     }
  22.     -flag {
  23.     -radio
  24.     }
  25.     -configspec {
  26.     {-radio radio Radio false tixVerifyBoolean}
  27.  
  28.     {-ignoreinvoke ignoreInvoke IgnoreInvoke true tixVerifyBoolean}
  29.     }
  30.     -static {
  31.     -radio
  32.     }
  33.     -default {
  34.     {.scrollbar            auto}
  35.     {.doubleClick            false}
  36.     {*Scrollbar.takeFocus           0}
  37.     {*borderWidth                   1}
  38.     {*hlist.background              #c3c3c3}
  39.     {*hlist.drawBranch              1}
  40.     {*hlist.height                  10}
  41.     {*hlist.highlightBackground      #d9d9d9}
  42.     {*hlist.indicator               1}
  43.     {*hlist.indent                  20}
  44.     {*hlist.itemType                imagetext}
  45.     {*hlist.padX                    3}
  46.     {*hlist.padY                    0}
  47.     {*hlist.relief                  sunken}
  48.     {*hlist.takeFocus               1}
  49.     {*hlist.wideSelection           0}
  50.     {*hlist.width                   20}
  51.     }
  52. }
  53.  
  54. proc tixCheckList:InitWidgetRec {w} {
  55.     upvar #0 $w data
  56.  
  57.     tixChainMethod $w InitWidgetRec
  58.  
  59.     if {$data(-radio)} {
  60.     set data(selected) ""
  61.     }
  62. }
  63.  
  64. #----------------------------------------------------------------------
  65. #
  66. #            Widget commands
  67. #
  68. #----------------------------------------------------------------------
  69.  
  70. # Helper function for getselection
  71. #
  72. proc tixCheckList:GetSel {w var ent mode} {
  73.     upvar #0 $w data
  74.     upvar $var img
  75.  
  76.     set ents ""
  77.  
  78.     catch {
  79.     if {![string comp [$data(w:hlist) entrycget $ent -bitmap] $img($mode)]} {
  80.         lappend ents $ent
  81.     }
  82.     }
  83.  
  84.     foreach child [$data(w:hlist) info children $ent] {
  85.     set ents [concat $ents [tixCheckList:GetSel $w img $child $mode]]
  86.     }
  87.  
  88.     return $ents
  89. }
  90.  
  91.  
  92. # Mode can be on, off, default
  93. #
  94. proc tixCheckList:getselection {w {mode on}} {
  95.     upvar #0 $w data
  96.  
  97.     set img(on)      [tix getbitmap ck_on]
  98.     set img(off)     [tix getbitmap ck_off]
  99.     set img(default) [tix getbitmap ck_def]
  100.  
  101.     set ents ""
  102.     foreach child [$data(w:hlist) info children] {
  103.     set ents [concat $ents [tixCheckList:GetSel $w img $child $mode]]
  104.     }
  105.     return $ents
  106. }
  107.  
  108. proc tixCheckList:getstatus {w ent} {
  109.     upvar #0 $w data
  110.  
  111.     if {[$data(w:hlist) entrycget $ent -itemtype] == "imagetext"} {
  112.     set img(on)      [tix getbitmap ck_on]
  113.     set img(off)     [tix getbitmap ck_off]
  114.     set img(default) [tix getbitmap ck_def]
  115.  
  116.     set bitmap [$data(w:hlist) entrycget $ent -bitmap]
  117.  
  118.     if {"x$bitmap" == "x$img(on)"} {
  119.         set status on
  120.     }
  121.     if {"x$bitmap" == "x$img(off)"} {
  122.         set status off
  123.     }
  124.     if {"x$bitmap" == "x$img(default)"} {
  125.         set status default
  126.     }
  127.     }
  128.  
  129.     if {[info exists status]} {
  130.     return $status
  131.     } else {
  132.     return "none"
  133.     }
  134. }
  135.  
  136. proc tixCheckList:setstatus {w ent {mode on}} {
  137.     upvar #0 $w data
  138.  
  139.     if {$data(-radio)} {
  140.     set status [tixCheckList:getstatus $w $ent]
  141.  
  142.     if {"x$status" == "x$mode"} {
  143.         return
  144.     }
  145.  
  146.     if {$mode == "on"} {
  147.         if {$data(selected) != ""} {
  148.         tixCheckList:Select $w $data(selected) off
  149.         }
  150.         set data(selected) $ent
  151.         tixCheckList:Select $w $ent $mode
  152.     } elseif {$mode == "off"} {
  153.         if {"x$data(selected)" == "x$ent"} {
  154.         return
  155.         }
  156.         tixCheckList:Select $w $ent $mode
  157.     } else {
  158.         tixCheckList:Select $w $ent $mode
  159.     }
  160.     } else {
  161.     tixCheckList:Select $w $ent $mode
  162.     }
  163. }
  164.  
  165. proc tixCheckList:Select {w ent mode} {
  166.     upvar #0 $w data
  167.  
  168.     if {[$data(w:hlist) entrycget $ent -itemtype] == "imagetext"} {
  169.     set img(on)      ck_on
  170.     set img(off)     ck_off
  171.     set img(default) ck_def
  172.  
  173.     if [catch {
  174.         set bitmap [tix getbitmap $img($mode)]
  175.         $data(w:hlist) entryconfig $ent -bitmap $bitmap
  176.     }] {
  177.         # must be the "none" mode
  178.         #
  179.         catch {
  180.         $data(w:hlist) entryconfig $ent -bitmap ""
  181.         }
  182.     }
  183.     }
  184.  
  185.     return $mode
  186. }
  187.  
  188. proc tixCheckList:HandleCheck {w ent} {
  189.     upvar #0 $w data
  190.  
  191.     if {[$data(w:hlist) entrycget $ent -itemtype] == "imagetext"} {
  192.     set img(on)      [tix getbitmap ck_on]
  193.     set img(off)     [tix getbitmap ck_off]
  194.     set img(default) [tix getbitmap ck_def]
  195.  
  196.     set curMode [tixCheckList:getstatus $w $ent]
  197.  
  198.     case $curMode {
  199.         on {
  200.         tixCheckList:setstatus $w $ent off
  201.         }
  202.         off {
  203.         tixCheckList:setstatus $w $ent on
  204.         }
  205.         none {
  206.         return
  207.         }
  208.         default {
  209.         tixCheckList:setstatus $w $ent on
  210.         }
  211.     }
  212.     }
  213. }
  214.  
  215. proc tixCheckList:Command {w B} {
  216.     upvar #0 $w data
  217.     upvar $B bind
  218.  
  219.     set ent [tixEvent flag V]
  220.     tixCheckList:HandleCheck $w $ent
  221.  
  222.     tixChainMethod $w Command $B
  223. }
  224.  
  225. proc tixCheckList:BrowseCmd {w B} {
  226.     upvar #0 $w data
  227.     upvar $B bind
  228.  
  229.     set ent [tixEvent flag V]
  230.  
  231.     case [tixEvent type] {
  232.     {<ButtonPress-1> <space>} {
  233.         tixCheckList:HandleCheck $w $ent
  234.     }
  235.     }
  236.  
  237.     tixChainMethod $w BrowseCmd $B 
  238. }
  239.