Not logged in
Hex Artifact Content

Artifact 8c36c4b61648479ac6afb54a49e885a03e75ebb6:

  • File addons/bwidgetR1.6/mainframe.tcl — part of check-in [f8e3ba8cce] at 2011-06-30 18:30:46 on branch trunk — added bwidgetR1.6 supergrid and supertext to fossil (user: ramsan size: 22570)

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].}.