0000: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d # --------------
0010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 --------------.#
0050: 20 20 6d 61 69 6e 66 72 61 6d 65 2e 74 63 6c 0a mainframe.tcl.
0060: 23 20 20 54 68 69 73 20 66 69 6c 65 20 69 73 20 # This file is
0070: 70 61 72 74 20 6f 66 20 55 6e 69 66 69 78 20 42 part of Unifix B
0080: 57 69 64 67 65 74 20 54 6f 6f 6c 6b 69 74 0a 23 Widget Toolkit.#
0090: 20 20 24 49 64 3a 20 6d 61 69 6e 66 72 61 6d 65 $Id: mainframe
00a0: 2e 74 63 6c 2c 76 20 31 2e 31 36 20 32 30 30 34 .tcl,v 1.16 2004
00b0: 2f 30 32 2f 30 34 20 30 30 3a 31 31 3a 34 33 20 /02/04 00:11:43
00c0: 68 6f 62 62 73 20 45 78 70 20 24 0a 23 20 2d 2d hobbs Exp $.# --
00d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20 ------------.#
0120: 49 6e 64 65 78 20 6f 66 20 63 6f 6d 6d 61 6e 64 Index of command
0130: 73 3a 0a 23 20 20 20 20 20 2d 20 4d 61 69 6e 46 s:.# - MainF
0140: 72 61 6d 65 3a 3a 63 72 65 61 74 65 0a 23 20 20 rame::create.#
0150: 20 20 20 2d 20 4d 61 69 6e 46 72 61 6d 65 3a 3a - MainFrame::
0160: 63 6f 6e 66 69 67 75 72 65 0a 23 20 20 20 20 20 configure.#
0170: 2d 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 63 67 65 - MainFrame::cge
0180: 74 0a 23 20 20 20 20 20 2d 20 4d 61 69 6e 46 72 t.# - MainFr
0190: 61 6d 65 3a 3a 67 65 74 66 72 61 6d 65 0a 23 20 ame::getframe.#
01a0: 20 20 20 20 2d 20 4d 61 69 6e 46 72 61 6d 65 3a - MainFrame:
01b0: 3a 61 64 64 74 6f 6f 6c 62 61 72 0a 23 20 20 20 :addtoolbar.#
01c0: 20 20 2d 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 67 - MainFrame::g
01d0: 65 74 74 6f 6f 6c 62 61 72 0a 23 20 20 20 20 20 ettoolbar.#
01e0: 2d 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 61 64 64 - MainFrame::add
01f0: 69 6e 64 69 63 61 74 6f 72 0a 23 20 20 20 20 20 indicator.#
0200: 2d 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 67 65 74 - MainFrame::get
0210: 69 6e 64 69 63 61 74 6f 72 0a 23 20 20 20 20 20 indicator.#
0220: 2d 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 67 65 74 - MainFrame::get
0230: 6d 65 6e 75 0a 23 20 20 20 20 20 2d 20 4d 61 69 menu.# - Mai
0240: 6e 46 72 61 6d 65 3a 3a 6d 65 6e 75 6f 6e 6c 79 nFrame::menuonly
0250: 0a 23 20 20 20 20 20 2d 20 4d 61 69 6e 46 72 61 .# - MainFra
0260: 6d 65 3a 3a 73 68 6f 77 74 6f 6f 6c 62 61 72 0a me::showtoolbar.
0270: 23 20 20 20 20 20 2d 20 4d 61 69 6e 46 72 61 6d # - MainFram
0280: 65 3a 3a 73 68 6f 77 73 74 61 74 75 73 62 61 72 e::showstatusbar
0290: 0a 23 20 20 20 20 20 2d 20 4d 61 69 6e 46 72 61 .# - MainFra
02a0: 6d 65 3a 3a 5f 63 72 65 61 74 65 5f 6d 65 6e 75 me::_create_menu
02b0: 62 61 72 0a 23 20 20 20 20 20 2d 20 4d 61 69 6e bar.# - Main
02c0: 46 72 61 6d 65 3a 3a 5f 63 72 65 61 74 65 5f 65 Frame::_create_e
02d0: 6e 74 72 69 65 73 0a 23 20 20 20 20 20 2d 20 4d ntries.# - M
02e0: 61 69 6e 46 72 61 6d 65 3a 3a 5f 70 61 72 73 65 ainFrame::_parse
02f0: 5f 6e 61 6d 65 0a 23 20 20 20 20 20 2d 20 4d 61 _name.# - Ma
0300: 69 6e 46 72 61 6d 65 3a 3a 5f 70 61 72 73 65 5f inFrame::_parse_
0310: 61 63 63 65 6c 65 72 61 74 6f 72 0a 23 20 2d 2d accelerator.# --
0320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 61 6d 65 ----------..name
0370: 73 70 61 63 65 20 65 76 61 6c 20 4d 61 69 6e 46 space eval MainF
0380: 72 61 6d 65 20 7b 0a 20 20 20 20 57 69 64 67 65 rame {. Widge
0390: 74 3a 3a 64 65 66 69 6e 65 20 4d 61 69 6e 46 72 t::define MainFr
03a0: 61 6d 65 20 6d 61 69 6e 66 72 61 6d 65 20 50 72 ame mainframe Pr
03b0: 6f 67 72 65 73 73 42 61 72 0a 0a 20 20 20 20 57 ogressBar.. W
03c0: 69 64 67 65 74 3a 3a 62 77 69 6e 63 6c 75 64 65 idget::bwinclude
03d0: 20 4d 61 69 6e 46 72 61 6d 65 20 50 72 6f 67 72 MainFrame Progr
03e0: 65 73 73 42 61 72 20 2e 73 74 61 74 75 73 2e 70 essBar .status.p
03f0: 72 67 20 5c 0a 09 20 20 20 20 72 65 6d 6f 76 65 rg \.. remove
0400: 20 7b 0a 09 2d 66 67 20 2d 62 67 20 2d 62 64 20 {..-fg -bg -bd
0410: 2d 74 72 6f 75 67 68 63 6f 6c 6f 72 20 2d 62 61 -troughcolor -ba
0420: 63 6b 67 72 6f 75 6e 64 20 2d 62 6f 72 64 65 72 ckground -border
0430: 77 69 64 74 68 0a 09 2d 72 65 6c 69 65 66 20 2d width..-relief -
0440: 6f 72 69 65 6e 74 20 2d 77 69 64 74 68 20 2d 68 orient -width -h
0450: 65 69 67 68 74 0a 20 20 20 20 7d 20 5c 0a 09 20 eight. } \..
0460: 20 20 20 72 65 6e 61 6d 65 20 7b 0a 09 2d 6d 61 rename {..-ma
0470: 78 69 6d 75 6d 20 20 20 20 2d 70 72 6f 67 72 65 ximum -progre
0480: 73 73 6d 61 78 0a 09 2d 76 61 72 69 61 62 6c 65 ssmax..-variable
0490: 20 20 20 2d 70 72 6f 67 72 65 73 73 76 61 72 0a -progressvar.
04a0: 09 2d 74 79 70 65 20 20 20 20 20 20 20 2d 70 72 .-type -pr
04b0: 6f 67 72 65 73 73 74 79 70 65 0a 09 2d 66 6f 72 ogresstype..-for
04c0: 65 67 72 6f 75 6e 64 20 2d 70 72 6f 67 72 65 73 eground -progres
04d0: 73 66 67 0a 20 20 20 20 7d 0a 0a 20 20 20 20 57 sfg. }.. W
04e0: 69 64 67 65 74 3a 3a 64 65 63 6c 61 72 65 20 4d idget::declare M
04f0: 61 69 6e 46 72 61 6d 65 20 7b 0a 09 7b 2d 77 69 ainFrame {..{-wi
0500: 64 74 68 20 20 20 20 20 20 20 20 54 6b 52 65 73 dth TkRes
0510: 6f 75 72 63 65 20 30 20 20 20 20 20 20 30 20 66 ource 0 0 f
0520: 72 61 6d 65 7d 0a 09 7b 2d 68 65 69 67 68 74 20 rame}..{-height
0530: 20 20 20 20 20 20 54 6b 52 65 73 6f 75 72 63 65 TkResource
0540: 20 30 20 20 20 20 20 20 30 20 66 72 61 6d 65 7d 0 0 frame}
0550: 0a 09 7b 2d 62 61 63 6b 67 72 6f 75 6e 64 20 20 ..{-background
0560: 20 54 6b 52 65 73 6f 75 72 63 65 20 22 22 20 20 TkResource ""
0570: 20 20 20 30 20 66 72 61 6d 65 7d 0a 09 7b 2d 74 0 frame}..{-t
0580: 65 78 74 76 61 72 69 61 62 6c 65 20 53 74 72 69 extvariable Stri
0590: 6e 67 20 20 20 20 20 22 22 20 20 20 20 20 30 7d ng "" 0}
05a0: 0a 09 7b 2d 6d 65 6e 75 20 20 20 20 20 20 20 20 ..{-menu
05b0: 20 53 74 72 69 6e 67 20 20 20 20 20 7b 7d 20 20 String {}
05c0: 20 20 20 31 7d 0a 09 7b 2d 73 65 70 61 72 61 74 1}..{-separat
05d0: 6f 72 20 20 20 20 45 6e 75 6d 20 20 20 20 20 20 or Enum
05e0: 20 62 6f 74 68 20 20 20 31 20 7b 6e 6f 6e 65 20 both 1 {none
05f0: 74 6f 70 20 62 6f 74 74 6f 6d 20 62 6f 74 68 7d top bottom both}
0600: 7d 0a 09 7b 2d 62 67 20 20 20 20 20 20 20 20 20 }..{-bg
0610: 20 20 53 79 6e 6f 6e 79 6d 20 20 20 20 2d 62 61 Synonym -ba
0620: 63 6b 67 72 6f 75 6e 64 7d 0a 0a 09 7b 2d 6d 65 ckground}...{-me
0630: 6e 75 62 61 72 66 6f 6e 74 20 20 20 53 74 72 69 nubarfont Stri
0640: 6e 67 20 20 20 20 20 22 22 20 20 30 7d 0a 09 7b ng "" 0}..{
0650: 2d 6d 65 6e 75 65 6e 74 72 79 66 6f 6e 74 20 53 -menuentryfont S
0660: 74 72 69 6e 67 20 20 20 20 20 22 22 20 20 30 7d tring "" 0}
0670: 0a 09 7b 2d 73 74 61 74 75 73 62 61 72 66 6f 6e ..{-statusbarfon
0680: 74 20 53 74 72 69 6e 67 20 20 20 20 20 22 22 20 t String ""
0690: 20 30 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 57 0}. }.. W
06a0: 69 64 67 65 74 3a 3a 61 64 64 6d 61 70 20 4d 61 idget::addmap Ma
06b0: 69 6e 46 72 61 6d 65 20 22 22 20 2e 66 72 61 6d inFrame "" .fram
06c0: 65 20 20 7b 2d 77 69 64 74 68 20 7b 7d 20 2d 68 e {-width {} -h
06d0: 65 69 67 68 74 20 7b 7d 20 2d 62 61 63 6b 67 72 eight {} -backgr
06e0: 6f 75 6e 64 20 7b 7d 7d 0a 20 20 20 20 57 69 64 ound {}}. Wid
06f0: 67 65 74 3a 3a 61 64 64 6d 61 70 20 4d 61 69 6e get::addmap Main
0700: 46 72 61 6d 65 20 22 22 20 2e 74 6f 70 66 20 20 Frame "" .topf
0710: 20 7b 2d 62 61 63 6b 67 72 6f 75 6e 64 20 7b 7d {-background {}
0720: 7d 0a 20 20 20 20 57 69 64 67 65 74 3a 3a 61 64 }. Widget::ad
0730: 64 6d 61 70 20 4d 61 69 6e 46 72 61 6d 65 20 22 dmap MainFrame "
0740: 22 20 2e 62 6f 74 66 20 20 20 7b 2d 62 61 63 6b " .botf {-back
0750: 67 72 6f 75 6e 64 20 7b 7d 7d 0a 20 20 20 20 57 ground {}}. W
0760: 69 64 67 65 74 3a 3a 61 64 64 6d 61 70 20 4d 61 idget::addmap Ma
0770: 69 6e 46 72 61 6d 65 20 22 22 20 2e 73 74 61 74 inFrame "" .stat
0780: 75 73 20 7b 2d 62 61 63 6b 67 72 6f 75 6e 64 20 us {-background
0790: 7b 7d 7d 0a 20 20 20 20 57 69 64 67 65 74 3a 3a {}}. Widget::
07a0: 61 64 64 6d 61 70 20 4d 61 69 6e 46 72 61 6d 65 addmap MainFrame
07b0: 20 22 22 20 2e 73 74 61 74 75 73 2e 6c 61 62 65 "" .status.labe
07c0: 6c 20 7b 2d 62 61 63 6b 67 72 6f 75 6e 64 20 7b l {-background {
07d0: 7d 7d 0a 20 20 20 20 57 69 64 67 65 74 3a 3a 61 }}. Widget::a
07e0: 64 64 6d 61 70 20 4d 61 69 6e 46 72 61 6d 65 20 ddmap MainFrame
07f0: 22 22 20 2e 73 74 61 74 75 73 2e 69 6e 64 66 20 "" .status.indf
0800: 20 7b 2d 62 61 63 6b 67 72 6f 75 6e 64 20 7b 7d {-background {}
0810: 7d 0a 20 20 20 20 57 69 64 67 65 74 3a 3a 61 64 }. Widget::ad
0820: 64 6d 61 70 20 4d 61 69 6e 46 72 61 6d 65 20 22 dmap MainFrame "
0830: 22 20 2e 73 74 61 74 75 73 2e 70 72 67 66 20 20 " .status.prgf
0840: 7b 2d 62 61 63 6b 67 72 6f 75 6e 64 20 7b 7d 7d {-background {}}
0850: 0a 20 20 20 20 57 69 64 67 65 74 3a 3a 61 64 64 . Widget::add
0860: 6d 61 70 20 4d 61 69 6e 46 72 61 6d 65 20 50 72 map MainFrame Pr
0870: 6f 67 72 65 73 73 42 61 72 20 2e 73 74 61 74 75 ogressBar .statu
0880: 73 2e 70 72 67 20 7b 2d 62 61 63 6b 67 72 6f 75 s.prg {-backgrou
0890: 6e 64 20 7b 7d 20 2d 62 61 63 6b 67 72 6f 75 6e nd {} -backgroun
08a0: 64 20 2d 74 72 6f 75 67 68 63 6f 6c 6f 72 7d 0a d -troughcolor}.
08b0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 5f 77 . variable _w
08c0: 69 64 67 65 74 0a 7d 0a 0a 0a 23 20 2d 2d 2d 2d idget.}...# ----
08d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
08e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
08f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0910: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20 43 6f 6d 6d --------.# Comm
0920: 61 6e 64 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 63 and MainFrame::c
0930: 72 65 61 74 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d reate.# --------
0940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0980: 2d 2d 2d 2d 0a 70 72 6f 63 20 4d 61 69 6e 46 72 ----.proc MainFr
0990: 61 6d 65 3a 3a 63 72 65 61 74 65 20 7b 20 70 61 ame::create { pa
09a0: 74 68 20 61 72 67 73 20 7d 20 7b 0a 20 20 20 20 th args } {.
09b0: 67 6c 6f 62 61 6c 20 20 20 74 63 6c 5f 70 6c 61 global tcl_pla
09c0: 74 66 6f 72 6d 0a 20 20 20 20 76 61 72 69 61 62 tform. variab
09d0: 6c 65 20 5f 77 69 64 67 65 74 0a 0a 20 20 20 20 le _widget..
09e0: 73 65 74 20 70 61 74 68 20 5b 66 72 61 6d 65 20 set path [frame
09f0: 24 70 61 74 68 20 2d 74 61 6b 65 66 6f 63 75 73 $path -takefocus
0a00: 20 30 20 2d 68 69 67 68 6c 69 67 68 74 74 68 69 0 -highlightthi
0a10: 63 6b 6e 65 73 73 20 30 5d 0a 20 20 20 20 73 65 ckness 0]. se
0a20: 74 20 74 6f 70 20 20 5b 77 69 6e 66 6f 20 70 61 t top [winfo pa
0a30: 72 65 6e 74 20 24 70 61 74 68 5d 0a 20 20 20 20 rent $path].
0a40: 69 66 20 7b 20 21 5b 73 74 72 69 6e 67 20 65 71 if { ![string eq
0a50: 75 61 6c 20 5b 77 69 6e 66 6f 20 74 6f 70 6c 65 ual [winfo tople
0a60: 76 65 6c 20 24 70 61 74 68 5d 20 24 74 6f 70 5d vel $path] $top]
0a70: 20 7d 20 7b 0a 09 64 65 73 74 72 6f 79 20 24 70 } {..destroy $p
0a80: 61 74 68 0a 09 72 65 74 75 72 6e 20 2d 63 6f 64 ath..return -cod
0a90: 65 20 65 72 72 6f 72 20 22 70 61 72 65 6e 74 20 e error "parent
0aa0: 6d 75 73 74 20 62 65 20 61 20 74 6f 70 6c 65 76 must be a toplev
0ab0: 65 6c 22 0a 20 20 20 20 7d 0a 20 20 20 20 57 69 el". }. Wi
0ac0: 64 67 65 74 3a 3a 69 6e 69 74 20 4d 61 69 6e 46 dget::init MainF
0ad0: 72 61 6d 65 20 24 70 61 74 68 20 24 61 72 67 73 rame $path $args
0ae0: 0a 0a 20 20 20 20 69 66 20 7b 20 24 74 63 6c 5f .. if { $tcl_
0af0: 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 platform(platfor
0b00: 6d 29 20 3d 3d 20 22 75 6e 69 78 22 20 7d 20 7b m) == "unix" } {
0b10: 0a 09 73 65 74 20 72 65 6c 69 65 66 20 72 61 69 ..set relief rai
0b20: 73 65 64 0a 09 73 65 74 20 62 64 20 20 20 20 20 sed..set bd
0b30: 31 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 1. } else {..
0b40: 73 65 74 20 72 65 6c 69 65 66 20 66 6c 61 74 0a set relief flat.
0b50: 09 73 65 74 20 62 64 20 20 20 20 20 30 0a 20 20 .set bd 0.
0b60: 20 20 7d 0a 20 20 20 20 73 65 74 20 74 6f 70 66 }. set topf
0b70: 72 61 6d 65 20 20 5b 65 76 61 6c 20 5b 6c 69 73 rame [eval [lis
0b80: 74 20 66 72 61 6d 65 20 24 70 61 74 68 2e 74 6f t frame $path.to
0b90: 70 66 5d 20 5c 0a 09 09 20 20 20 20 20 20 20 2d pf] \... -
0ba0: 72 65 6c 69 65 66 20 66 6c 61 74 20 2d 62 6f 72 relief flat -bor
0bb0: 64 65 72 77 69 64 74 68 20 30 20 5c 0a 09 20 20 derwidth 0 \..
0bc0: 20 20 5b 57 69 64 67 65 74 3a 3a 73 75 62 63 67 [Widget::subcg
0bd0: 65 74 20 24 70 61 74 68 20 2e 74 6f 70 66 5d 5d et $path .topf]]
0be0: 0a 20 20 20 20 73 65 74 20 75 73 65 72 66 72 61 . set userfra
0bf0: 6d 65 20 5b 65 76 61 6c 20 5b 6c 69 73 74 20 66 me [eval [list f
0c00: 72 61 6d 65 20 24 70 61 74 68 2e 66 72 61 6d 65 rame $path.frame
0c10: 5d 20 5c 0a 09 09 20 20 20 20 20 20 20 5b 57 69 ] \... [Wi
0c20: 64 67 65 74 3a 3a 73 75 62 63 67 65 74 20 24 70 dget::subcget $p
0c30: 61 74 68 20 2e 66 72 61 6d 65 5d 20 5c 0a 09 09 ath .frame] \...
0c40: 20 20 20 20 20 20 20 2d 72 65 6c 69 65 66 20 24 -relief $
0c50: 72 65 6c 69 65 66 20 2d 62 6f 72 64 65 72 77 69 relief -borderwi
0c60: 64 74 68 20 24 62 64 5d 0a 20 20 20 20 73 65 74 dth $bd]. set
0c70: 20 62 6f 74 66 72 61 6d 65 20 20 5b 65 76 61 6c botframe [eval
0c80: 20 5b 6c 69 73 74 20 66 72 61 6d 65 20 24 70 61 [list frame $pa
0c90: 74 68 2e 62 6f 74 66 5d 20 5c 0a 09 09 20 20 20 th.botf] \...
0ca0: 20 20 20 20 2d 72 65 6c 69 65 66 20 24 72 65 6c -relief $rel
0cb0: 69 65 66 20 2d 62 6f 72 64 65 72 77 69 64 74 68 ief -borderwidth
0cc0: 20 24 62 64 20 5c 0a 09 20 20 20 20 5b 57 69 64 $bd \.. [Wid
0cd0: 67 65 74 3a 3a 73 75 62 63 67 65 74 20 24 70 61 get::subcget $pa
0ce0: 74 68 20 2e 62 6f 74 66 5d 5d 0a 0a 20 20 20 20 th .botf]]..
0cf0: 70 61 63 6b 20 24 74 6f 70 66 72 61 6d 65 20 2d pack $topframe -
0d00: 66 69 6c 6c 20 78 0a 20 20 20 20 67 72 69 64 20 fill x. grid
0d10: 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72 65 20 columnconfigure
0d20: 24 74 6f 70 66 72 61 6d 65 20 30 20 2d 77 65 69 $topframe 0 -wei
0d30: 67 68 74 20 31 0a 0a 20 20 20 20 73 65 74 20 62 ght 1.. set b
0d40: 67 20 5b 57 69 64 67 65 74 3a 3a 63 67 65 74 20 g [Widget::cget
0d50: 24 70 61 74 68 20 2d 62 61 63 6b 67 72 6f 75 6e $path -backgroun
0d60: 64 5d 0a 20 20 20 20 24 70 61 74 68 20 63 6f 6e d]. $path con
0d70: 66 69 67 75 72 65 20 2d 62 61 63 6b 67 72 6f 75 figure -backgrou
0d80: 6e 64 20 24 62 67 0a 20 20 20 20 69 66 20 7b 20 nd $bg. if {
0d90: 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c $tcl_platform(pl
0da0: 61 74 66 6f 72 6d 29 20 21 3d 20 22 75 6e 69 78 atform) != "unix
0db0: 22 20 7d 20 7b 0a 09 73 65 74 20 73 65 70 6f 70 " } {..set sepop
0dc0: 74 20 5b 57 69 64 67 65 74 3a 3a 67 65 74 6f 70 t [Widget::getop
0dd0: 74 69 6f 6e 20 24 70 61 74 68 20 2d 73 65 70 61 tion $path -sepa
0de0: 72 61 74 6f 72 5d 0a 09 69 66 20 7b 20 24 73 65 rator]..if { $se
0df0: 70 6f 70 74 20 3d 3d 20 22 62 6f 74 68 22 20 7c popt == "both" |
0e00: 7c 20 24 73 65 70 6f 70 74 20 3d 3d 20 22 74 6f | $sepopt == "to
0e10: 70 22 20 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 p" } {.. set
0e20: 73 65 70 20 5b 53 65 70 61 72 61 74 6f 72 3a 3a sep [Separator::
0e30: 63 72 65 61 74 65 20 24 70 61 74 68 2e 73 65 70 create $path.sep
0e40: 20 2d 6f 72 69 65 6e 74 20 68 6f 72 69 7a 6f 6e -orient horizon
0e50: 74 61 6c 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 tal -background
0e60: 24 62 67 5d 0a 09 20 20 20 20 70 61 63 6b 20 24 $bg].. pack $
0e70: 73 65 70 20 2d 66 69 6c 6c 20 78 0a 09 7d 0a 09 sep -fill x..}..
0e80: 69 66 20 7b 20 24 73 65 70 6f 70 74 20 3d 3d 20 if { $sepopt ==
0e90: 22 62 6f 74 68 22 20 7c 7c 20 24 73 65 70 6f 70 "both" || $sepop
0ea0: 74 20 3d 3d 20 22 62 6f 74 74 6f 6d 22 20 7d 20 t == "bottom" }
0eb0: 7b 0a 09 20 20 20 20 73 65 74 20 73 65 70 20 5b {.. set sep [
0ec0: 53 65 70 61 72 61 74 6f 72 3a 3a 63 72 65 61 74 Separator::creat
0ed0: 65 20 24 62 6f 74 66 72 61 6d 65 2e 73 65 70 20 e $botframe.sep
0ee0: 2d 6f 72 69 65 6e 74 20 68 6f 72 69 7a 6f 6e 74 -orient horizont
0ef0: 61 6c 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 24 al -background $
0f00: 62 67 5d 0a 09 20 20 20 20 70 61 63 6b 20 24 73 bg].. pack $s
0f10: 65 70 20 2d 66 69 6c 6c 20 78 0a 09 7d 0a 20 20 ep -fill x..}.
0f20: 20 20 7d 0a 0a 20 20 20 20 23 20 2d 2d 2d 20 73 }.. # --- s
0f30: 74 61 74 75 73 20 62 61 72 20 2d 2d 2d 2d 2d 2d tatus bar ------
0f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f70: 2d 2d 2d 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 ---. if {[str
0f80: 69 6e 67 20 6c 65 6e 67 74 68 20 5b 57 69 64 67 ing length [Widg
0f90: 65 74 3a 3a 67 65 74 6f 70 74 69 6f 6e 20 24 70 et::getoption $p
0fa0: 61 74 68 20 2d 73 74 61 74 75 73 62 61 72 66 6f ath -statusbarfo
0fb0: 6e 74 5d 5d 20 3e 30 20 7d 20 7b 0a 09 73 65 74 nt]] >0 } {..set
0fc0: 20 73 62 66 6e 74 20 5b 6c 69 73 74 20 2d 66 6f sbfnt [list -fo
0fd0: 6e 74 20 5b 57 69 64 67 65 74 3a 3a 67 65 74 6f nt [Widget::geto
0fe0: 70 74 69 6f 6e 20 24 70 61 74 68 20 2d 73 74 61 ption $path -sta
0ff0: 74 75 73 62 61 72 66 6f 6e 74 5d 5d 0a 20 20 20 tusbarfont]].
1000: 20 7d 20 65 6c 73 65 20 7b 0a 09 73 65 74 20 73 } else {..set s
1010: 62 66 6e 74 20 22 22 0a 20 20 20 20 7d 0a 0a 20 bfnt "". }..
1020: 20 20 20 73 65 74 20 73 74 61 74 75 73 20 20 20 set status
1030: 5b 66 72 61 6d 65 20 24 70 61 74 68 2e 73 74 61 [frame $path.sta
1040: 74 75 73 20 2d 72 65 6c 69 65 66 20 66 6c 61 74 tus -relief flat
1050: 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 30 20 -borderwidth 0
1060: 5c 0a 09 09 20 20 20 20 20 20 2d 74 61 6b 65 66 \... -takef
1070: 6f 63 75 73 20 30 20 2d 68 69 67 68 6c 69 67 68 ocus 0 -highligh
1080: 74 74 68 69 63 6b 6e 65 73 73 20 30 20 2d 62 61 tthickness 0 -ba
1090: 63 6b 67 72 6f 75 6e 64 20 24 62 67 5d 0a 20 20 ckground $bg].
10a0: 20 20 73 65 74 20 6c 61 62 65 6c 20 20 20 20 5b set label [
10b0: 65 76 61 6c 20 5b 6c 69 73 74 20 6c 61 62 65 6c eval [list label
10c0: 20 24 73 74 61 74 75 73 2e 6c 61 62 65 6c 20 5c $status.label \
10d0: 0a 09 20 20 20 20 2d 74 65 78 74 76 61 72 69 61 .. -textvaria
10e0: 62 6c 65 20 5b 57 69 64 67 65 74 3a 3a 67 65 74 ble [Widget::get
10f0: 6f 70 74 69 6f 6e 20 24 70 61 74 68 20 2d 74 65 option $path -te
1100: 78 74 76 61 72 69 61 62 6c 65 5d 20 5c 0a 09 20 xtvariable] \..
1110: 20 20 20 2d 74 61 6b 65 66 6f 63 75 73 20 30 20 -takefocus 0
1120: 2d 68 69 67 68 6c 69 67 68 74 74 68 69 63 6b 6e -highlightthickn
1130: 65 73 73 20 30 20 2d 62 61 63 6b 67 72 6f 75 6e ess 0 -backgroun
1140: 64 20 24 62 67 5d 20 24 73 62 66 6e 74 5d 0a 20 d $bg] $sbfnt].
1150: 20 20 20 73 65 74 20 69 6e 64 66 72 61 6d 65 20 set indframe
1160: 5b 66 72 61 6d 65 20 24 73 74 61 74 75 73 2e 69 [frame $status.i
1170: 6e 64 66 20 2d 72 65 6c 69 65 66 20 66 6c 61 74 ndf -relief flat
1180: 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 30 20 -borderwidth 0
1190: 5c 0a 09 09 20 20 20 20 20 20 2d 74 61 6b 65 66 \... -takef
11a0: 6f 63 75 73 20 30 20 2d 68 69 67 68 6c 69 67 68 ocus 0 -highligh
11b0: 74 74 68 69 63 6b 6e 65 73 73 20 30 20 2d 62 61 tthickness 0 -ba
11c0: 63 6b 67 72 6f 75 6e 64 20 24 62 67 5d 0a 20 20 ckground $bg].
11d0: 20 20 73 65 74 20 70 72 67 66 72 61 6d 65 20 5b set prgframe [
11e0: 66 72 61 6d 65 20 24 73 74 61 74 75 73 2e 70 72 frame $status.pr
11f0: 67 66 20 2d 72 65 6c 69 65 66 20 66 6c 61 74 20 gf -relief flat
1200: 2d 62 6f 72 64 65 72 77 69 64 74 68 20 30 20 5c -borderwidth 0 \
1210: 0a 09 09 20 20 20 20 20 20 2d 74 61 6b 65 66 6f ... -takefo
1220: 63 75 73 20 30 20 2d 68 69 67 68 6c 69 67 68 74 cus 0 -highlight
1230: 74 68 69 63 6b 6e 65 73 73 20 30 20 2d 62 61 63 thickness 0 -bac
1240: 6b 67 72 6f 75 6e 64 20 24 62 67 5d 0a 0a 20 20 kground $bg]..
1250: 20 20 70 6c 61 63 65 20 24 6c 61 62 65 6c 20 20 place $label
1260: 20 20 2d 61 6e 63 68 6f 72 20 77 20 2d 78 20 30 -anchor w -x 0
1270: 20 2d 72 65 6c 79 20 30 2e 35 0a 20 20 20 20 70 -rely 0.5. p
1280: 6c 61 63 65 20 24 69 6e 64 66 72 61 6d 65 20 2d lace $indframe -
1290: 61 6e 63 68 6f 72 20 6e 65 20 2d 72 65 6c 78 20 anchor ne -relx
12a0: 31 20 2d 79 20 30 20 2d 72 65 6c 68 65 69 67 68 1 -y 0 -relheigh
12b0: 74 20 31 0a 20 20 20 20 70 61 63 6b 20 20 24 70 t 1. pack $p
12c0: 72 67 66 72 61 6d 65 20 2d 69 6e 20 24 69 6e 64 rgframe -in $ind
12d0: 66 72 61 6d 65 20 2d 73 69 64 65 20 6c 65 66 74 frame -side left
12e0: 20 2d 70 61 64 78 20 32 0a 20 20 20 20 24 73 74 -padx 2. $st
12f0: 61 74 75 73 20 63 6f 6e 66 69 67 75 72 65 20 2d atus configure -
1300: 68 65 69 67 68 74 20 5b 77 69 6e 66 6f 20 72 65 height [winfo re
1310: 71 68 65 69 67 68 74 20 24 6c 61 62 65 6c 5d 0a qheight $label].
1320: 0a 20 20 20 20 73 65 74 20 70 72 6f 67 72 65 73 . set progres
1330: 73 20 5b 65 76 61 6c 20 5b 6c 69 73 74 20 50 72 s [eval [list Pr
1340: 6f 67 72 65 73 73 42 61 72 3a 3a 63 72 65 61 74 ogressBar::creat
1350: 65 20 24 73 74 61 74 75 73 2e 70 72 67 5d 20 5c e $status.prg] \
1360: 0a 09 09 20 20 20 20 20 20 5b 57 69 64 67 65 74 ... [Widget
1370: 3a 3a 73 75 62 63 67 65 74 20 24 70 61 74 68 20 ::subcget $path
1380: 2e 73 74 61 74 75 73 2e 70 72 67 5d 20 5c 0a 09 .status.prg] \..
1390: 09 20 20 20 20 20 20 2d 77 69 64 74 68 20 20 20 . -width
13a0: 20 20 20 20 35 30 20 5c 0a 09 09 20 20 20 20 20 50 \...
13b0: 20 2d 68 65 69 67 68 74 20 20 20 20 20 20 5b 65 -height [e
13c0: 78 70 72 20 7b 5b 77 69 6e 66 6f 20 72 65 71 68 xpr {[winfo reqh
13d0: 65 69 67 68 74 20 24 6c 61 62 65 6c 5d 2d 32 7d eight $label]-2}
13e0: 5d 20 5c 0a 09 09 20 20 20 20 20 20 2d 62 6f 72 ] \... -bor
13f0: 64 65 72 77 69 64 74 68 20 31 20 5c 0a 09 09 20 derwidth 1 \...
1400: 20 20 20 20 20 2d 72 65 6c 69 65 66 20 20 20 20 -relief
1410: 20 20 73 75 6e 6b 65 6e 5d 0a 20 20 20 20 70 61 sunken]. pa
1420: 63 6b 20 24 73 74 61 74 75 73 20 20 20 20 2d 69 ck $status -i
1430: 6e 20 24 62 6f 74 66 72 61 6d 65 20 2d 66 69 6c n $botframe -fil
1440: 6c 20 78 20 2d 70 61 64 79 20 32 0a 20 20 20 20 l x -pady 2.
1450: 70 61 63 6b 20 24 62 6f 74 66 72 61 6d 65 20 20 pack $botframe
1460: 2d 73 69 64 65 20 62 6f 74 74 6f 6d 20 2d 66 69 -side bottom -fi
1470: 6c 6c 20 78 0a 20 20 20 20 70 61 63 6b 20 24 75 ll x. pack $u
1480: 73 65 72 66 72 61 6d 65 20 2d 66 69 6c 6c 20 62 serframe -fill b
1490: 6f 74 68 20 2d 65 78 70 61 6e 64 20 79 65 73 0a oth -expand yes.
14a0: 0a 20 20 20 20 73 65 74 20 5f 77 69 64 67 65 74 . set _widget
14b0: 28 24 70 61 74 68 2c 74 6f 70 29 20 20 20 20 20 ($path,top)
14c0: 20 24 74 6f 70 0a 20 20 20 20 73 65 74 20 5f 77 $top. set _w
14d0: 69 64 67 65 74 28 24 70 61 74 68 2c 6e 74 6f 6f idget($path,ntoo
14e0: 6c 62 61 72 29 20 30 0a 20 20 20 20 73 65 74 20 lbar) 0. set
14f0: 5f 77 69 64 67 65 74 28 24 70 61 74 68 2c 6e 69 _widget($path,ni
1500: 6e 64 69 63 29 20 20 20 30 0a 0a 20 20 20 20 73 ndic) 0.. s
1510: 65 74 20 6d 65 6e 75 20 5b 57 69 64 67 65 74 3a et menu [Widget:
1520: 3a 67 65 74 6f 70 74 69 6f 6e 20 24 70 61 74 68 :getoption $path
1530: 20 2d 6d 65 6e 75 5d 0a 20 20 20 20 69 66 20 7b -menu]. if {
1540: 20 5b 6c 6c 65 6e 67 74 68 20 24 6d 65 6e 75 5d [llength $menu]
1550: 20 7d 20 7b 0a 09 5f 63 72 65 61 74 65 5f 6d 65 } {.._create_me
1560: 6e 75 62 61 72 20 24 70 61 74 68 20 24 6d 65 6e nubar $path $men
1570: 75 0a 20 20 20 20 7d 0a 0a 20 20 20 20 62 69 6e u. }.. bin
1580: 64 20 24 70 61 74 68 20 3c 44 65 73 74 72 6f 79 d $path <Destroy
1590: 3e 20 5b 6c 69 73 74 20 4d 61 69 6e 46 72 61 6d > [list MainFram
15a0: 65 3a 3a 5f 64 65 73 74 72 6f 79 20 25 57 5d 0a e::_destroy %W].
15b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 57 69 64 . return [Wid
15c0: 67 65 74 3a 3a 63 72 65 61 74 65 20 4d 61 69 6e get::create Main
15d0: 46 72 61 6d 65 20 24 70 61 74 68 5d 0a 7d 0a 0a Frame $path].}..
15e0: 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .# -------------
15f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
1630: 23 20 20 43 6f 6d 6d 61 6e 64 20 4d 61 69 6e 46 # Command MainF
1640: 72 61 6d 65 3a 3a 63 6f 6e 66 69 67 75 72 65 0a rame::configure.
1650: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d # --------------
1660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 --------------.p
16a0: 72 6f 63 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 63 roc MainFrame::c
16b0: 6f 6e 66 69 67 75 72 65 20 7b 20 70 61 74 68 20 onfigure { path
16c0: 61 72 67 73 20 7d 20 7b 0a 20 20 20 20 76 61 72 args } {. var
16d0: 69 61 62 6c 65 20 5f 77 69 64 67 65 74 0a 0a 20 iable _widget..
16e0: 20 20 20 73 65 74 20 72 65 73 20 5b 57 69 64 67 set res [Widg
16f0: 65 74 3a 3a 63 6f 6e 66 69 67 75 72 65 20 24 70 et::configure $p
1700: 61 74 68 20 24 61 72 67 73 5d 0a 0a 20 20 20 20 ath $args]..
1710: 69 66 20 7b 20 5b 57 69 64 67 65 74 3a 3a 68 61 if { [Widget::ha
1720: 73 43 68 61 6e 67 65 64 20 24 70 61 74 68 20 2d sChanged $path -
1730: 74 65 78 74 76 61 72 69 61 62 6c 65 20 6e 65 77 textvariable new
1740: 76 5d 20 7d 20 7b 0a 09 75 70 6c 65 76 65 6c 20 v] } {..uplevel
1750: 5c 23 30 20 24 70 61 74 68 2e 73 74 61 74 75 73 \#0 $path.status
1760: 2e 6c 61 62 65 6c 20 63 6f 6e 66 69 67 75 72 65 .label configure
1770: 20 2d 74 65 78 74 76 61 72 69 61 62 6c 65 20 5b -textvariable [
1780: 6c 69 73 74 20 24 6e 65 77 76 5d 0a 20 20 20 20 list $newv].
1790: 7d 0a 0a 20 20 20 20 69 66 20 7b 20 5b 57 69 64 }.. if { [Wid
17a0: 67 65 74 3a 3a 68 61 73 43 68 61 6e 67 65 64 20 get::hasChanged
17b0: 24 70 61 74 68 20 2d 62 61 63 6b 67 72 6f 75 6e $path -backgroun
17c0: 64 20 62 67 5d 20 7d 20 7b 0a 09 69 66 20 7b 24 d bg] } {..if {$
17d0: 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 ::tcl_platform(p
17e0: 6c 61 74 66 6f 72 6d 29 20 3d 3d 20 22 75 6e 69 latform) == "uni
17f0: 78 22 7d 20 7b 0a 09 73 65 74 20 6c 69 73 74 6d x"} {..set listm
1800: 65 6e 75 20 5b 24 5f 77 69 64 67 65 74 28 24 70 enu [$_widget($p
1810: 61 74 68 2c 74 6f 70 29 20 63 67 65 74 20 2d 6d ath,top) cget -m
1820: 65 6e 75 5d 0a 09 77 68 69 6c 65 20 7b 20 5b 6c enu]..while { [l
1830: 6c 65 6e 67 74 68 20 24 6c 69 73 74 6d 65 6e 75 length $listmenu
1840: 5d 20 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6e ] } {.. set n
1850: 65 77 6c 69 73 74 20 7b 7d 0a 09 20 20 20 20 66 ewlist {}.. f
1860: 6f 72 65 61 63 68 20 6d 65 6e 75 20 24 6c 69 73 oreach menu $lis
1870: 74 6d 65 6e 75 20 7b 0a 09 09 24 6d 65 6e 75 20 tmenu {...$menu
1880: 63 6f 6e 66 69 67 75 72 65 20 2d 62 61 63 6b 67 configure -backg
1890: 72 6f 75 6e 64 20 24 62 67 0a 09 09 73 65 74 20 round $bg...set
18a0: 6e 65 77 6c 69 73 74 20 5b 63 6f 6e 63 61 74 20 newlist [concat
18b0: 24 6e 65 77 6c 69 73 74 20 5b 77 69 6e 66 6f 20 $newlist [winfo
18c0: 63 68 69 6c 64 72 65 6e 20 24 6d 65 6e 75 5d 5d children $menu]]
18d0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65 74 .. }.. set
18e0: 20 6c 69 73 74 6d 65 6e 75 20 24 6e 65 77 6c 69 listmenu $newli
18f0: 73 74 0a 09 7d 0a 09 7d 0a 09 66 6f 72 65 61 63 st..}..}..foreac
1900: 68 20 73 65 70 20 7b 2e 73 65 70 20 2e 62 6f 74 h sep {.sep .bot
1910: 66 2e 73 65 70 7d 20 7b 0a 09 20 20 20 20 69 66 f.sep} {.. if
1920: 20 7b 20 5b 77 69 6e 66 6f 20 65 78 69 73 74 73 { [winfo exists
1930: 20 24 70 61 74 68 2e 24 73 65 70 5d 20 7d 20 7b $path.$sep] } {
1940: 0a 09 09 53 65 70 61 72 61 74 6f 72 3a 3a 63 6f ...Separator::co
1950: 6e 66 69 67 75 72 65 20 24 70 61 74 68 2e 24 73 nfigure $path.$s
1960: 65 70 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 24 ep -background $
1970: 62 67 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 66 6f bg.. }..}..fo
1980: 72 65 61 63 68 20 77 20 5b 77 69 6e 66 6f 20 63 reach w [winfo c
1990: 68 69 6c 64 72 65 6e 20 24 70 61 74 68 2e 74 6f hildren $path.to
19a0: 70 66 5d 20 7b 0a 09 20 20 20 20 24 77 20 63 6f pf] {.. $w co
19b0: 6e 66 69 67 75 72 65 20 2d 62 61 63 6b 67 72 6f nfigure -backgro
19c0: 75 6e 64 20 24 62 67 0a 09 7d 0a 20 20 20 20 7d und $bg..}. }
19d0: 0a 0a 20 20 20 20 69 66 20 7b 20 5b 57 69 64 67 .. if { [Widg
19e0: 65 74 3a 3a 68 61 73 43 68 61 6e 67 65 64 20 24 et::hasChanged $
19f0: 70 61 74 68 20 2d 6d 65 6e 75 62 61 72 66 6f 6e path -menubarfon
1a00: 74 20 6e 65 77 6d 62 66 6e 74 5d 20 7d 20 7b 0a t newmbfnt] } {.
1a10: 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e .if {[string len
1a20: 67 74 68 20 24 6e 65 77 6d 62 66 6e 74 5d 7d 20 gth $newmbfnt]}
1a30: 7b 0a 09 20 20 20 20 73 65 74 20 6d 62 66 6e 74 {.. set mbfnt
1a40: 20 5b 6c 69 73 74 20 2d 66 6f 6e 74 20 24 6e 65 [list -font $ne
1a50: 77 6d 62 66 6e 74 5d 0a 09 7d 20 65 6c 73 65 20 wmbfnt]..} else
1a60: 7b 0a 09 20 20 20 20 73 65 74 20 6d 62 66 6e 74 {.. set mbfnt
1a70: 20 22 22 0a 09 7d 0a 09 73 65 74 20 74 6f 70 20 ""..}..set top
1a80: 20 20 20 20 24 5f 77 69 64 67 65 74 28 24 70 61 $_widget($pa
1a90: 74 68 2c 74 6f 70 29 0a 09 69 66 20 7b 5b 73 74 th,top)..if {[st
1aa0: 72 69 6e 67 20 65 71 75 61 6c 20 24 74 6f 70 20 ring equal $top
1ab0: 2e 5d 7d 20 7b 0a 09 20 20 20 20 65 76 61 6c 20 .]} {.. eval
1ac0: 5b 6c 69 73 74 20 2e 6d 65 6e 75 62 61 72 20 63 [list .menubar c
1ad0: 6f 6e 66 69 67 75 72 65 5d 20 24 6d 62 66 6e 74 onfigure] $mbfnt
1ae0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 ..} else {..
1af0: 65 76 61 6c 20 5b 6c 69 73 74 20 24 74 6f 70 2e eval [list $top.
1b00: 6d 65 6e 75 62 61 72 20 63 6f 6e 66 69 67 75 72 menubar configur
1b10: 65 5d 20 24 6d 62 66 6e 74 0a 09 7d 0a 20 20 20 e] $mbfnt..}.
1b20: 20 7d 0a 20 20 20 20 69 66 20 7b 20 5b 57 69 64 }. if { [Wid
1b30: 67 65 74 3a 3a 68 61 73 43 68 61 6e 67 65 64 20 get::hasChanged
1b40: 24 70 61 74 68 20 2d 6d 65 6e 75 65 6e 74 72 79 $path -menuentry
1b50: 66 6f 6e 74 20 6e 65 77 6d 65 66 6e 74 5d 20 7d font newmefnt] }
1b60: 20 7b 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 {..if {[string
1b70: 6c 65 6e 67 74 68 20 24 6e 65 77 6d 65 66 6e 74 length $newmefnt
1b80: 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 65 ]} {.. set me
1b90: 66 6e 74 20 5b 6c 69 73 74 20 2d 66 6f 6e 74 20 fnt [list -font
1ba0: 24 6e 65 77 6d 65 66 6e 74 5d 0a 09 7d 20 65 6c $newmefnt]..} el
1bb0: 73 65 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 65 se {.. set me
1bc0: 66 6e 74 20 22 22 0a 09 7d 0a 09 73 65 74 20 74 fnt ""..}..set t
1bd0: 6f 70 20 20 20 20 20 24 5f 77 69 64 67 65 74 28 op $_widget(
1be0: 24 70 61 74 68 2c 74 6f 70 29 0a 09 69 66 20 7b $path,top)..if {
1bf0: 5b 73 74 72 69 6e 67 20 65 71 75 61 6c 20 24 74 [string equal $t
1c00: 6f 70 20 2e 5d 7d 20 7b 0a 09 20 20 20 20 73 65 op .]} {.. se
1c10: 74 20 6d 62 20 2e 6d 65 6e 75 62 61 72 0a 09 7d t mb .menubar..}
1c20: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74 else {.. set
1c30: 20 6d 62 20 24 74 6f 70 2e 6d 65 6e 75 62 61 72 mb $top.menubar
1c40: 0a 09 7d 0a 09 73 65 74 20 6c 20 5b 77 69 6e 66 ..}..set l [winf
1c50: 6f 20 63 68 69 6c 64 72 65 6e 20 24 6d 62 5d 0a o children $mb].
1c60: 09 77 68 69 6c 65 20 7b 5b 6c 6c 65 6e 67 74 68 .while {[llength
1c70: 20 24 6c 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 $l]} {.. set
1c80: 20 65 20 5b 6c 69 6e 64 65 78 20 24 6c 20 30 5d e [lindex $l 0]
1c90: 0a 09 20 20 20 20 73 65 74 20 6c 20 5b 6c 72 61 .. set l [lra
1ca0: 6e 67 65 20 24 6c 20 31 20 65 6e 64 5d 0a 09 20 nge $l 1 end]..
1cb0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l
1cc0: 65 6e 67 74 68 20 24 65 5d 20 3d 3d 20 30 7d 20 ength $e] == 0}
1cd0: 7b 63 6f 6e 74 69 6e 75 65 7d 0a 09 20 20 20 20 {continue}..
1ce0: 6c 61 70 70 65 6e 64 20 6c 20 5b 77 69 6e 66 6f lappend l [winfo
1cf0: 20 63 68 69 6c 64 72 65 6e 20 24 65 5d 0a 09 20 children $e]..
1d00: 20 20 20 65 76 61 6c 20 5b 6c 69 73 74 20 24 65 eval [list $e
1d10: 20 63 6f 6e 66 69 67 75 72 65 5d 20 24 6d 65 66 configure] $mef
1d20: 6e 74 0a 09 7d 0a 20 20 20 20 7d 0a 0a 0a 20 20 nt..}. }...
1d30: 20 20 69 66 20 7b 20 5b 57 69 64 67 65 74 3a 3a if { [Widget::
1d40: 68 61 73 43 68 61 6e 67 65 64 20 24 70 61 74 68 hasChanged $path
1d50: 20 2d 73 74 61 74 75 73 62 61 72 66 6f 6e 74 20 -statusbarfont
1d60: 6e 65 77 73 62 66 6e 74 5d 20 7d 20 7b 0a 09 69 newsbfnt] } {..i
1d70: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt
1d80: 68 20 24 6e 65 77 73 62 66 6e 74 5d 7d 20 7b 0a h $newsbfnt]} {.
1d90: 09 20 20 20 20 73 65 74 20 73 62 66 6e 74 20 5b . set sbfnt [
1da0: 6c 69 73 74 20 2d 66 6f 6e 74 20 24 6e 65 77 73 list -font $news
1db0: 62 66 6e 74 5d 0a 09 7d 20 65 6c 73 65 20 7b 0a bfnt]..} else {.
1dc0: 09 20 20 20 20 73 65 74 20 73 62 66 6e 74 20 22 . set sbfnt "
1dd0: 22 0a 09 7d 0a 09 66 6f 72 20 7b 73 65 74 20 69 "..}..for {set i
1de0: 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 3c ndex 0} {$index<
1df0: 24 5f 77 69 64 67 65 74 28 24 70 61 74 68 2c 6e $_widget($path,n
1e00: 69 6e 64 69 63 29 7d 20 7b 69 6e 63 72 20 69 6e indic)} {incr in
1e10: 64 65 78 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 dex} {.. set
1e20: 69 6e 64 69 63 20 24 70 61 74 68 2e 73 74 61 74 indic $path.stat
1e30: 75 73 2e 69 6e 64 66 2e 66 24 69 6e 64 65 78 0a us.indf.f$index.
1e40: 09 20 20 20 20 65 76 61 6c 20 5b 6c 69 73 74 20 . eval [list
1e50: 24 69 6e 64 69 63 20 63 6f 6e 66 69 67 75 72 65 $indic configure
1e60: 5d 20 24 73 62 66 6e 74 0a 09 7d 0a 09 65 76 61 ] $sbfnt..}..eva
1e70: 6c 20 5b 6c 69 73 74 20 24 70 61 74 68 2e 73 74 l [list $path.st
1e80: 61 74 75 73 2e 6c 61 62 65 6c 20 63 6f 6e 66 69 atus.label confi
1e90: 67 75 72 65 5d 20 24 73 62 66 6e 74 0a 09 24 70 gure] $sbfnt..$p
1ea0: 61 74 68 2e 73 74 61 74 75 73 20 63 6f 6e 66 69 ath.status confi
1eb0: 67 75 72 65 20 2d 68 65 69 67 68 74 20 5b 77 69 gure -height [wi
1ec0: 6e 66 6f 20 72 65 71 68 65 69 67 68 74 20 24 70 nfo reqheight $p
1ed0: 61 74 68 2e 73 74 61 74 75 73 2e 6c 61 62 65 6c ath.status.label
1ee0: 5d 0a 0a 09 24 70 61 74 68 2e 73 74 61 74 75 73 ]...$path.status
1ef0: 2e 70 72 67 20 63 6f 6e 66 69 67 75 72 65 20 5c .prg configure \
1f00: 0a 09 09 2d 68 65 69 67 68 74 20 5b 65 78 70 72 ...-height [expr
1f10: 20 7b 5b 77 69 6e 66 6f 20 72 65 71 68 65 69 67 {[winfo reqheig
1f20: 68 74 20 24 70 61 74 68 2e 73 74 61 74 75 73 2e ht $path.status.
1f30: 6c 61 62 65 6c 5d 2d 32 7d 5d 0a 20 20 20 20 7d label]-2}]. }
1f40: 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 .. return $re
1f50: 73 0a 7d 0a 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d s.}...# --------
1f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1fa0: 2d 2d 2d 2d 0a 23 20 20 43 6f 6d 6d 61 6e 64 20 ----.# Command
1fb0: 4d 61 69 6e 46 72 61 6d 65 3a 3a 63 67 65 74 0a MainFrame::cget.
1fc0: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d # --------------
1fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 --------------.p
2010: 72 6f 63 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 63 roc MainFrame::c
2020: 67 65 74 20 7b 20 70 61 74 68 20 6f 70 74 69 6f get { path optio
2030: 6e 20 7d 20 7b 0a 20 20 20 20 72 65 74 75 72 6e n } {. return
2040: 20 5b 57 69 64 67 65 74 3a 3a 63 67 65 74 20 24 [Widget::cget $
2050: 70 61 74 68 20 24 6f 70 74 69 6f 6e 5d 0a 7d 0a path $option].}.
2060: 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..# ------------
2070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
20a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
20b0: 0a 23 20 20 43 6f 6d 6d 61 6e 64 20 4d 61 69 6e .# Command Main
20c0: 46 72 61 6d 65 3a 3a 67 65 74 66 72 61 6d 65 0a Frame::getframe.
20d0: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d # --------------
20e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
20f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 --------------.p
2120: 72 6f 63 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 67 roc MainFrame::g
2130: 65 74 66 72 61 6d 65 20 7b 20 70 61 74 68 20 7d etframe { path }
2140: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 24 70 {. return $p
2150: 61 74 68 2e 66 72 61 6d 65 0a 7d 0a 0a 0a 23 20 ath.frame.}...#
2160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20 ------------.#
21b0: 43 6f 6d 6d 61 6e 64 20 4d 61 69 6e 46 72 61 6d Command MainFram
21c0: 65 3a 3a 61 64 64 74 6f 6f 6c 62 61 72 0a 23 20 e::addtoolbar.#
21d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f ------------.pro
2220: 63 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 61 64 64 c MainFrame::add
2230: 74 6f 6f 6c 62 61 72 20 7b 20 70 61 74 68 20 7d toolbar { path }
2240: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 20 20 {. global
2250: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 0a 20 20 20 tcl_platform.
2260: 20 76 61 72 69 61 62 6c 65 20 5f 77 69 64 67 65 variable _widge
2270: 74 0a 0a 20 20 20 20 73 65 74 20 69 6e 64 65 78 t.. set index
2280: 20 20 20 20 20 24 5f 77 69 64 67 65 74 28 24 70 $_widget($p
2290: 61 74 68 2c 6e 74 6f 6f 6c 62 61 72 29 0a 20 20 ath,ntoolbar).
22a0: 20 20 73 65 74 20 74 6f 6f 6c 66 72 61 6d 65 20 set toolframe
22b0: 24 70 61 74 68 2e 74 6f 70 66 2e 66 24 69 6e 64 $path.topf.f$ind
22c0: 65 78 0a 20 20 20 20 73 65 74 20 74 6f 6f 6c 62 ex. set toolb
22d0: 61 72 20 20 20 24 70 61 74 68 2e 74 6f 70 66 2e ar $path.topf.
22e0: 74 62 24 69 6e 64 65 78 0a 20 20 20 20 73 65 74 tb$index. set
22f0: 20 62 67 20 20 20 20 20 20 20 20 5b 57 69 64 67 bg [Widg
2300: 65 74 3a 3a 67 65 74 6f 70 74 69 6f 6e 20 24 70 et::getoption $p
2310: 61 74 68 20 2d 62 61 63 6b 67 72 6f 75 6e 64 5d ath -background]
2320: 0a 20 20 20 20 69 66 20 7b 20 24 74 63 6c 5f 70 . if { $tcl_p
2330: 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d latform(platform
2340: 29 20 3d 3d 20 22 75 6e 69 78 22 20 7d 20 7b 0a ) == "unix" } {.
2350: 09 66 72 61 6d 65 20 24 74 6f 6f 6c 66 72 61 6d .frame $toolfram
2360: 65 20 2d 72 65 6c 69 65 66 20 72 61 69 73 65 64 e -relief raised
2370: 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 31 20 -borderwidth 1
2380: 5c 0a 09 20 20 20 20 2d 74 61 6b 65 66 6f 63 75 \.. -takefocu
2390: 73 20 30 20 2d 68 69 67 68 6c 69 67 68 74 74 68 s 0 -highlightth
23a0: 69 63 6b 6e 65 73 73 20 30 20 2d 62 61 63 6b 67 ickness 0 -backg
23b0: 72 6f 75 6e 64 20 24 62 67 0a 20 20 20 20 7d 20 round $bg. }
23c0: 65 6c 73 65 20 7b 0a 09 66 72 61 6d 65 20 24 74 else {..frame $t
23d0: 6f 6f 6c 66 72 61 6d 65 20 2d 72 65 6c 69 65 66 oolframe -relief
23e0: 20 66 6c 61 74 20 2d 62 6f 72 64 65 72 77 69 64 flat -borderwid
23f0: 74 68 20 30 20 2d 74 61 6b 65 66 6f 63 75 73 20 th 0 -takefocus
2400: 30 20 5c 0a 09 20 20 20 20 2d 68 69 67 68 6c 69 0 \.. -highli
2410: 67 68 74 74 68 69 63 6b 6e 65 73 73 20 30 20 2d ghtthickness 0 -
2420: 62 61 63 6b 67 72 6f 75 6e 64 20 24 62 67 0a 09 background $bg..
2430: 73 65 74 20 73 65 70 20 5b 53 65 70 61 72 61 74 set sep [Separat
2440: 6f 72 3a 3a 63 72 65 61 74 65 20 24 74 6f 6f 6c or::create $tool
2450: 66 72 61 6d 65 2e 73 65 70 20 2d 6f 72 69 65 6e frame.sep -orien
2460: 74 20 68 6f 72 69 7a 6f 6e 74 61 6c 20 2d 62 61 t horizontal -ba
2470: 63 6b 67 72 6f 75 6e 64 20 24 62 67 5d 0a 09 70 ckground $bg]..p
2480: 61 63 6b 20 24 73 65 70 20 2d 66 69 6c 6c 20 78 ack $sep -fill x
2490: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 74 . }. set t
24a0: 6f 6f 6c 62 61 72 20 5b 66 72 61 6d 65 20 24 74 oolbar [frame $t
24b0: 6f 6f 6c 62 61 72 20 2d 72 65 6c 69 65 66 20 66 oolbar -relief f
24c0: 6c 61 74 20 2d 62 6f 72 64 65 72 77 69 64 74 68 lat -borderwidth
24d0: 20 32 20 5c 0a 09 09 20 20 20 20 20 2d 74 61 6b 2 \... -tak
24e0: 65 66 6f 63 75 73 20 30 20 2d 68 69 67 68 6c 69 efocus 0 -highli
24f0: 67 68 74 74 68 69 63 6b 6e 65 73 73 20 30 20 2d ghtthickness 0 -
2500: 62 61 63 6b 67 72 6f 75 6e 64 20 24 62 67 5d 0a background $bg].
2510: 20 20 20 20 70 61 63 6b 20 24 74 6f 6f 6c 62 61 pack $toolba
2520: 72 20 2d 69 6e 20 24 74 6f 6f 6c 66 72 61 6d 65 r -in $toolframe
2530: 20 2d 61 6e 63 68 6f 72 20 77 20 2d 65 78 70 61 -anchor w -expa
2540: 6e 64 20 79 65 73 20 2d 66 69 6c 6c 20 78 0a 20 nd yes -fill x.
2550: 20 20 20 69 6e 63 72 20 5f 77 69 64 67 65 74 28 incr _widget(
2560: 24 70 61 74 68 2c 6e 74 6f 6f 6c 62 61 72 29 0a $path,ntoolbar).
2570: 20 20 20 20 67 72 69 64 20 24 74 6f 6f 6c 66 72 grid $toolfr
2580: 61 6d 65 20 2d 63 6f 6c 75 6d 6e 20 30 20 2d 72 ame -column 0 -r
2590: 6f 77 20 24 69 6e 64 65 78 20 2d 73 74 69 63 6b ow $index -stick
25a0: 79 20 65 77 0a 20 20 20 20 72 65 74 75 72 6e 20 y ew. return
25b0: 24 74 6f 6f 6c 62 61 72 0a 7d 0a 0a 0a 23 20 2d $toolbar.}...# -
25c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
25d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
25e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
25f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20 43 -----------.# C
2610: 6f 6d 6d 61 6e 64 20 4d 61 69 6e 46 72 61 6d 65 ommand MainFrame
2620: 3a 3a 67 65 74 74 6f 6f 6c 62 61 72 0a 23 20 2d ::gettoolbar.# -
2630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f 63 -----------.proc
2680: 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 67 65 74 74 MainFrame::gett
2690: 6f 6f 6c 62 61 72 20 7b 20 70 61 74 68 20 69 6e oolbar { path in
26a0: 64 65 78 20 7d 20 7b 0a 20 20 20 20 72 65 74 75 dex } {. retu
26b0: 72 6e 20 24 70 61 74 68 2e 74 6f 70 66 2e 74 62 rn $path.topf.tb
26c0: 24 69 6e 64 65 78 0a 7d 0a 0a 0a 23 20 2d 2d 2d $index.}...# ---
26d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
26e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
26f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20 43 6f 6d ---------.# Com
2720: 6d 61 6e 64 20 4d 61 69 6e 46 72 61 6d 65 3a 3a mand MainFrame::
2730: 61 64 64 69 6e 64 69 63 61 74 6f 72 0a 23 20 2d addindicator.# -
2740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f 63 -----------.proc
2790: 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 61 64 64 69 MainFrame::addi
27a0: 6e 64 69 63 61 74 6f 72 20 7b 20 70 61 74 68 20 ndicator { path
27b0: 61 72 67 73 20 7d 20 7b 0a 20 20 20 20 76 61 72 args } {. var
27c0: 69 61 62 6c 65 20 5f 77 69 64 67 65 74 0a 0a 20 iable _widget..
27d0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l
27e0: 65 6e 67 74 68 20 5b 57 69 64 67 65 74 3a 3a 67 ength [Widget::g
27f0: 65 74 6f 70 74 69 6f 6e 20 24 70 61 74 68 20 2d etoption $path -
2800: 73 74 61 74 75 73 62 61 72 66 6f 6e 74 5d 5d 7d statusbarfont]]}
2810: 20 7b 0a 09 73 65 74 20 73 62 66 6e 74 20 5b 6c {..set sbfnt [l
2820: 69 73 74 20 2d 66 6f 6e 74 20 5b 57 69 64 67 65 ist -font [Widge
2830: 74 3a 3a 67 65 74 6f 70 74 69 6f 6e 20 24 70 61 t::getoption $pa
2840: 74 68 20 2d 73 74 61 74 75 73 62 61 72 66 6f 6e th -statusbarfon
2850: 74 5d 5d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b t]]. } else {
2860: 0a 09 73 65 74 20 73 62 66 6e 74 20 22 22 0a 20 ..set sbfnt "".
2870: 20 20 20 7d 0a 0a 20 20 20 20 73 65 74 20 69 6e }.. set in
2880: 64 65 78 20 24 5f 77 69 64 67 65 74 28 24 70 61 dex $_widget($pa
2890: 74 68 2c 6e 69 6e 64 69 63 29 0a 20 20 20 20 73 th,nindic). s
28a0: 65 74 20 69 6e 64 69 63 20 24 70 61 74 68 2e 73 et indic $path.s
28b0: 74 61 74 75 73 2e 69 6e 64 66 2e 66 24 69 6e 64 tatus.indf.f$ind
28c0: 65 78 0a 20 20 20 20 65 76 61 6c 20 5b 6c 69 73 ex. eval [lis
28d0: 74 20 6c 61 62 65 6c 20 24 69 6e 64 69 63 5d 20 t label $indic]
28e0: 24 61 72 67 73 20 2d 72 65 6c 69 65 66 20 73 75 $args -relief su
28f0: 6e 6b 65 6e 20 2d 62 6f 72 64 65 72 77 69 64 74 nken -borderwidt
2900: 68 20 31 20 5c 0a 09 2d 74 61 6b 65 66 6f 63 75 h 1 \..-takefocu
2910: 73 20 30 20 2d 68 69 67 68 6c 69 67 68 74 74 68 s 0 -highlightth
2920: 69 63 6b 6e 65 73 73 20 30 20 24 73 62 66 6e 74 ickness 0 $sbfnt
2930: 0a 0a 20 20 20 20 70 61 63 6b 20 24 69 6e 64 69 .. pack $indi
2940: 63 20 2d 73 69 64 65 20 6c 65 66 74 20 2d 61 6e c -side left -an
2950: 63 68 6f 72 20 77 20 2d 70 61 64 78 20 32 20 2d chor w -padx 2 -
2960: 66 69 6c 6c 20 79 20 2d 65 78 70 61 6e 64 20 31 fill y -expand 1
2970: 0a 0a 20 20 20 20 69 6e 63 72 20 5f 77 69 64 67 .. incr _widg
2980: 65 74 28 24 70 61 74 68 2c 6e 69 6e 64 69 63 29 et($path,nindic)
2990: 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 24 69 6e .. return $in
29a0: 64 69 63 0a 7d 0a 0a 0a 23 20 2d 2d 2d 2d 2d 2d dic.}...# ------
29b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
29c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
29d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
29e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
29f0: 2d 2d 2d 2d 2d 2d 0a 23 20 20 43 6f 6d 6d 61 6e ------.# Comman
2a00: 64 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 67 65 74 d MainFrame::get
2a10: 69 6e 64 69 63 61 74 6f 72 0a 23 20 2d 2d 2d 2d indicator.# ----
2a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2a60: 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f 63 20 4d 61 --------.proc Ma
2a70: 69 6e 46 72 61 6d 65 3a 3a 67 65 74 69 6e 64 69 inFrame::getindi
2a80: 63 61 74 6f 72 20 7b 20 70 61 74 68 20 69 6e 64 cator { path ind
2a90: 65 78 20 7d 20 7b 0a 20 20 20 20 72 65 74 75 72 ex } {. retur
2aa0: 6e 20 24 70 61 74 68 2e 73 74 61 74 75 73 2e 69 n $path.status.i
2ab0: 6e 64 66 2e 66 24 69 6e 64 65 78 0a 7d 0a 0a 0a ndf.f$index.}...
2ac0: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d # --------------
2ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 --------------.#
2b10: 20 20 43 6f 6d 6d 61 6e 64 20 4d 61 69 6e 46 72 Command MainFr
2b20: 61 6d 65 3a 3a 67 65 74 6d 65 6e 75 0a 23 20 2d ame::getmenu.# -
2b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f 63 -----------.proc
2b80: 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 67 65 74 6d MainFrame::getm
2b90: 65 6e 75 20 7b 20 70 61 74 68 20 6d 65 6e 75 69 enu { path menui
2ba0: 64 20 7d 20 7b 0a 20 20 20 20 76 61 72 69 61 62 d } {. variab
2bb0: 6c 65 20 5f 77 69 64 67 65 74 0a 0a 20 20 20 20 le _widget..
2bc0: 69 66 20 7b 20 5b 69 6e 66 6f 20 65 78 69 73 74 if { [info exist
2bd0: 73 20 5f 77 69 64 67 65 74 28 24 70 61 74 68 2c s _widget($path,
2be0: 6d 65 6e 75 69 64 2c 24 6d 65 6e 75 69 64 29 5d menuid,$menuid)]
2bf0: 20 7d 20 7b 0a 09 72 65 74 75 72 6e 20 24 5f 77 } {..return $_w
2c00: 69 64 67 65 74 28 24 70 61 74 68 2c 6d 65 6e 75 idget($path,menu
2c10: 69 64 2c 24 6d 65 6e 75 69 64 29 0a 20 20 20 20 id,$menuid).
2c20: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a }. return "".
2c30: 7d 0a 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d }...# ----------
2c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2c80: 2d 2d 2d 0a 23 20 20 43 6f 6d 6d 61 6e 64 20 4d ---.# Command M
2c90: 61 69 6e 46 72 61 6d 65 3a 3a 73 65 74 6d 65 6e ainFrame::setmen
2ca0: 75 73 74 61 74 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d ustate.# -------
2cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2cf0: 2d 2d 2d 2d 2d 2d 0a 70 72 6f 63 20 4d 61 69 6e ------.proc Main
2d00: 46 72 61 6d 65 3a 3a 73 65 74 6d 65 6e 75 73 74 Frame::setmenust
2d10: 61 74 65 20 7b 20 70 61 74 68 20 74 61 67 20 73 ate { path tag s
2d20: 74 61 74 65 20 7d 20 7b 0a 20 20 20 20 76 61 72 tate } {. var
2d30: 69 61 62 6c 65 20 5f 77 69 64 67 65 74 0a 0a 20 iable _widget..
2d40: 20 20 20 23 20 20 20 20 69 66 20 7b 20 5b 69 6e # if { [in
2d50: 66 6f 20 65 78 69 73 74 73 20 5f 77 69 64 67 65 fo exists _widge
2d60: 74 28 24 70 61 74 68 2c 74 61 67 73 2c 24 74 61 t($path,tags,$ta
2d70: 67 29 5d 20 7d 20 7b 0a 20 20 20 20 23 20 20 20 g)] } {. #
2d80: 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b 6d 65 foreach {me
2d90: 6e 75 20 65 6e 74 72 79 7d 20 24 5f 77 69 64 67 nu entry} $_widg
2da0: 65 74 28 24 70 61 74 68 2c 74 61 67 73 2c 24 74 et($path,tags,$t
2db0: 61 67 29 20 7b 0a 20 20 20 20 23 20 20 20 20 20 ag) {. #
2dc0: 20 20 20 20 20 20 20 24 6d 65 6e 75 20 65 6e 74 $menu ent
2dd0: 72 79 63 6f 6e 66 69 67 75 72 65 20 24 65 6e 74 ryconfigure $ent
2de0: 72 79 20 2d 73 74 61 74 65 20 24 73 74 61 74 65 ry -state $state
2df0: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 7d 0a . # }.
2e00: 20 20 20 20 23 20 20 20 20 7d 0a 0a 20 20 20 20 # }..
2e10: 23 20 57 65 20 6e 65 65 64 20 61 20 6d 6f 72 65 # We need a more
2e20: 20 73 6f 70 68 69 73 74 69 63 61 74 65 64 20 73 sophisticated s
2e30: 74 61 74 65 20 73 79 73 74 65 6d 2e 0a 20 20 20 tate system..
2e40: 20 23 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 # The original
2e50: 6d 6f 64 65 6c 20 77 61 73 20 74 68 69 73 3a 20 model was this:
2e60: 20 65 61 63 68 20 6d 65 6e 75 20 69 74 65 6d 20 each menu item
2e70: 68 61 73 20 61 20 6c 69 73 74 20 6f 66 20 74 61 has a list of ta
2e80: 67 73 3b 0a 20 20 20 20 23 20 77 68 65 6e 65 76 gs;. # whenev
2e90: 65 72 20 61 6e 79 20 6f 6e 65 20 6f 66 20 74 68 er any one of th
2ea0: 6f 73 65 20 74 61 67 73 20 63 68 61 6e 67 65 64 ose tags changed
2eb0: 20 73 74 61 74 65 2c 20 74 68 65 20 6d 65 6e 75 state, the menu
2ec0: 20 69 74 65 6d 20 64 69 64 20 74 6f 6f 2e 0a 20 item did too..
2ed0: 20 20 20 23 20 54 68 69 73 20 6d 61 6b 65 73 20 # This makes
2ee0: 69 74 20 68 61 72 64 20 74 6f 20 68 61 76 65 20 it hard to have
2ef0: 69 74 65 6d 73 20 74 68 61 74 20 61 72 65 20 65 items that are e
2f00: 6e 61 62 6c 65 64 20 6f 6e 6c 79 20 77 68 65 6e nabled only when
2f10: 20 62 6f 74 68 20 74 61 67 41 20 61 6e 64 0a 20 both tagA and.
2f20: 20 20 20 23 20 74 61 67 42 20 61 72 65 2e 20 20 # tagB are.
2f30: 54 68 65 20 6e 65 77 20 6d 6f 64 65 6c 20 74 68 The new model th
2f40: 65 72 65 66 6f 72 65 20 6f 6e 6c 79 20 73 65 74 erefore only set
2f50: 73 20 74 68 65 20 6d 65 6e 75 73 74 61 74 65 20 s the menustate
2f60: 74 6f 20 65 6e 61 62 6c 65 64 0a 20 20 20 20 23 to enabled. #
2f70: 20 77 68 65 6e 20 41 4c 4c 20 6f 66 20 69 74 73 when ALL of its
2f80: 20 74 61 67 73 20 61 72 65 20 65 6e 61 62 6c 65 tags are enable
2f90: 64 2e 0a 0a 20 20 20 20 23 20 46 69 72 73 74 20 d... # First
2fa0: 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 61 see if this is a
2fb0: 20 72 65 61 6c 20 74 61 67 0a 20 20 20 20 69 66 real tag. if
2fc0: 20 7b 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 { [info exists
2fd0: 5f 77 69 64 67 65 74 28 24 70 61 74 68 2c 74 61 _widget($path,ta
2fe0: 67 73 74 61 74 65 2c 24 74 61 67 29 5d 20 7d 20 gstate,$tag)] }
2ff0: 7b 0a 09 69 66 20 7b 20 21 5b 73 74 72 69 6e 67 {..if { ![string
3000: 20 65 71 75 61 6c 20 24 73 74 61 74 65 20 22 64 equal $state "d
3010: 69 73 61 62 6c 65 64 22 5d 20 7d 20 7b 0a 09 20 isabled"] } {..
3020: 20 20 20 73 65 74 20 5f 77 69 64 67 65 74 28 24 set _widget($
3030: 70 61 74 68 2c 74 61 67 73 74 61 74 65 2c 24 74 path,tagstate,$t
3040: 61 67 29 20 31 0a 09 7d 20 65 6c 73 65 20 7b 0a ag) 1..} else {.
3050: 09 20 20 20 20 73 65 74 20 5f 77 69 64 67 65 74 . set _widget
3060: 28 24 70 61 74 68 2c 74 61 67 73 74 61 74 65 2c ($path,tagstate,
3070: 24 74 61 67 29 20 30 0a 09 7d 0a 09 66 6f 72 65 $tag) 0..}..fore
3080: 61 63 68 20 7b 6d 65 6e 75 20 65 6e 74 72 79 7d ach {menu entry}
3090: 20 24 5f 77 69 64 67 65 74 28 24 70 61 74 68 2c $_widget($path,
30a0: 74 61 67 73 2c 24 74 61 67 29 20 7b 0a 09 20 20 tags,$tag) {..
30b0: 20 20 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e set expression
30c0: 20 22 31 22 0a 09 20 20 20 20 66 6f 72 65 61 63 "1".. foreac
30d0: 68 20 6d 65 6e 75 74 61 67 20 24 5f 77 69 64 67 h menutag $_widg
30e0: 65 74 28 24 70 61 74 68 2c 6d 65 6e 75 74 61 67 et($path,menutag
30f0: 73 2c 5b 6c 69 73 74 20 24 6d 65 6e 75 20 24 65 s,[list $menu $e
3100: 6e 74 72 79 5d 29 20 7b 0a 09 09 61 70 70 65 6e ntry]) {...appen
3110: 64 20 65 78 70 72 65 73 73 69 6f 6e 20 22 20 26 d expression " &
3120: 26 20 24 5f 77 69 64 67 65 74 28 24 70 61 74 68 & $_widget($path
3130: 2c 74 61 67 73 74 61 74 65 2c 24 6d 65 6e 75 74 ,tagstate,$menut
3140: 61 67 29 22 0a 09 20 20 20 20 7d 0a 09 20 20 20 ag)".. }..
3150: 20 69 66 20 7b 20 5b 65 78 70 72 20 24 65 78 70 if { [expr $exp
3160: 72 65 73 73 69 6f 6e 5d 20 7d 20 7b 0a 09 09 73 ression] } {...s
3170: 65 74 20 73 74 61 74 65 20 6e 6f 72 6d 61 6c 0a et state normal.
3180: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 . } else {...
3190: 73 65 74 20 73 74 61 74 65 20 64 69 73 61 62 6c set state disabl
31a0: 65 64 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 24 ed.. }.. $
31b0: 6d 65 6e 75 20 65 6e 74 72 79 63 6f 6e 66 69 67 menu entryconfig
31c0: 75 72 65 20 24 65 6e 74 72 79 20 2d 73 74 61 74 ure $entry -stat
31d0: 65 20 24 73 74 61 74 65 0a 09 7d 0a 20 20 20 20 e $state..}.
31e0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a }. return.}..
31f0: 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .# -------------
3200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3240: 0a 23 20 20 43 6f 6d 6d 61 6e 64 20 4d 61 69 6e .# Command Main
3250: 46 72 61 6d 65 3a 3a 6d 65 6e 75 6f 6e 6c 79 0a Frame::menuonly.
3260: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d # --------------
3270: 2d 2d 2d 2d 2d 2d 2d 2d 64 2d 2d 2d 2d 2d 2d 2d --------d-------
3280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
32a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
32b0: 70 72 6f 63 20 4d 61 69 6e 46 72 61 6d 65 3a 3a proc MainFrame::
32c0: 6d 65 6e 75 6f 6e 6c 79 20 7b 20 70 61 74 68 20 menuonly { path
32d0: 7d 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 } {. variable
32e0: 20 5f 77 69 64 67 65 74 0a 0a 20 20 20 20 63 61 _widget.. ca
32f0: 74 63 68 20 7b 70 61 63 6b 20 66 6f 72 67 65 74 tch {pack forget
3300: 20 24 70 61 74 68 2e 73 65 70 7d 0a 20 20 20 20 $path.sep}.
3310: 63 61 74 63 68 20 7b 70 61 63 6b 20 66 6f 72 67 catch {pack forg
3320: 65 74 20 24 70 61 74 68 2e 62 6f 74 66 2e 73 65 et $path.botf.se
3330: 70 7d 0a 20 20 20 20 63 61 74 63 68 20 7b 70 61 p}. catch {pa
3340: 63 6b 20 66 6f 72 67 65 74 20 24 70 61 74 68 2e ck forget $path.
3350: 66 72 61 6d 65 7d 0a 7d 0a 0a 23 20 2d 2d 2d 2d frame}.}..# ----
3360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
33a0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20 43 6f 6d 6d --------.# Comm
33b0: 61 6e 64 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 73 and MainFrame::s
33c0: 68 6f 77 74 6f 6f 6c 62 61 72 0a 23 20 2d 2d 2d howtoolbar.# ---
33d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
33e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
33f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f 63 20 4d ---------.proc M
3420: 61 69 6e 46 72 61 6d 65 3a 3a 73 68 6f 77 74 6f ainFrame::showto
3430: 6f 6c 62 61 72 20 7b 20 70 61 74 68 20 69 6e 64 olbar { path ind
3440: 65 78 20 62 6f 6f 6c 20 7d 20 7b 0a 20 20 20 20 ex bool } {.
3450: 76 61 72 69 61 62 6c 65 20 5f 77 69 64 67 65 74 variable _widget
3460: 0a 0a 20 20 20 20 73 65 74 20 74 6f 6f 6c 66 72 .. set toolfr
3470: 61 6d 65 20 24 70 61 74 68 2e 74 6f 70 66 2e 66 ame $path.topf.f
3480: 24 69 6e 64 65 78 0a 20 20 20 20 69 66 20 7b 20 $index. if {
3490: 5b 77 69 6e 66 6f 20 65 78 69 73 74 73 20 24 74 [winfo exists $t
34a0: 6f 6f 6c 66 72 61 6d 65 5d 20 7d 20 7b 0a 09 69 oolframe] } {..i
34b0: 66 20 7b 20 21 24 62 6f 6f 6c 20 26 26 20 5b 6c f { !$bool && [l
34c0: 6c 65 6e 67 74 68 20 5b 67 72 69 64 20 69 6e 66 length [grid inf
34d0: 6f 20 24 74 6f 6f 6c 66 72 61 6d 65 5d 5d 20 7d o $toolframe]] }
34e0: 20 7b 0a 09 20 20 20 20 67 72 69 64 20 66 6f 72 {.. grid for
34f0: 67 65 74 20 24 74 6f 6f 6c 66 72 61 6d 65 0a 09 get $toolframe..
3500: 20 20 20 20 24 70 61 74 68 2e 74 6f 70 66 20 63 $path.topf c
3510: 6f 6e 66 69 67 75 72 65 20 2d 68 65 69 67 68 74 onfigure -height
3520: 20 31 0a 09 7d 20 65 6c 73 65 69 66 20 7b 20 24 1..} elseif { $
3530: 62 6f 6f 6c 20 26 26 20 21 5b 6c 6c 65 6e 67 74 bool && ![llengt
3540: 68 20 5b 67 72 69 64 20 69 6e 66 6f 20 24 74 6f h [grid info $to
3550: 6f 6c 66 72 61 6d 65 5d 5d 20 7d 20 7b 0a 09 20 olframe]] } {..
3560: 20 20 20 67 72 69 64 20 24 74 6f 6f 6c 66 72 61 grid $toolfra
3570: 6d 65 20 2d 63 6f 6c 75 6d 6e 20 30 20 2d 72 6f me -column 0 -ro
3580: 77 20 24 69 6e 64 65 78 20 2d 73 74 69 63 6b 79 w $index -sticky
3590: 20 65 77 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0a ew..}. }.}..
35a0: 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .# -------------
35b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
35c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
35d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
35e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
35f0: 23 20 20 43 6f 6d 6d 61 6e 64 20 4d 61 69 6e 46 # Command MainF
3600: 72 61 6d 65 3a 3a 73 68 6f 77 73 74 61 74 75 73 rame::showstatus
3610: 62 61 72 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d bar.# ----------
3620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3660: 2d 2d 0a 70 72 6f 63 20 4d 61 69 6e 46 72 61 6d --.proc MainFram
3670: 65 3a 3a 73 68 6f 77 73 74 61 74 75 73 62 61 72 e::showstatusbar
3680: 20 7b 20 70 61 74 68 20 6e 61 6d 65 20 7d 20 7b { path name } {
3690: 0a 20 20 20 20 73 65 74 20 73 74 61 74 75 73 20 . set status
36a0: 24 70 61 74 68 2e 73 74 61 74 75 73 0a 20 20 20 $path.status.
36b0: 20 69 66 20 7b 20 5b 73 74 72 69 6e 67 20 65 71 if { [string eq
36c0: 75 61 6c 20 24 6e 61 6d 65 20 22 6e 6f 6e 65 22 ual $name "none"
36d0: 5d 20 7d 20 7b 0a 09 70 61 63 6b 20 66 6f 72 67 ] } {..pack forg
36e0: 65 74 20 24 73 74 61 74 75 73 0a 09 23 20 72 61 et $status..# ra
36f0: 6d 73 61 6e 3a 20 77 69 74 68 6f 75 74 20 63 68 msan: without ch
3700: 61 6e 67 69 6e 67 20 68 65 69 67 68 74 20 74 6f anging height to
3710: 20 31 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 64 1 it does not d
3720: 69 73 61 70 70 65 61 72 0a 09 24 70 61 74 68 2e isappear..$path.
3730: 62 6f 74 66 20 63 6f 6e 66 69 67 75 72 65 20 2d botf configure -
3740: 68 65 69 67 68 74 20 31 0a 20 20 20 20 7d 20 65 height 1. } e
3750: 6c 73 65 20 7b 0a 09 70 61 63 6b 20 24 73 74 61 lse {..pack $sta
3760: 74 75 73 20 2d 69 6e 20 24 70 61 74 68 2e 62 6f tus -in $path.bo
3770: 74 66 20 2d 66 69 6c 6c 20 78 0a 09 73 77 69 74 tf -fill x..swit
3780: 63 68 20 2d 2d 20 24 6e 61 6d 65 20 7b 0a 09 20 ch -- $name {..
3790: 20 20 20 73 74 61 74 75 73 20 7b 0a 09 09 63 61 status {...ca
37a0: 74 63 68 20 7b 70 61 63 6b 20 66 6f 72 67 65 74 tch {pack forget
37b0: 20 24 73 74 61 74 75 73 2e 70 72 67 7d 0a 09 20 $status.prg}..
37c0: 20 20 20 7d 0a 09 20 20 20 20 70 72 6f 67 72 65 }.. progre
37d0: 73 73 69 6f 6e 20 7b 0a 09 09 70 61 63 6b 20 24 ssion {...pack $
37e0: 73 74 61 74 75 73 2e 70 72 67 20 2d 69 6e 20 24 status.prg -in $
37f0: 73 74 61 74 75 73 2e 70 72 67 66 0a 09 20 20 20 status.prgf..
3800: 20 7d 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 0a }..}. }.}...
3810: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d # --------------
3820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 --------------.#
3860: 20 20 43 6f 6d 6d 61 6e 64 20 4d 61 69 6e 46 72 Command MainFr
3870: 61 6d 65 3a 3a 5f 64 65 73 74 72 6f 79 0a 23 20 ame::_destroy.#
3880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
38a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
38b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
38c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f ------------.pro
38d0: 63 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 5f 64 65 c MainFrame::_de
38e0: 73 74 72 6f 79 20 7b 20 70 61 74 68 20 7d 20 7b stroy { path } {
38f0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 5f 77 . variable _w
3900: 69 64 67 65 74 0a 0a 20 20 20 20 57 69 64 67 65 idget.. Widge
3910: 74 3a 3a 64 65 73 74 72 6f 79 20 24 70 61 74 68 t::destroy $path
3920: 0a 20 20 20 20 63 61 74 63 68 20 7b 64 65 73 74 . catch {dest
3930: 72 6f 79 20 5b 24 5f 77 69 64 67 65 74 28 24 70 roy [$_widget($p
3940: 61 74 68 2c 74 6f 70 29 20 63 67 65 74 20 2d 6d ath,top) cget -m
3950: 65 6e 75 5d 7d 0a 20 20 20 20 24 5f 77 69 64 67 enu]}. $_widg
3960: 65 74 28 24 70 61 74 68 2c 74 6f 70 29 20 63 6f et($path,top) co
3970: 6e 66 69 67 75 72 65 20 2d 6d 65 6e 75 20 7b 7d nfigure -menu {}
3980: 0a 0a 20 20 20 20 23 20 55 6e 73 65 74 20 61 6c .. # Unset al
3990: 6c 20 6f 66 20 74 68 65 20 73 74 61 74 65 20 76 l of the state v
39a0: 61 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 ars associated w
39b0: 69 74 68 20 74 68 69 73 20 6d 61 69 6e 20 66 72 ith this main fr
39c0: 61 6d 65 2e 0a 20 20 20 20 66 6f 72 65 61 63 68 ame.. foreach
39d0: 20 69 6e 64 65 78 20 5b 61 72 72 61 79 20 6e 61 index [array na
39e0: 6d 65 73 20 5f 77 69 64 67 65 74 20 24 70 61 74 mes _widget $pat
39f0: 68 2c 2a 5d 20 7b 0a 09 75 6e 73 65 74 20 5f 77 h,*] {..unset _w
3a00: 69 64 67 65 74 28 24 69 6e 64 65 78 29 0a 20 20 idget($index).
3a10: 20 20 7d 0a 7d 0a 0a 0a 23 20 2d 2d 2d 2d 2d 2d }.}...# ------
3a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a60: 2d 2d 2d 2d 2d 2d 0a 23 20 20 43 6f 6d 6d 61 6e ------.# Comman
3a70: 64 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 5f 63 72 d MainFrame::_cr
3a80: 65 61 74 65 5f 6d 65 6e 75 62 61 72 0a 23 20 2d eate_menubar.# -
3a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f 63 -----------.proc
3ae0: 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 5f 63 72 65 MainFrame::_cre
3af0: 61 74 65 5f 6d 65 6e 75 62 61 72 20 7b 20 70 61 ate_menubar { pa
3b00: 74 68 20 64 65 73 63 6d 65 6e 75 20 7d 20 7b 0a th descmenu } {.
3b10: 20 20 20 20 76 61 72 69 61 62 6c 65 20 5f 77 69 variable _wi
3b20: 64 67 65 74 0a 20 20 20 20 67 6c 6f 62 61 6c 20 dget. global
3b30: 20 20 20 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 0a tcl_platform.
3b40: 0a 20 20 20 20 73 65 74 20 74 6f 70 20 20 20 20 . set top
3b50: 20 24 5f 77 69 64 67 65 74 28 24 70 61 74 68 2c $_widget($path,
3b60: 74 6f 70 29 0a 0a 20 20 20 20 66 6f 72 65 61 63 top).. foreac
3b70: 68 20 7b 76 20 78 7d 20 7b 6d 62 66 6e 74 20 2d h {v x} {mbfnt -
3b80: 6d 65 6e 75 62 61 72 66 6f 6e 74 20 6d 65 66 6e menubarfont mefn
3b90: 74 20 2d 6d 65 6e 75 65 6e 74 72 79 66 6f 6e 74 t -menuentryfont
3ba0: 7d 20 7b 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 } {..if {[string
3bb0: 20 6c 65 6e 67 74 68 20 5b 57 69 64 67 65 74 3a length [Widget:
3bc0: 3a 67 65 74 6f 70 74 69 6f 6e 20 24 70 61 74 68 :getoption $path
3bd0: 20 24 78 5d 5d 7d 20 7b 0a 09 20 20 20 20 73 65 $x]]} {.. se
3be0: 74 20 24 76 20 5b 6c 69 73 74 20 2d 66 6f 6e 74 t $v [list -font
3bf0: 20 5b 57 69 64 67 65 74 3a 3a 67 65 74 6f 70 74 [Widget::getopt
3c00: 69 6f 6e 20 24 70 61 74 68 20 24 78 5d 5d 0a 09 ion $path $x]]..
3c10: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 } else {.. se
3c20: 74 20 24 76 20 22 22 0a 09 7d 0a 20 20 20 20 7d t $v ""..}. }
3c30: 0a 0a 20 20 20 20 69 66 20 7b 24 74 63 6c 5f 70 .. if {$tcl_p
3c40: 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d latform(platform
3c50: 29 20 3d 3d 20 22 75 6e 69 78 22 7d 20 7b 0a 09 ) == "unix"} {..
3c60: 73 65 74 20 6d 65 6e 75 6f 70 74 73 20 5b 6c 69 set menuopts [li
3c70: 73 74 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 5b st -background [
3c80: 57 69 64 67 65 74 3a 3a 67 65 74 6f 70 74 69 6f Widget::getoptio
3c90: 6e 20 24 70 61 74 68 20 2d 62 61 63 6b 67 72 6f n $path -backgro
3ca0: 75 6e 64 5d 20 5c 0a 09 09 20 20 20 20 20 20 20 und] \...
3cb0: 20 20 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 -borderwidth
3cc0: 31 5d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 1]. } else {.
3cd0: 09 73 65 74 20 6d 65 6e 75 6f 70 74 73 20 5b 6c .set menuopts [l
3ce0: 69 73 74 5d 0a 20 20 20 20 7d 0a 20 20 20 20 0a ist]. }. .
3cf0: 20 20 20 20 23 20 52 41 4d 53 41 4e 20 63 68 61 # RAMSAN cha
3d00: 6e 67 65 73 20 74 6f 20 70 65 72 6d 6d 69 74 20 nges to permmit
3d10: 74 6f 20 72 65 64 65 66 69 6e 65 20 74 68 65 20 to redefine the
3d20: 6d 65 6e 75 73 0a 20 20 20 20 0a 20 20 20 20 23 menus. . #
3d30: 20 72 61 6d 73 61 6e 3a 20 64 65 73 74 72 6f 79 ramsan: destroy
3d40: 20 6f 6c 64 20 6d 65 6e 75 73 0a 20 20 20 20 69 old menus. i
3d50: 66 20 7b 20 24 74 6f 70 20 3d 3d 20 22 2e 22 20 f { $top == "."
3d60: 7d 20 7b 20 73 65 74 20 74 6f 70 70 20 22 22 20 } { set topp ""
3d70: 7d 20 65 6c 73 65 20 7b 20 73 65 74 20 74 6f 70 } else { set top
3d80: 70 20 24 74 6f 70 20 7d 0a 20 20 20 20 69 66 20 p $top }. if
3d90: 7b 20 21 5b 77 69 6e 66 6f 20 65 78 69 73 74 73 { ![winfo exists
3da0: 20 24 74 6f 70 70 2e 6d 65 6e 75 62 61 72 5d 20 $topp.menubar]
3db0: 7d 20 7b 0a 09 73 65 74 20 6d 65 6e 75 62 61 72 } {..set menubar
3dc0: 20 5b 65 76 61 6c 20 5b 6c 69 73 74 20 6d 65 6e [eval [list men
3dd0: 75 20 24 74 6f 70 2e 6d 65 6e 75 62 61 72 20 2d u $top.menubar -
3de0: 74 65 61 72 6f 66 66 20 30 5d 20 24 6d 65 6e 75 tearoff 0] $menu
3df0: 6f 70 74 73 20 24 6d 62 66 6e 74 5d 0a 09 24 74 opts $mbfnt]..$t
3e00: 6f 70 20 63 6f 6e 66 69 67 75 72 65 20 2d 6d 65 op configure -me
3e10: 6e 75 20 24 6d 65 6e 75 62 61 72 0a 20 20 20 20 nu $menubar.
3e20: 7d 20 65 6c 73 65 20 7b 0a 09 73 65 74 20 6d 65 } else {..set me
3e30: 6e 75 62 61 72 20 24 74 6f 70 70 2e 6d 65 6e 75 nubar $topp.menu
3e40: 62 61 72 0a 09 24 6d 65 6e 75 62 61 72 20 64 65 bar..$menubar de
3e50: 6c 20 30 20 65 6e 64 0a 09 66 6f 72 65 61 63 68 l 0 end..foreach
3e60: 20 69 20 5b 77 69 6e 66 6f 20 63 68 69 6c 64 72 i [winfo childr
3e70: 65 6e 20 24 6d 65 6e 75 62 61 72 5d 20 7b 20 64 en $menubar] { d
3e80: 65 73 74 72 6f 79 20 24 69 20 7d 0a 20 20 20 20 estroy $i }.
3e90: 7d 0a 20 20 20 20 23 20 72 61 6d 73 61 6e 3a 20 }. # ramsan:
3ea0: 75 6e 73 65 74 20 74 68 65 20 61 63 63 65 6c 65 unset the accele
3eb0: 72 61 74 6f 72 73 0a 20 20 20 20 66 6f 72 65 61 rators. forea
3ec0: 63 68 20 61 63 63 20 5b 62 69 6e 64 20 24 5f 77 ch acc [bind $_w
3ed0: 69 64 67 65 74 28 24 70 61 74 68 2c 74 6f 70 29 idget($path,top)
3ee0: 5d 20 7b 0a 09 69 66 20 7b 20 5b 73 74 72 69 6e ] {..if { [strin
3ef0: 67 20 6d 61 74 63 68 20 22 24 6d 65 6e 75 62 61 g match "$menuba
3f00: 72 2a 69 6e 76 6f 6b 65 2a 22 20 5b 62 69 6e 64 r*invoke*" [bind
3f10: 20 24 5f 77 69 64 67 65 74 28 24 70 61 74 68 2c $_widget($path,
3f20: 74 6f 70 29 20 24 61 63 63 5d 5d 20 7d 20 7b 0a top) $acc]] } {.
3f30: 09 20 20 20 20 62 69 6e 64 20 24 5f 77 69 64 67 . bind $_widg
3f40: 65 74 28 24 70 61 74 68 2c 74 6f 70 29 20 24 61 et($path,top) $a
3f50: 63 63 20 22 22 0a 09 7d 0a 20 20 20 20 7d 0a 20 cc ""..}. }.
3f60: 20 20 20 66 6f 72 65 61 63 68 20 6a 20 5b 6c 69 foreach j [li
3f70: 73 74 20 6d 65 6e 75 69 64 20 74 61 67 73 20 74 st menuid tags t
3f80: 61 67 73 74 61 74 65 20 6d 65 6e 75 74 61 67 73 agstate menutags
3f90: 5d 20 7b 0a 09 66 6f 72 65 61 63 68 20 69 20 5b ] {..foreach i [
3fa0: 61 72 72 61 79 20 6e 61 6d 65 73 20 5f 77 69 64 array names _wid
3fb0: 67 65 74 20 24 70 61 74 68 2c 24 6a 2c 2a 5d 20 get $path,$j,*]
3fc0: 7b 0a 09 20 20 20 20 75 6e 73 65 74 20 5f 77 69 {.. unset _wi
3fd0: 64 67 65 74 28 24 69 29 0a 09 7d 0a 20 20 20 20 dget($i)..}.
3fe0: 7d 0a 20 20 20 20 23 20 65 6e 64 20 52 41 4d 53 }. # end RAMS
3ff0: 41 4e 20 63 68 61 6e 67 65 0a 0a 20 20 20 20 73 AN change.. s
4000: 65 74 20 63 6f 75 6e 74 20 30 0a 20 20 20 20 66 et count 0. f
4010: 6f 72 65 61 63 68 20 7b 6e 61 6d 65 20 74 61 67 oreach {name tag
4020: 73 20 6d 65 6e 75 69 64 20 74 65 61 72 6f 66 66 s menuid tearoff
4030: 20 65 6e 74 72 69 65 73 7d 20 24 64 65 73 63 6d entries} $descm
4040: 65 6e 75 20 7b 0a 09 73 65 74 20 6f 70 74 20 20 enu {..set opt
4050: 5b 5f 70 61 72 73 65 5f 6e 61 6d 65 20 24 6e 61 [_parse_name $na
4060: 6d 65 5d 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 me]..if {[string
4070: 20 6c 65 6e 67 74 68 20 24 6d 65 6e 75 69 64 5d length $menuid]
4080: 0a 09 20 20 20 20 26 26 20 21 5b 69 6e 66 6f 20 .. && ![info
4090: 65 78 69 73 74 73 20 5f 77 69 64 67 65 74 28 24 exists _widget($
40a0: 70 61 74 68 2c 6d 65 6e 75 69 64 2c 24 6d 65 6e path,menuid,$men
40b0: 75 69 64 29 5d 20 7d 20 7b 0a 09 20 20 20 20 23 uid)] } {.. #
40c0: 20 6d 65 6e 75 20 68 61 73 20 69 64 65 6e 74 69 menu has identi
40d0: 66 69 65 72 0a 09 20 20 20 20 23 20 77 65 20 75 fier.. # we u
40e0: 73 65 20 69 74 20 66 6f 72 20 69 74 73 20 70 61 se it for its pa
40f0: 74 68 6e 61 6d 65 2c 20 74 6f 20 65 6e 61 62 6c thname, to enabl
4100: 65 20 73 70 65 63 69 61 6c 20 6d 65 6e 75 20 65 e special menu e
4110: 6e 74 72 69 65 73 0a 09 20 20 20 20 23 20 28 68 ntries.. # (h
4120: 65 6c 70 2c 20 73 79 73 74 65 6d 2c 20 2e 2e 2e elp, system, ...
4130: 29 0a 09 20 20 20 20 73 65 74 20 6d 65 6e 75 20 ).. set menu
4140: 24 6d 65 6e 75 62 61 72 2e 24 6d 65 6e 75 69 64 $menubar.$menuid
4150: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 ..} else {..
4160: 73 65 74 20 6d 65 6e 75 20 24 6d 65 6e 75 62 61 set menu $menuba
4170: 72 2e 6d 65 6e 75 24 63 6f 75 6e 74 0a 09 7d 0a r.menu$count..}.
4180: 09 65 76 61 6c 20 5b 6c 69 73 74 20 24 6d 65 6e .eval [list $men
4190: 75 62 61 72 20 61 64 64 20 63 61 73 63 61 64 65 ubar add cascade
41a0: 5d 20 24 6f 70 74 20 5b 6c 69 73 74 20 2d 6d 65 ] $opt [list -me
41b0: 6e 75 20 24 6d 65 6e 75 5d 0a 09 65 76 61 6c 20 nu $menu]..eval
41c0: 5b 6c 69 73 74 20 6d 65 6e 75 20 24 6d 65 6e 75 [list menu $menu
41d0: 20 2d 74 65 61 72 6f 66 66 20 24 74 65 61 72 6f -tearoff $tearo
41e0: 66 66 5d 20 24 6d 65 6e 75 6f 70 74 73 20 24 6d ff] $menuopts $m
41f0: 65 66 6e 74 0a 09 66 6f 72 65 61 63 68 20 74 61 efnt..foreach ta
4200: 67 20 24 74 61 67 73 20 7b 0a 09 20 20 20 20 6c g $tags {.. l
4210: 61 70 70 65 6e 64 20 5f 77 69 64 67 65 74 28 24 append _widget($
4220: 70 61 74 68 2c 74 61 67 73 2c 24 74 61 67 29 20 path,tags,$tag)
4230: 24 6d 65 6e 75 62 61 72 20 24 63 6f 75 6e 74 0a $menubar $count.
4240: 09 20 20 20 20 23 20 65 72 69 63 6d 40 73 63 72 . # ericm@scr
4250: 69 70 74 69 63 73 3a 20 20 41 64 64 20 61 20 74 iptics: Add a t
4260: 61 67 73 74 61 74 65 20 74 72 61 63 6b 65 72 0a agstate tracker.
4270: 09 20 20 20 20 69 66 20 7b 20 21 5b 69 6e 66 6f . if { ![info
4280: 20 65 78 69 73 74 73 20 5f 77 69 64 67 65 74 28 exists _widget(
4290: 24 70 61 74 68 2c 74 61 67 73 74 61 74 65 2c 24 $path,tagstate,$
42a0: 74 61 67 29 5d 20 7d 20 7b 0a 09 09 73 65 74 20 tag)] } {...set
42b0: 5f 77 69 64 67 65 74 28 24 70 61 74 68 2c 74 61 _widget($path,ta
42c0: 67 73 74 61 74 65 2c 24 74 61 67 29 20 31 0a 09 gstate,$tag) 1..
42d0: 20 20 20 20 7d 0a 09 7d 0a 09 23 20 65 72 69 63 }..}..# eric
42e0: 6d 40 73 63 72 69 70 74 69 63 73 3a 20 20 41 64 m@scriptics: Ad
42f0: 64 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 6d d mapping from m
4300: 65 6e 75 20 69 74 65 6d 73 20 74 6f 20 74 61 67 enu items to tag
4310: 73 0a 09 73 65 74 20 5f 77 69 64 67 65 74 28 24 s..set _widget($
4320: 70 61 74 68 2c 6d 65 6e 75 74 61 67 73 2c 5b 6c path,menutags,[l
4330: 69 73 74 20 24 6d 65 6e 75 62 61 72 20 24 63 6f ist $menubar $co
4340: 75 6e 74 5d 29 20 24 74 61 67 73 0a 09 20 20 20 unt]) $tags..
4350: 20 0a 09 69 66 20 7b 20 5b 73 74 72 69 6e 67 20 ..if { [string
4360: 6c 65 6e 67 74 68 20 24 6d 65 6e 75 69 64 5d 20 length $menuid]
4370: 7d 20 7b 0a 09 20 20 20 20 23 20 6d 65 6e 75 20 } {.. # menu
4380: 68 61 73 20 69 64 65 6e 74 69 66 69 65 72 0a 09 has identifier..
4390: 20 20 20 20 73 65 74 20 5f 77 69 64 67 65 74 28 set _widget(
43a0: 24 70 61 74 68 2c 6d 65 6e 75 69 64 2c 24 6d 65 $path,menuid,$me
43b0: 6e 75 69 64 29 20 24 6d 65 6e 75 0a 09 7d 0a 09 nuid) $menu..}..
43c0: 5f 63 72 65 61 74 65 5f 65 6e 74 72 69 65 73 20 _create_entries
43d0: 24 70 61 74 68 20 24 6d 65 6e 75 20 24 6d 65 6e $path $menu $men
43e0: 75 6f 70 74 73 20 24 65 6e 74 72 69 65 73 0a 09 uopts $entries..
43f0: 69 6e 63 72 20 63 6f 75 6e 74 0a 20 20 20 20 7d incr count. }
4400: 0a 7d 0a 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d .}...# ---------
4410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4450: 2d 2d 2d 0a 23 20 20 43 6f 6d 6d 61 6e 64 20 4d ---.# Command M
4460: 61 69 6e 46 72 61 6d 65 3a 3a 5f 63 72 65 61 74 ainFrame::_creat
4470: 65 5f 65 6e 74 72 69 65 73 0a 23 20 2d 2d 2d 2d e_entries.# ----
4480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
44a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
44b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
44c0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f 63 20 4d 61 --------.proc Ma
44d0: 69 6e 46 72 61 6d 65 3a 3a 5f 63 72 65 61 74 65 inFrame::_create
44e0: 5f 65 6e 74 72 69 65 73 20 7b 20 70 61 74 68 20 _entries { path
44f0: 6d 65 6e 75 20 6d 65 6e 75 6f 70 74 73 20 65 6e menu menuopts en
4500: 74 72 69 65 73 20 7d 20 7b 0a 20 20 20 20 76 61 tries } {. va
4510: 72 69 61 62 6c 65 20 5f 77 69 64 67 65 74 0a 0a riable _widget..
4520: 20 20 20 20 73 65 74 20 63 6f 75 6e 74 20 20 20 set count
4530: 20 20 20 5b 24 6d 65 6e 75 20 63 67 65 74 20 2d [$menu cget -
4540: 74 65 61 72 6f 66 66 5d 0a 20 20 20 20 73 65 74 tearoff]. set
4550: 20 72 65 67 69 73 74 65 72 65 64 20 30 0a 20 20 registered 0.
4560: 20 20 66 6f 72 65 61 63 68 20 65 6e 74 72 79 20 foreach entry
4570: 24 65 6e 74 72 69 65 73 20 7b 0a 09 73 65 74 20 $entries {..set
4580: 6c 65 6e 20 20 5b 6c 6c 65 6e 67 74 68 20 24 65 len [llength $e
4590: 6e 74 72 79 5d 0a 09 73 65 74 20 74 79 70 65 20 ntry]..set type
45a0: 5b 6c 69 6e 64 65 78 20 24 65 6e 74 72 79 20 30 [lindex $entry 0
45b0: 5d 0a 0a 09 69 66 20 7b 20 5b 73 74 72 69 6e 67 ]...if { [string
45c0: 20 65 71 75 61 6c 20 24 74 79 70 65 20 22 73 65 equal $type "se
45d0: 70 61 72 61 74 6f 72 22 5d 20 7d 20 7b 0a 09 20 parator"] } {..
45e0: 20 20 20 24 6d 65 6e 75 20 61 64 64 20 73 65 70 $menu add sep
45f0: 61 72 61 74 6f 72 0a 09 20 20 20 20 69 6e 63 72 arator.. incr
4600: 20 63 6f 75 6e 74 0a 09 20 20 20 20 63 6f 6e 74 count.. cont
4610: 69 6e 75 65 0a 09 7d 0a 0a 09 23 20 65 6e 74 72 inue..}...# entr
4620: 79 20 6e 61 6d 65 20 61 6e 64 20 74 61 67 73 0a y name and tags.
4630: 09 73 65 74 20 6f 70 74 20 20 5b 5f 70 61 72 73 .set opt [_pars
4640: 65 5f 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 e_name [lindex $
4650: 65 6e 74 72 79 20 31 5d 5d 0a 09 73 65 74 20 74 entry 1]]..set t
4660: 61 67 73 20 5b 6c 69 6e 64 65 78 20 24 65 6e 74 ags [lindex $ent
4670: 72 79 20 32 5d 0a 09 66 6f 72 65 61 63 68 20 74 ry 2]..foreach t
4680: 61 67 20 24 74 61 67 73 20 7b 0a 09 20 20 20 20 ag $tags {..
4690: 6c 61 70 70 65 6e 64 20 5f 77 69 64 67 65 74 28 lappend _widget(
46a0: 24 70 61 74 68 2c 74 61 67 73 2c 24 74 61 67 29 $path,tags,$tag)
46b0: 20 24 6d 65 6e 75 20 24 63 6f 75 6e 74 0a 09 20 $menu $count..
46c0: 20 20 20 23 20 65 72 69 63 6d 40 73 63 72 69 70 # ericm@scrip
46d0: 74 69 63 73 3a 20 20 41 64 64 20 61 20 74 61 67 tics: Add a tag
46e0: 73 74 61 74 65 20 74 72 61 63 6b 65 72 0a 09 20 state tracker..
46f0: 20 20 20 69 66 20 7b 20 21 5b 69 6e 66 6f 20 65 if { ![info e
4700: 78 69 73 74 73 20 5f 77 69 64 67 65 74 28 24 70 xists _widget($p
4710: 61 74 68 2c 74 61 67 73 74 61 74 65 2c 24 74 61 ath,tagstate,$ta
4720: 67 29 5d 20 7d 20 7b 0a 09 09 73 65 74 20 5f 77 g)] } {...set _w
4730: 69 64 67 65 74 28 24 70 61 74 68 2c 74 61 67 73 idget($path,tags
4740: 74 61 74 65 2c 24 74 61 67 29 20 31 0a 09 20 20 tate,$tag) 1..
4750: 20 20 7d 0a 09 7d 0a 09 23 20 65 72 69 63 6d 40 }..}..# ericm@
4760: 73 63 72 69 70 74 69 63 73 3a 20 20 41 64 64 20 scriptics: Add
4770: 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 6d 65 6e mapping from men
4780: 75 20 69 74 65 6d 73 20 74 6f 20 74 61 67 73 0a u items to tags.
4790: 09 73 65 74 20 5f 77 69 64 67 65 74 28 24 70 61 .set _widget($pa
47a0: 74 68 2c 6d 65 6e 75 74 61 67 73 2c 5b 6c 69 73 th,menutags,[lis
47b0: 74 20 24 6d 65 6e 75 20 24 63 6f 75 6e 74 5d 29 t $menu $count])
47c0: 20 24 74 61 67 73 0a 0a 09 69 66 20 7b 5b 73 74 $tags...if {[st
47d0: 72 69 6e 67 20 65 71 75 61 6c 20 24 74 79 70 65 ring equal $type
47e0: 20 22 63 61 73 63 61 64 65 22 5d 20 7c 7c 20 5b "cascade"] || [
47f0: 73 74 72 69 6e 67 20 65 71 75 61 6c 20 24 74 79 string equal $ty
4800: 70 65 20 22 63 61 73 63 61 64 22 5d 7d 20 7b 0a pe "cascad"]} {.
4810: 09 20 20 20 20 73 65 74 20 6d 65 6e 75 69 64 20 . set menuid
4820: 20 5b 6c 69 6e 64 65 78 20 24 65 6e 74 72 79 20 [lindex $entry
4830: 33 5d 0a 09 20 20 20 20 73 65 74 20 74 65 61 72 3].. set tear
4840: 6f 66 66 20 5b 6c 69 6e 64 65 78 20 24 65 6e 74 off [lindex $ent
4850: 72 79 20 34 5d 0a 09 20 20 20 20 73 65 74 20 73 ry 4].. set s
4860: 75 62 6d 65 6e 75 20 24 6d 65 6e 75 2e 6d 65 6e ubmenu $menu.men
4870: 75 24 63 6f 75 6e 74 0a 09 20 20 20 20 65 76 61 u$count.. eva
4880: 6c 20 5b 6c 69 73 74 20 24 6d 65 6e 75 20 61 64 l [list $menu ad
4890: 64 20 63 61 73 63 61 64 65 5d 20 24 6f 70 74 20 d cascade] $opt
48a0: 5b 6c 69 73 74 20 2d 6d 65 6e 75 20 24 73 75 62 [list -menu $sub
48b0: 6d 65 6e 75 5d 0a 09 20 20 20 20 65 76 61 6c 20 menu].. eval
48c0: 5b 6c 69 73 74 20 6d 65 6e 75 20 24 73 75 62 6d [list menu $subm
48d0: 65 6e 75 20 2d 74 65 61 72 6f 66 66 20 24 74 65 enu -tearoff $te
48e0: 61 72 6f 66 66 5d 20 24 6d 65 6e 75 6f 70 74 73 aroff] $menuopts
48f0: 0a 09 20 20 20 20 69 66 20 7b 20 5b 73 74 72 69 .. if { [stri
4900: 6e 67 20 6c 65 6e 67 74 68 20 24 6d 65 6e 75 69 ng length $menui
4910: 64 5d 20 7d 20 7b 0a 09 09 23 20 6d 65 6e 75 20 d] } {...# menu
4920: 68 61 73 20 69 64 65 6e 74 69 66 69 65 72 0a 09 has identifier..
4930: 09 73 65 74 20 5f 77 69 64 67 65 74 28 24 70 61 .set _widget($pa
4940: 74 68 2c 6d 65 6e 75 69 64 2c 24 6d 65 6e 75 69 th,menuid,$menui
4950: 64 29 20 24 73 75 62 6d 65 6e 75 0a 09 20 20 20 d) $submenu..
4960: 20 7d 0a 09 20 20 20 20 5f 63 72 65 61 74 65 5f }.. _create_
4970: 65 6e 74 72 69 65 73 20 24 70 61 74 68 20 24 73 entries $path $s
4980: 75 62 6d 65 6e 75 20 24 6d 65 6e 75 6f 70 74 73 ubmenu $menuopts
4990: 20 5b 6c 69 6e 64 65 78 20 24 65 6e 74 72 79 20 [lindex $entry
49a0: 35 5d 0a 09 20 20 20 20 69 6e 63 72 20 63 6f 75 5].. incr cou
49b0: 6e 74 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 nt.. continue
49c0: 0a 09 7d 0a 0a 09 23 20 65 6e 74 72 79 20 68 65 ..}...# entry he
49d0: 6c 70 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 09 lp description..
49e0: 73 65 74 20 64 65 73 63 20 5b 6c 69 6e 64 65 78 set desc [lindex
49f0: 20 24 65 6e 74 72 79 20 33 5d 0a 09 69 66 20 7b $entry 3]..if {
4a00: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length
4a10: 24 64 65 73 63 5d 20 7d 20 7b 0a 09 20 20 20 20 $desc] } {..
4a20: 69 66 20 7b 20 21 24 72 65 67 69 73 74 65 72 65 if { !$registere
4a30: 64 20 7d 20 7b 0a 09 09 44 79 6e 61 6d 69 63 48 d } {...DynamicH
4a40: 65 6c 70 3a 3a 72 65 67 69 73 74 65 72 20 24 6d elp::register $m
4a50: 65 6e 75 20 6d 65 6e 75 20 5b 57 69 64 67 65 74 enu menu [Widget
4a60: 3a 3a 67 65 74 6f 70 74 69 6f 6e 20 24 70 61 74 ::getoption $pat
4a70: 68 20 2d 74 65 78 74 76 61 72 69 61 62 6c 65 5d h -textvariable]
4a80: 0a 09 09 73 65 74 20 72 65 67 69 73 74 65 72 65 ...set registere
4a90: 64 20 31 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 d 1.. }..
4aa0: 44 79 6e 61 6d 69 63 48 65 6c 70 3a 3a 72 65 67 DynamicHelp::reg
4ab0: 69 73 74 65 72 20 24 6d 65 6e 75 20 6d 65 6e 75 ister $menu menu
4ac0: 65 6e 74 72 79 20 24 63 6f 75 6e 74 20 24 64 65 entry $count $de
4ad0: 73 63 0a 09 7d 0a 0a 09 23 20 65 6e 74 72 79 20 sc..}...# entry
4ae0: 61 63 63 65 6c 65 72 61 74 6f 72 0a 09 73 65 74 accelerator..set
4af0: 20 61 63 63 65 6c 20 5b 5f 70 61 72 73 65 5f 61 accel [_parse_a
4b00: 63 63 65 6c 65 72 61 74 6f 72 20 5b 6c 69 6e 64 ccelerator [lind
4b10: 65 78 20 24 65 6e 74 72 79 20 34 5d 5d 0a 09 69 ex $entry 4]]..i
4b20: 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 24 61 63 f { [llength $ac
4b30: 63 65 6c 5d 20 7d 20 7b 0a 09 20 20 20 20 6c 61 cel] } {.. la
4b40: 70 70 65 6e 64 20 6f 70 74 20 2d 61 63 63 65 6c ppend opt -accel
4b50: 65 72 61 74 6f 72 20 5b 6c 69 6e 64 65 78 20 24 erator [lindex $
4b60: 61 63 63 65 6c 20 30 5d 0a 09 20 20 20 20 23 20 accel 0].. #
4b70: 52 41 4d 53 41 4e 0a 09 20 20 20 20 69 66 20 7b RAMSAN.. if {
4b80: 20 5b 6c 69 6e 64 65 78 20 24 61 63 63 65 6c 20 [lindex $accel
4b90: 31 5d 20 21 3d 20 22 22 20 7d 20 7b 0a 09 09 62 1] != "" } {...b
4ba0: 69 6e 64 20 24 5f 77 69 64 67 65 74 28 24 70 61 ind $_widget($pa
4bb0: 74 68 2c 74 6f 70 29 20 5b 6c 69 6e 64 65 78 20 th,top) [lindex
4bc0: 24 61 63 63 65 6c 20 31 5d 20 5b 6c 69 73 74 20 $accel 1] [list
4bd0: 24 6d 65 6e 75 20 69 6e 76 6f 6b 65 20 24 63 6f $menu invoke $co
4be0: 75 6e 74 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a unt].. }..}..
4bf0: 09 23 20 75 73 65 72 20 6f 70 74 69 6f 6e 73 0a .# user options.
4c00: 09 73 65 74 20 75 73 65 72 6f 70 74 20 5b 6c 72 .set useropt [lr
4c10: 61 6e 67 65 20 24 65 6e 74 72 79 20 35 20 65 6e ange $entry 5 en
4c20: 64 5d 0a 09 69 66 20 7b 20 5b 73 74 72 69 6e 67 d]..if { [string
4c30: 20 65 71 75 61 6c 20 24 74 79 70 65 20 22 63 6f equal $type "co
4c40: 6d 6d 61 6e 64 22 5d 20 7c 7c 0a 09 20 20 20 20 mmand"] ||..
4c50: 20 5b 73 74 72 69 6e 67 20 65 71 75 61 6c 20 24 [string equal $
4c60: 74 79 70 65 20 22 72 61 64 69 6f 62 75 74 74 6f type "radiobutto
4c70: 6e 22 5d 20 7c 7c 0a 09 20 20 20 20 20 5b 73 74 n"] ||.. [st
4c80: 72 69 6e 67 20 65 71 75 61 6c 20 24 74 79 70 65 ring equal $type
4c90: 20 22 63 68 65 63 6b 62 75 74 74 6f 6e 22 5d 20 "checkbutton"]
4ca0: 7d 20 7b 0a 09 20 20 20 20 65 76 61 6c 20 5b 6c } {.. eval [l
4cb0: 69 73 74 20 24 6d 65 6e 75 20 61 64 64 20 24 74 ist $menu add $t
4cc0: 79 70 65 5d 20 24 6f 70 74 20 24 75 73 65 72 6f ype] $opt $usero
4cd0: 70 74 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 pt..} else {..
4ce0: 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 return -code e
4cf0: 72 72 6f 72 20 22 69 6e 76 61 6c 69 64 20 6d 65 rror "invalid me
4d00: 6e 75 20 74 79 70 65 20 5c 22 24 74 79 70 65 5c nu type \"$type\
4d10: 22 22 0a 09 7d 0a 09 69 6e 63 72 20 63 6f 75 6e ""..}..incr coun
4d20: 74 0a 20 20 20 20 7d 0a 7d 0a 0a 0a 23 20 2d 2d t. }.}...# --
4d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 20 43 6f ----------.# Co
4d80: 6d 6d 61 6e 64 20 4d 61 69 6e 46 72 61 6d 65 3a mmand MainFrame:
4d90: 3a 5f 70 61 72 73 65 5f 6e 61 6d 65 0a 23 20 2d :_parse_name.# -
4da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 72 6f 63 -----------.proc
4df0: 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 5f 70 61 72 MainFrame::_par
4e00: 73 65 5f 6e 61 6d 65 20 7b 20 6d 65 6e 75 6e 61 se_name { menuna
4e10: 6d 65 20 7d 20 7b 0a 20 20 20 20 73 65 74 20 69 me } {. set i
4e20: 64 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 dx [string first
4e30: 20 22 26 22 20 24 6d 65 6e 75 6e 61 6d 65 5d 0a "&" $menuname].
4e40: 20 20 20 20 69 66 20 7b 20 24 69 64 78 20 3d 3d if { $idx ==
4e50: 20 2d 31 20 7d 20 7b 0a 09 72 65 74 75 72 6e 20 -1 } {..return
4e60: 5b 6c 69 73 74 20 2d 6c 61 62 65 6c 20 24 6d 65 [list -label $me
4e70: 6e 75 6e 61 6d 65 5d 0a 20 20 20 20 7d 20 65 6c nuname]. } el
4e80: 73 65 20 7b 0a 09 73 65 74 20 62 65 67 20 5b 73 se {..set beg [s
4e90: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6d 65 6e tring range $men
4ea0: 75 6e 61 6d 65 20 30 20 5b 65 78 70 72 20 7b 24 uname 0 [expr {$
4eb0: 69 64 78 2d 31 7d 5d 5d 0a 09 73 65 74 20 65 6e idx-1}]]..set en
4ec0: 64 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 d [string range
4ed0: 24 6d 65 6e 75 6e 61 6d 65 20 5b 65 78 70 72 20 $menuname [expr
4ee0: 7b 24 69 64 78 2b 31 7d 5d 20 65 6e 64 5d 0a 09 {$idx+1}] end]..
4ef0: 61 70 70 65 6e 64 20 62 65 67 20 24 65 6e 64 0a append beg $end.
4f00: 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 2d 6c .return [list -l
4f10: 61 62 65 6c 20 24 62 65 67 20 2d 75 6e 64 65 72 abel $beg -under
4f20: 6c 69 6e 65 20 24 69 64 78 5d 0a 20 20 20 20 7d line $idx]. }
4f30: 0a 7d 0a 0a 0a 23 20 4d 61 69 6e 46 72 61 6d 65 .}...# MainFrame
4f40: 3a 3a 5f 70 61 72 73 65 5f 61 63 63 65 6c 65 72 ::_parse_acceler
4f50: 61 74 6f 72 20 2d 2d 0a 23 0a 23 20 20 20 20 20 ator --.#.#
4f60: 20 20 20 47 69 76 65 6e 20 61 20 6b 65 79 20 63 Given a key c
4f70: 6f 6d 62 6f 20 64 65 73 63 72 69 70 74 69 6f 6e ombo description
4f80: 2c 20 63 6f 6e 73 74 72 75 63 74 20 61 6e 20 61 , construct an a
4f90: 70 70 72 6f 70 72 69 61 74 65 20 68 75 6d 61 6e ppropriate human
4fa0: 20 72 65 61 64 61 62 6c 65 0a 23 20 20 20 20 20 readable.#
4fb0: 20 20 20 73 74 72 69 6e 67 20 28 66 6f 72 20 64 string (for d
4fc0: 69 73 70 6c 61 79 20 6f 6e 20 61 73 20 61 20 6d isplay on as a m
4fd0: 65 6e 75 20 61 63 63 65 6c 65 72 61 74 6f 72 29 enu accelerator)
4fe0: 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65 73 70 and the corresp
4ff0: 6f 6e 64 69 6e 67 0a 23 20 20 20 20 20 20 20 20 onding.#
5000: 62 69 6e 64 20 65 76 65 6e 74 2e 0a 23 0a 23 20 bind event..#.#
5010: 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 20 20 Arguments:.#
5020: 20 20 20 20 64 65 73 63 20 20 20 20 20 20 20 20 desc
5030: 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 a list with the
5040: 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 following format
5050: 3a 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 :.#
5060: 20 20 20 20 20 20 20 20 20 20 20 3f 73 65 71 75 ?sequ
5070: 65 6e 63 65 3f 20 6b 65 79 0a 23 20 20 20 20 20 ence? key.#
5080: 20 20 20 20 20 20 20 20 20 20 20 73 65 71 75 65 seque
5090: 6e 63 65 20 6d 61 79 20 62 65 20 4e 6f 6e 65 2c nce may be None,
50a0: 20 43 74 72 6c 2c 20 41 6c 74 2c 20 6f 72 20 43 Ctrl, Alt, or C
50b0: 74 72 6c 41 6c 74 0a 23 20 20 20 20 20 20 20 20 trlAlt.#
50c0: 20 20 20 20 20 20 20 20 6b 65 79 20 6d 61 79 20 key may
50d0: 62 65 20 61 6e 79 20 6b 65 79 0a 23 0a 23 20 52 be any key.#.# R
50e0: 65 73 75 6c 74 73 3a 0a 23 20 20 20 20 20 20 20 esults:.#
50f0: 20 7b 61 63 63 65 6c 20 65 76 65 6e 74 7d 20 20 {accel event}
5100: 20 20 20 20 20 20 61 20 6c 69 73 74 20 63 6f 6e a list con
5110: 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63 63 65 taining the acce
5120: 6c 65 72 61 74 6f 72 20 73 74 72 69 6e 67 20 61 lerator string a
5130: 6e 64 20 74 68 65 20 65 76 65 6e 74 0a 0a 70 72 nd the event..pr
5140: 6f 63 20 4d 61 69 6e 46 72 61 6d 65 3a 3a 5f 70 oc MainFrame::_p
5150: 61 72 73 65 5f 61 63 63 65 6c 65 72 61 74 6f 72 arse_accelerator
5160: 20 7b 20 64 65 73 63 20 7d 20 7b 0a 20 20 20 20 { desc } {.
5170: 0a 20 20 20 20 69 66 20 7b 20 24 3a 3a 74 63 6c . if { $::tcl
5180: 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f _platform(platfo
5190: 72 6d 29 20 65 71 20 22 77 69 6e 64 6f 77 73 22 rm) eq "windows"
51a0: 20 7d 20 7b 0a 09 73 65 74 20 63 6f 6e 74 72 6f } {..set contro
51b0: 6c 20 43 6f 6e 74 72 6f 6c 0a 09 73 65 74 20 63 l Control..set c
51c0: 6f 6e 74 72 6f 6c 5f 74 78 74 20 43 74 72 6c 0a ontrol_txt Ctrl.
51d0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 5b } elseif { [
51e0: 74 6b 20 77 69 6e 64 6f 77 69 6e 67 73 79 73 74 tk windowingsyst
51f0: 65 6d 5d 20 65 71 20 22 61 71 75 61 22 20 7d 20 em] eq "aqua" }
5200: 7b 0a 09 73 65 74 20 63 6f 6e 74 72 6f 6c 20 43 {..set control C
5210: 6f 6d 6d 61 6e 64 0a 09 73 65 74 20 63 6f 6e 74 ommand..set cont
5220: 72 6f 6c 5f 74 78 74 20 43 6f 6d 6d 61 6e 64 0a rol_txt Command.
5230: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 73 65 } else {..se
5240: 74 20 63 6f 6e 74 72 6f 6c 20 43 6f 6e 74 72 6f t control Contro
5250: 6c 0a 09 73 65 74 20 63 6f 6e 74 72 6f 6c 5f 74 l..set control_t
5260: 78 74 20 43 74 72 6c 0a 20 20 20 20 7d 0a 20 20 xt Ctrl. }.
5270: 20 20 0a 20 20 20 20 69 66 20 7b 20 5b 6c 6c 65 . if { [lle
5280: 6e 67 74 68 20 24 64 65 73 63 5d 20 3d 3d 20 31 ngth $desc] == 1
5290: 20 7d 20 7b 0a 09 73 65 74 20 73 65 71 20 4e 6f } {..set seq No
52a0: 6e 65 0a 09 73 65 74 20 6b 65 79 20 5b 73 74 72 ne..set key [str
52b0: 69 6e 67 20 74 6f 6c 6f 77 65 72 20 5b 6c 69 6e ing tolower [lin
52c0: 64 65 78 20 24 64 65 73 63 20 30 5d 5d 0a 09 23 dex $desc 0]]..#
52d0: 20 52 41 4d 53 41 4e 20 63 68 61 6e 67 65 64 20 RAMSAN changed
52e0: 66 72 6f 6d 20 7b 66 31 3f 5b 30 2d 39 5d 7d 20 from {f1?[0-9]}
52f0: 74 6f 20 7b 66 31 3f 5b 30 2d 39 5d 2b 7d 0a 09 to {f1?[0-9]+}..
5300: 23 20 49 66 20 74 68 65 20 6b 65 79 20 69 73 20 # If the key is
5310: 61 6e 20 46 20 6b 65 79 20 28 69 65 2c 20 46 31 an F key (ie, F1
5320: 2c 20 46 32 2c 20 65 74 63 29 2c 20 69 74 20 68 , F2, etc), it h
5330: 61 73 20 74 6f 20 62 65 20 63 61 70 69 74 61 6c as to be capital
5340: 69 7a 65 64 0a 09 69 66 20 7b 5b 72 65 67 65 78 ized..if {[regex
5350: 70 20 7b 66 31 3f 5b 30 2d 39 5d 2b 7d 20 24 6b p {f1?[0-9]+} $k
5360: 65 79 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 ey]} {.. set
5370: 6b 65 79 20 5b 73 74 72 69 6e 67 20 74 6f 75 70 key [string toup
5380: 70 65 72 20 24 6b 65 79 5d 0a 09 7d 0a 20 20 20 per $key]..}.
5390: 20 7d 20 65 6c 73 65 69 66 20 7b 20 5b 6c 6c 65 } elseif { [lle
53a0: 6e 67 74 68 20 24 64 65 73 63 5d 20 3d 3d 20 32 ngth $desc] == 2
53b0: 20 7d 20 7b 0a 09 73 65 74 20 73 65 71 20 5b 6c } {..set seq [l
53c0: 69 6e 64 65 78 20 24 64 65 73 63 20 30 5d 0a 09 index $desc 0]..
53d0: 73 65 74 20 6b 65 79 20 5b 73 74 72 69 6e 67 20 set key [string
53e0: 74 6f 6c 6f 77 65 72 20 5b 6c 69 6e 64 65 78 20 tolower [lindex
53f0: 24 64 65 73 63 20 31 5d 5d 0a 09 23 20 52 41 4d $desc 1]]..# RAM
5400: 53 41 4e 20 63 68 61 6e 67 65 64 20 66 72 6f 6d SAN changed from
5410: 20 7b 66 31 3f 5b 30 2d 39 5d 7d 20 74 6f 20 7b {f1?[0-9]} to {
5420: 66 31 3f 5b 30 2d 39 5d 2b 7d 0a 09 23 20 49 66 f1?[0-9]+}..# If
5430: 20 74 68 65 20 6b 65 79 20 69 73 20 61 6e 20 46 the key is an F
5440: 20 6b 65 79 20 28 69 65 2c 20 46 31 2c 20 46 32 key (ie, F1, F2
5450: 2c 20 65 74 63 29 2c 20 69 74 20 68 61 73 20 74 , etc), it has t
5460: 6f 20 62 65 20 63 61 70 69 74 61 6c 69 7a 65 64 o be capitalized
5470: 0a 09 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 66 ..if {[regexp {f
5480: 31 3f 5b 30 2d 39 5d 2b 7d 20 24 6b 65 79 5d 7d 1?[0-9]+} $key]}
5490: 20 7b 0a 09 20 20 20 20 73 65 74 20 6b 65 79 20 {.. set key
54a0: 5b 73 74 72 69 6e 67 20 74 6f 75 70 70 65 72 20 [string toupper
54b0: 24 6b 65 79 5d 0a 09 7d 0a 20 20 20 20 7d 20 65 $key]..}. } e
54c0: 6c 73 65 20 7b 0a 09 72 65 74 75 72 6e 20 7b 7d lse {..return {}
54d0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 77 69 74 63 . }. switc
54e0: 68 20 2d 2d 20 24 73 65 71 20 7b 0a 09 4e 6f 6e h -- $seq {..Non
54f0: 65 20 7b 0a 09 20 20 20 20 73 65 74 20 61 63 63 e {.. set acc
5500: 65 6c 20 22 5b 73 74 72 69 6e 67 20 74 6f 75 70 el "[string toup
5510: 70 65 72 20 24 6b 65 79 5d 22 0a 09 20 20 20 20 per $key]"..
5520: 73 65 74 20 65 76 65 6e 74 20 22 3c 4b 65 79 2d set event "<Key-
5530: 24 6b 65 79 3e 22 0a 09 7d 0a 09 43 74 72 6c 20 $key>"..}..Ctrl
5540: 7b 0a 09 20 20 20 20 73 65 74 20 61 63 63 65 6c {.. set accel
5550: 20 22 24 63 6f 6e 74 72 6f 6c 5f 74 78 74 2b 5b "$control_txt+[
5560: 73 74 72 69 6e 67 20 74 6f 75 70 70 65 72 20 24 string toupper $
5570: 6b 65 79 5d 22 0a 09 20 20 20 20 73 65 74 20 65 key]".. set e
5580: 76 65 6e 74 20 22 3c 24 63 6f 6e 74 72 6f 6c 2d vent "<$control-
5590: 4b 65 79 2d 24 6b 65 79 3e 22 0a 09 7d 0a 09 50 Key-$key>"..}..P
55a0: 72 69 6e 74 20 7b 0a 09 20 20 20 20 23 20 52 41 rint {.. # RA
55b0: 4d 53 41 4e 0a 09 20 20 20 20 73 65 74 20 61 63 MSAN.. set ac
55c0: 63 65 6c 20 5b 6c 69 6e 64 65 78 20 24 64 65 73 cel [lindex $des
55d0: 63 20 31 5d 0a 09 20 20 20 20 73 65 74 20 65 76 c 1].. set ev
55e0: 65 6e 74 20 22 22 0a 09 7d 0a 09 53 68 69 66 74 ent ""..}..Shift
55f0: 20 7b 0a 09 20 20 20 20 23 20 52 41 4d 53 41 4e {.. # RAMSAN
5600: 0a 09 20 20 20 20 73 65 74 20 61 63 63 65 6c 20 .. set accel
5610: 22 53 68 69 66 74 2b 5b 73 74 72 69 6e 67 20 74 "Shift+[string t
5620: 6f 75 70 70 65 72 20 24 6b 65 79 5d 22 0a 09 20 oupper $key]"..
5630: 20 20 20 73 65 74 20 65 76 65 6e 74 20 22 3c 53 set event "<S
5640: 68 69 66 74 2d 4b 65 79 2d 5b 73 74 72 69 6e 67 hift-Key-[string
5650: 20 74 6f 75 70 70 65 72 20 24 6b 65 79 5d 3e 22 toupper $key]>"
5660: 0a 09 7d 0a 09 53 68 69 66 74 43 74 72 6c 20 7b ..}..ShiftCtrl {
5670: 0a 09 20 20 20 20 23 20 52 41 4d 53 41 4e 0a 09 .. # RAMSAN..
5680: 20 20 20 20 73 65 74 20 61 63 63 65 6c 20 22 53 set accel "S
5690: 68 69 66 74 2b 24 63 6f 6e 74 72 6f 6c 5f 74 78 hift+$control_tx
56a0: 74 2b 5b 73 74 72 69 6e 67 20 74 6f 75 70 70 65 t+[string touppe
56b0: 72 20 24 6b 65 79 5d 22 0a 09 20 20 20 20 73 65 r $key]".. se
56c0: 74 20 65 76 65 6e 74 20 22 3c 53 68 69 66 74 2d t event "<Shift-
56d0: 24 63 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 5b 73 74 $control-Key-[st
56e0: 72 69 6e 67 20 74 6f 75 70 70 65 72 20 24 6b 65 ring toupper $ke
56f0: 79 5d 3e 22 0a 09 7d 0a 09 41 6c 74 20 7b 0a 09 y]>"..}..Alt {..
5700: 20 20 20 20 73 65 74 20 61 63 63 65 6c 20 22 41 set accel "A
5710: 6c 74 2b 5b 73 74 72 69 6e 67 20 74 6f 75 70 70 lt+[string toupp
5720: 65 72 20 24 6b 65 79 5d 22 0a 09 20 20 20 20 73 er $key]".. s
5730: 65 74 20 65 76 65 6e 74 20 22 3c 41 6c 74 2d 4b et event "<Alt-K
5740: 65 79 2d 24 6b 65 79 3e 22 0a 09 7d 0a 09 43 74 ey-$key>"..}..Ct
5750: 72 6c 41 6c 74 20 7b 0a 09 20 20 20 20 73 65 74 rlAlt {.. set
5760: 20 61 63 63 65 6c 20 22 24 63 6f 6e 74 72 6f 6c accel "$control
5770: 5f 74 78 74 2b 41 6c 74 2b 5b 73 74 72 69 6e 67 _txt+Alt+[string
5780: 20 74 6f 75 70 70 65 72 20 24 6b 65 79 5d 22 0a toupper $key]".
5790: 09 20 20 20 20 73 65 74 20 65 76 65 6e 74 20 22 . set event "
57a0: 3c 24 63 6f 6e 74 72 6f 6c 2d 41 6c 74 2d 4b 65 <$control-Alt-Ke
57b0: 79 2d 24 6b 65 79 3e 22 0a 09 7d 0a 09 64 65 66 y-$key>"..}..def
57c0: 61 75 6c 74 20 7b 0a 09 20 20 20 20 72 65 74 75 ault {.. retu
57d0: 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 rn -code error "
57e0: 69 6e 76 61 6c 69 64 20 61 63 63 65 6c 65 72 61 invalid accelera
57f0: 74 6f 72 20 63 6f 64 65 20 24 73 65 71 22 0a 09 tor code $seq"..
5800: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 }. }. retu
5810: 72 6e 20 5b 6c 69 73 74 20 24 61 63 63 65 6c 20 rn [list $accel
5820: 24 65 76 65 6e 74 5d 0a 7d 0a $event].}.