Hex Artifact Content

Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to tclconference@googlegroups.com
or submit via the online form by Sep 9.

Artifact b589780615452e4149dcb3c5fcf3c5189a7a4f66:


0000: 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 20 43 6f  # -*- tcl -*- Co
0010: 70 79 72 69 67 68 74 20 28 63 29 20 32 30 31 32  pyright (c) 2012
0020: 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69 65 73   Andreas Kupries
0030: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23  .# # ## ### ####
0040: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0050: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
0070: 23 20 53 75 70 70 6f 72 74 20 66 6f 72 20 74 68  # Support for th
0080: 65 20 73 74 61 6e 64 61 72 64 20 67 75 69 20 72  e standard gui r
0090: 65 63 69 70 65 2e 0a 0a 23 20 23 20 23 23 20 23  ecipe...# # ## #
00a0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
00b0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
00c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00d0: 23 23 23 23 23 0a 23 23 20 45 78 70 6f 72 74 20  #####.## Export 
00e0: 28 69 6e 74 65 72 6e 61 6c 73 20 2d 20 72 65 63  (internals - rec
00f0: 69 70 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 2c  ipe definitions,
0100: 20 6f 74 68 65 72 20 75 74 69 6c 69 74 69 65 73   other utilities
0110: 29 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  )..namespace eva
0120: 6c 20 3a 3a 6b 65 74 74 6c 65 3a 3a 67 75 69 20  l ::kettle::gui 
0130: 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  {.    namespace 
0140: 65 78 70 6f 72 74 20 7b 5b 61 2d 7a 5d 2a 7d 0a  export {[a-z]*}.
0150: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 6e      namespace en
0160: 73 65 6d 62 6c 65 20 63 72 65 61 74 65 0a 7d 0a  semble create.}.
0170: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23  .# # ## ### ####
0180: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0190: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
01a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
01b0: 23 20 53 74 61 74 65 0a 0a 6e 61 6d 65 73 70 61  # State..namespa
01c0: 63 65 20 65 76 61 6c 20 3a 3a 6b 65 74 74 6c 65  ce eval ::kettle
01d0: 3a 3a 67 75 69 20 7b 0a 20 20 20 20 76 61 72 69  ::gui {.    vari
01e0: 61 62 6c 65 20 61 63 74 69 6f 6e 73 20 20 20 20  able actions    
01f0: 20 7b 7d 0a 20 20 20 20 76 61 72 69 61 62 6c 65   {}.    variable
0200: 20 6f 70 74 69 6f 6e 73 20 20 20 20 20 7b 7d 0a   options     {}.
0210: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69  .    namespace i
0220: 6d 70 6f 72 74 20 3a 3a 6b 65 74 74 6c 65 3a 3a  mport ::kettle::
0230: 69 6f 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  io.    namespace
0240: 20 69 6d 70 6f 72 74 20 3a 3a 6b 65 74 74 6c 65   import ::kettle
0250: 3a 3a 6f 76 61 6c 69 64 61 74 65 0a 20 20 20 20  ::ovalidate.    
0260: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
0270: 20 3a 3a 6b 65 74 74 6c 65 3a 3a 6f 70 74 69 6f   ::kettle::optio
0280: 6e 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  n.    namespace 
0290: 69 6d 70 6f 72 74 20 3a 3a 6b 65 74 74 6c 65 3a  import ::kettle:
02a0: 3a 72 65 63 69 70 65 0a 20 20 20 20 6e 61 6d 65  :recipe.    name
02b0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 6b  space import ::k
02c0: 65 74 74 6c 65 3a 3a 73 74 61 74 75 73 0a 7d 0a  ettle::status.}.
02d0: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23  .# # ## ### ####
02e0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
02f0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a  ##############..
0310: 70 72 6f 63 20 3a 3a 6b 65 74 74 6c 65 3a 3a 67  proc ::kettle::g
0320: 75 69 3a 3a 6d 61 6b 65 20 7b 7d 20 7b 0a 20 20  ui::make {} {.  
0330: 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72    package requir
0340: 65 20 54 6b 0a 0a 20 20 20 20 74 74 6b 3a 3a 6e  e Tk..    ttk::n
0350: 6f 74 65 62 6f 6f 6b 20 2e 6e 0a 20 20 20 20 74  otebook .n.    t
0360: 74 6b 3a 3a 66 72 61 6d 65 20 20 2e 6f 70 74 69  tk::frame  .opti
0370: 6f 6e 73 0a 20 20 20 20 74 74 6b 3a 3a 66 72 61  ons.    ttk::fra
0380: 6d 65 20 20 2e 61 63 74 69 6f 6e 73 0a 20 20 20  me  .actions.   
0390: 20 74 74 6b 3a 3a 62 75 74 74 6f 6e 20 2e 65 78   ttk::button .ex
03a0: 69 74 20 2d 63 6f 6d 6d 61 6e 64 20 3a 3a 5f 65  it -command ::_e
03b0: 78 69 74 20 2d 74 65 78 74 20 45 78 69 74 0a 0a  xit -text Exit..
03c0: 20 20 20 20 2e 6e 20 61 64 64 20 2e 6f 70 74 69      .n add .opti
03d0: 6f 6e 73 20 2d 74 65 78 74 20 43 6f 6e 66 69 67  ons -text Config
03e0: 75 72 61 74 69 6f 6e 20 2d 75 6e 64 65 72 6c 69  uration -underli
03f0: 6e 65 20 30 0a 20 20 20 20 2e 6e 20 61 64 64 20  ne 0.    .n add 
0400: 2e 61 63 74 69 6f 6e 73 20 2d 74 65 78 74 20 41  .actions -text A
0410: 63 74 69 6f 6e 20 20 20 20 20 20 20 20 2d 75 6e  ction        -un
0420: 64 65 72 6c 69 6e 65 20 30 0a 0a 20 20 20 20 70  derline 0..    p
0430: 61 63 6b 20 2e 6e 20 20 20 20 2d 73 69 64 65 20  ack .n    -side 
0440: 74 6f 70 20 20 20 2d 65 78 70 61 6e 64 20 31 20  top   -expand 1 
0450: 2d 66 69 6c 6c 20 62 6f 74 68 0a 20 20 20 20 70  -fill both.    p
0460: 61 63 6b 20 2e 65 78 69 74 20 2d 73 69 64 65 20  ack .exit -side 
0470: 72 69 67 68 74 20 2d 65 78 70 61 6e 64 20 30 20  right -expand 0 
0480: 2d 66 69 6c 6c 20 62 6f 74 68 0a 0a 20 20 20 20  -fill both..    
0490: 4f 70 74 69 6f 6e 73 20 20 20 20 20 2e 6f 70 74  Options     .opt
04a0: 69 6f 6e 73 0a 20 20 20 20 41 63 74 69 6f 6e 73  ions.    Actions
04b0: 20 20 20 20 20 2e 61 63 74 69 6f 6e 73 0a 0a 20       .actions.. 
04c0: 20 20 20 2e 6e 20 73 65 6c 65 63 74 20 30 20 3b     .n select 0 ;
04d0: 20 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e   # Configuration
04e0: 0a 20 20 20 20 23 2e 6e 20 73 65 6c 65 63 74 20  .    #.n select 
04f0: 31 20 3b 20 23 20 41 63 74 69 6f 6e 73 0a 0a 20  1 ; # Actions.. 
0500: 20 20 20 23 20 44 69 73 61 62 6c 65 20 75 6e 63     # Disable unc
0510: 6f 6e 74 72 6f 6c 6c 65 64 20 65 78 69 74 2e 20  ontrolled exit. 
0520: 54 68 69 73 20 6d 61 79 20 63 6f 6d 65 20 6f 75  This may come ou
0530: 74 20 6f 66 20 64 65 65 70 65 72 20 6c 61 79 65  t of deeper laye
0540: 72 73 2c 0a 20 20 20 20 23 20 6c 69 6b 65 2c 20  rs,.    # like, 
0550: 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 63 72 69  for example, cri
0560: 74 63 6c 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e  tcl compilation.
0570: 0a 0a 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 65  ..    rename ::e
0580: 78 69 74 20 20 20 3a 3a 5f 65 78 69 74 0a 20 20  xit   ::_exit.  
0590: 20 20 70 72 6f 63 20 20 20 3a 3a 65 78 69 74 20    proc   ::exit 
05a0: 7b 7b 73 74 61 74 75 73 20 30 7d 7d 20 7b 0a 09  {{status 0}} {..
05b0: 61 70 70 6c 79 20 7b 7b 7d 20 7b 0a 09 20 20 20  apply {{} {..   
05c0: 20 69 6f 20 6f 6b 20 7b 20 69 6f 20 70 75 74 73   io ok { io puts
05d0: 20 44 4f 4e 45 20 7d 0a 09 7d 20 3a 3a 6b 65 74   DONE }..} ::ket
05e0: 74 6c 65 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  tle}..return.   
05f0: 20 7d 0a 0a 20 20 20 20 77 6d 20 70 72 6f 74 6f   }..    wm proto
0600: 63 6f 6c 20 2e 20 57 4d 5f 44 45 4c 45 54 45 5f  col . WM_DELETE_
0610: 57 49 4e 44 4f 57 20 3a 3a 5f 65 78 69 74 0a 0a  WINDOW ::_exit..
0620: 20 20 20 20 23 20 41 6e 64 20 73 74 61 72 74 20      # And start 
0630: 74 6f 20 69 6e 74 65 72 61 63 74 20 77 69 74 68  to interact with
0640: 20 74 68 65 20 75 73 65 72 2e 0a 20 20 20 20 76   the user..    v
0650: 77 61 69 74 20 66 6f 72 65 76 65 72 0a 20 20 20  wait forever.   
0660: 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20   return.}..proc 
0670: 3a 3a 6b 65 74 74 6c 65 3a 3a 67 75 69 3a 3a 4f  ::kettle::gui::O
0680: 70 74 69 6f 6e 73 20 7b 77 69 6e 7d 20 7b 0a 20  ptions {win} {. 
0690: 20 20 20 73 65 74 20 74 6f 70 20 24 77 69 6e 20     set top $win 
06a0: 3b 20 69 66 20 7b 24 74 6f 70 20 65 71 20 7b 7d  ; if {$top eq {}
06b0: 7d 20 7b 20 73 65 74 20 74 6f 70 20 2e 20 7d 0a  } { set top . }.
06c0: 0a 20 20 20 20 23 20 54 4f 44 4f 3a 20 41 74 74  .    # TODO: Att
06d0: 61 63 68 20 74 68 65 20 27 69 67 6e 6f 72 65 2d  ach the 'ignore-
06e0: 62 79 2d 67 75 69 2d 66 6c 61 67 27 20 74 6f 20  by-gui-flag' to 
06f0: 74 68 65 20 6f 70 74 69 6f 6e 20 69 74 73 65 6c  the option itsel
0700: 66 20 69 6e 0a 20 20 20 20 23 20 73 6f 6d 65 20  f in.    # some 
0710: 77 61 79 2e 0a 20 20 20 20 73 65 74 20 69 67 6e  way..    set ign
0720: 6f 72 65 20 7b 2d 2d 73 74 61 74 65 20 2d 2d 63  ore {--state --c
0730: 6f 6e 66 69 67 7d 0a 0a 20 20 20 20 66 6f 72 65  onfig}..    fore
0740: 61 63 68 20 6f 20 5b 6c 73 6f 72 74 20 2d 64 69  ach o [lsort -di
0750: 63 74 20 5b 6f 70 74 69 6f 6e 20 6e 61 6d 65 73  ct [option names
0760: 5d 5d 20 7b 0a 09 69 66 20 7b 24 6f 20 69 6e 20  ]] {..if {$o in 
0770: 24 69 67 6e 6f 72 65 7d 20 63 6f 6e 74 69 6e 75  $ignore} continu
0780: 65 0a 09 41 64 64 4f 70 74 69 6f 6e 20 24 77 69  e..AddOption $wi
0790: 6e 20 24 6f 0a 20 20 20 20 7d 0a 20 20 20 20 72  n $o.    }.    r
07a0: 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20 3a 3a  eturn.}..proc ::
07b0: 6b 65 74 74 6c 65 3a 3a 67 75 69 3a 3a 41 64 64  kettle::gui::Add
07c0: 4f 70 74 69 6f 6e 20 7b 77 69 6e 20 6f 7d 20 7b  Option {win o} {
07d0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6f 70  .    variable op
07e0: 74 69 6f 6e 73 0a 20 20 20 20 73 65 74 20 72 6f  tions.    set ro
07f0: 77 20 5b 6c 6c 65 6e 67 74 68 20 24 6f 70 74 69  w [llength $opti
0800: 6f 6e 73 5d 0a 0a 20 20 20 20 73 65 74 20 74 6f  ons]..    set to
0810: 70 20 24 77 69 6e 20 3b 20 69 66 20 7b 24 74 6f  p $win ; if {$to
0820: 70 20 65 71 20 7b 7d 7d 20 7b 20 73 65 74 20 74  p eq {}} { set t
0830: 6f 70 20 2e 20 7d 0a 0a 20 20 20 20 73 65 74 20  op . }..    set 
0840: 74 79 70 65 20 5b 6f 70 74 69 6f 6e 20 74 79 70  type [option typ
0850: 65 20 24 6f 5d 0a 0a 20 20 20 20 6c 61 62 65 6c  e $o]..    label
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0870: 20 20 24 7b 77 69 6e 7d 2e 6c 24 72 6f 77 20 2d    ${win}.l$row -
0880: 74 65 78 74 20 24 6f 20 2d 61 6e 63 68 6f 72 20  text $o -anchor 
0890: 77 0a 20 20 20 20 6f 76 61 6c 69 64 61 74 65 20  w.    ovalidate 
08a0: 7b 2a 7d 24 74 79 70 65 20 67 75 69 20 24 7b 77  {*}$type gui ${w
08b0: 69 6e 7d 2e 65 24 72 6f 77 20 24 6f 0a 0a 20 20  in}.e$row $o..  
08c0: 20 20 67 72 69 64 20 24 7b 77 69 6e 7d 2e 6c 24    grid ${win}.l$
08d0: 72 6f 77 20 20 2d 72 6f 77 20 24 72 6f 77 20 2d  row  -row $row -
08e0: 63 6f 6c 75 6d 6e 20 30 20 2d 73 74 69 63 6b 79  column 0 -sticky
08f0: 20 6e 65 77 0a 20 20 20 20 67 72 69 64 20 24 7b   new.    grid ${
0900: 77 69 6e 7d 2e 65 24 72 6f 77 20 20 2d 72 6f 77  win}.e$row  -row
0910: 20 24 72 6f 77 20 2d 63 6f 6c 75 6d 6e 20 31 20   $row -column 1 
0920: 2d 73 74 69 63 6b 79 20 6e 65 77 0a 0a 20 20 20  -sticky new..   
0930: 20 67 72 69 64 20 63 6f 6c 75 6d 6e 63 6f 6e 66   grid columnconf
0940: 69 67 75 72 65 20 24 74 6f 70 20 30 20 2d 77 65  igure $top 0 -we
0950: 69 67 68 74 20 30 0a 20 20 20 20 67 72 69 64 20  ight 0.    grid 
0960: 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72 65 20  columnconfigure 
0970: 24 74 6f 70 20 31 20 2d 77 65 69 67 68 74 20 31  $top 1 -weight 1
0980: 0a 20 20 20 20 67 72 69 64 20 72 6f 77 63 6f 6e  .    grid rowcon
0990: 66 69 67 75 72 65 20 20 20 20 24 74 6f 70 20 24  figure    $top $
09a0: 72 6f 77 20 2d 77 65 69 67 68 74 20 30 0a 0a 20  row -weight 0.. 
09b0: 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 69 6f     lappend optio
09c0: 6e 73 20 24 7b 77 69 6e 7d 2e 69 24 72 6f 77 0a  ns ${win}.i$row.
09d0: 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23 20      return.}..# 
09e0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
09f0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0a00: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0a10: 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 72 6f  ###########..pro
0a20: 63 20 3a 3a 6b 65 74 74 6c 65 3a 3a 67 75 69 3a  c ::kettle::gui:
0a30: 3a 41 63 74 69 6f 6e 73 20 7b 77 69 6e 7d 20 7b  :Actions {win} {
0a40: 0a 20 20 20 20 73 65 74 20 74 6f 70 20 24 77 69  .    set top $wi
0a50: 6e 20 3b 20 69 66 20 7b 24 74 6f 70 20 65 71 20  n ; if {$top eq 
0a60: 7b 7d 7d 20 7b 20 73 65 74 20 74 6f 70 20 2e 20  {}} { set top . 
0a70: 7d 0a 0a 20 20 20 20 70 61 63 6b 61 67 65 20 72  }..    package r
0a80: 65 71 75 69 72 65 20 77 69 64 67 65 74 3a 3a 73  equire widget::s
0a90: 63 72 6f 6c 6c 65 64 77 69 6e 64 6f 77 20 3b 20  crolledwindow ; 
0aa0: 23 20 54 6b 6c 69 62 0a 0a 20 20 20 20 23 20 54  # Tklib..    # T
0ab0: 4f 44 4f 3a 20 45 78 74 65 6e 64 20 72 65 63 69  ODO: Extend reci
0ac0: 70 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 74  pe definitions t
0ad0: 6f 20 63 61 72 72 79 20 74 68 69 73 20 69 6e 66  o carry this inf
0ae0: 6f 72 6d 61 74 69 6f 6e 2e 0a 20 20 20 20 73 65  ormation..    se
0af0: 74 20 73 70 65 63 69 61 6c 20 7b 68 65 6c 70 20  t special {help 
0b00: 68 65 6c 70 2d 72 65 63 69 70 65 73 20 68 65 6c  help-recipes hel
0b10: 70 2d 6f 70 74 69 6f 6e 73 20 73 68 6f 77 20 73  p-options show s
0b20: 68 6f 77 2d 63 6f 6e 66 69 67 75 72 61 74 69 6f  how-configuratio
0b30: 6e 20 73 68 6f 77 2d 73 74 61 74 65 7d 0a 20 20  n show-state}.  
0b40: 20 20 73 65 74 20 69 67 6e 6f 72 65 20 20 7b 67    set ignore  {g
0b50: 75 69 20 6e 75 6c 6c 20 66 6f 72 65 76 65 72 20  ui null forever 
0b60: 6c 69 73 74 20 6c 69 73 74 2d 72 65 63 69 70 65  list list-recipe
0b70: 73 20 6c 69 73 74 2d 6f 70 74 69 6f 6e 73 20 68  s list-options h
0b80: 65 6c 70 2d 64 75 6d 70 7d 0a 0a 20 20 20 20 66  elp-dump}..    f
0b90: 6f 72 65 61 63 68 20 72 20 24 73 70 65 63 69 61  oreach r $specia
0ba0: 6c 20 7b 0a 09 23 20 74 72 65 61 74 20 61 20 66  l {..# treat a f
0bb0: 65 77 20 72 65 63 69 70 65 73 20 6f 75 74 20 6f  ew recipes out o
0bc0: 66 20 6f 72 64 65 72 20 74 6f 20 68 61 76 65 20  f order to have 
0bd0: 74 68 65 6d 20 61 74 20 74 68 65 20 74 6f 70 2e  them at the top.
0be0: 0a 09 41 64 64 41 63 74 69 6f 6e 46 6f 72 52 65  ..AddActionForRe
0bf0: 63 69 70 65 20 24 77 69 6e 20 24 72 0a 20 20 20  cipe $win $r.   
0c00: 20 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 72   }.    foreach r
0c10: 20 5b 6c 73 6f 72 74 20 2d 64 69 63 74 20 5b 72   [lsort -dict [r
0c20: 65 63 69 70 65 20 6e 61 6d 65 73 5d 5d 20 7b 0a  ecipe names]] {.
0c30: 09 23 20 69 67 6e 6f 72 65 20 74 68 65 20 73 74  .# ignore the st
0c40: 61 6e 64 61 72 64 20 72 65 63 69 70 65 73 20 77  andard recipes w
0c50: 68 69 63 68 20 61 72 65 20 6e 6f 6e 73 65 6e 73  hich are nonsens
0c60: 69 63 61 6c 20 66 6f 72 20 74 68 65 0a 09 23 20  ical for the..# 
0c70: 67 75 69 2c 20 61 6e 64 20 74 68 6f 73 65 20 77  gui, and those w
0c80: 68 69 63 68 20 77 65 20 74 72 65 61 74 65 64 20  hich we treated 
0c90: 6f 75 74 20 6f 66 20 6f 72 64 65 72 20 28 73 65  out of order (se
0ca0: 65 20 61 62 6f 76 65 29 2e 0a 09 69 66 20 7b 28  e above)...if {(
0cb0: 24 72 20 69 6e 20 24 69 67 6e 6f 72 65 29 20 7c  $r in $ignore) |
0cc0: 7c 20 28 24 72 20 69 6e 20 24 73 70 65 63 69 61  | ($r in $specia
0cd0: 6c 29 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 41 64  l)} continue..Ad
0ce0: 64 41 63 74 69 6f 6e 46 6f 72 52 65 63 69 70 65  dActionForRecipe
0cf0: 20 24 77 69 6e 20 24 72 0a 20 20 20 20 7d 0a 0a   $win $r.    }..
0d00: 20 20 20 20 77 69 64 67 65 74 3a 3a 73 63 72 6f      widget::scro
0d10: 6c 6c 65 64 77 69 6e 64 6f 77 20 24 7b 77 69 6e  lledwindow ${win
0d20: 7d 2e 73 74 20 2d 62 6f 72 64 65 72 77 69 64 74  }.st -borderwidt
0d30: 68 20 31 20 2d 72 65 6c 69 65 66 20 73 75 6e 6b  h 1 -relief sunk
0d40: 65 6e 0a 20 20 20 20 74 65 78 74 20 20 20 20 20  en.    text     
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 7b                ${
0d60: 77 69 6e 7d 2e 74 0a 0a 20 20 20 20 24 7b 77 69  win}.t..    ${wi
0d70: 6e 7d 2e 73 74 20 73 65 74 77 69 64 67 65 74 20  n}.st setwidget 
0d80: 24 7b 77 69 6e 7d 2e 74 0a 0a 20 20 20 20 73 65  ${win}.t..    se
0d90: 74 20 6e 20 5b 4e 75 6d 41 63 74 69 6f 6e 73 5d  t n [NumActions]
0da0: 0a 0a 20 20 20 20 67 72 69 64 20 24 7b 77 69 6e  ..    grid ${win
0db0: 7d 2e 73 74 20 2d 72 6f 77 20 30 20 2d 63 6f 6c  }.st -row 0 -col
0dc0: 75 6d 6e 20 30 20 2d 73 74 69 63 6b 79 20 73 77  umn 0 -sticky sw
0dd0: 65 6e 20 2d 72 6f 77 73 70 61 6e 20 24 6e 0a 0a  en -rowspan $n..
0de0: 20 20 20 20 67 72 69 64 20 63 6f 6c 75 6d 6e 63      grid columnc
0df0: 6f 6e 66 69 67 75 72 65 20 24 74 6f 70 20 20 30  onfigure $top  0
0e00: 20 2d 77 65 69 67 68 74 20 31 0a 20 20 20 20 67   -weight 1.    g
0e10: 72 69 64 20 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67  rid columnconfig
0e20: 75 72 65 20 24 74 6f 70 20 20 31 20 2d 77 65 69  ure $top  1 -wei
0e30: 67 68 74 20 30 0a 20 20 20 20 67 72 69 64 20 72  ght 0.    grid r
0e40: 6f 77 63 6f 6e 66 69 67 75 72 65 20 20 20 20 24  owconfigure    $
0e50: 74 6f 70 20 24 6e 20 2d 77 65 69 67 68 74 20 31  top $n -weight 1
0e60: 0a 0a 20 20 20 20 69 6f 20 73 65 74 77 69 64 67  ..    io setwidg
0e70: 65 74 20 24 7b 77 69 6e 7d 2e 74 0a 20 20 20 20  et ${win}.t.    
0e80: 72 65 74 75 72 6e 0a 7d 0a 0a 23 20 23 20 23 23  return.}..# # ##
0e90: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
0ea0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
0eb0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
0ec0: 23 23 23 23 23 23 23 0a 23 23 20 49 6e 74 65 72  #######.## Inter
0ed0: 6e 61 6c 20 68 65 6c 70 2e 0a 0a 70 72 6f 63 20  nal help...proc 
0ee0: 3a 3a 6b 65 74 74 6c 65 3a 3a 67 75 69 3a 3a 4e  ::kettle::gui::N
0ef0: 75 6d 41 63 74 69 6f 6e 73 20 7b 7d 20 7b 0a 20  umActions {} {. 
0f00: 20 20 20 76 61 72 69 61 62 6c 65 20 61 63 74 69     variable acti
0f10: 6f 6e 73 0a 20 20 20 20 6c 6c 65 6e 67 74 68 20  ons.    llength 
0f20: 24 61 63 74 69 6f 6e 73 0a 7d 0a 0a 70 72 6f 63  $actions.}..proc
0f30: 20 3a 3a 6b 65 74 74 6c 65 3a 3a 67 75 69 3a 3a   ::kettle::gui::
0f40: 41 64 64 41 63 74 69 6f 6e 46 6f 72 52 65 63 69  AddActionForReci
0f50: 70 65 20 7b 77 69 6e 20 72 7d 20 7b 0a 20 20 20  pe {win r} {.   
0f60: 20 41 64 64 41 63 74 69 6f 6e 20 24 77 69 6e 20   AddAction $win 
0f70: 5b 6c 69 73 74 20 3a 3a 6b 65 74 74 6c 65 3a 3a  [list ::kettle::
0f80: 67 75 69 3a 3a 52 75 6e 20 24 77 69 6e 20 24 72  gui::Run $win $r
0f90: 5d 20 5b 4c 61 62 65 6c 20 24 72 5d 20 30 0a 7d  ] [Label $r] 0.}
0fa0: 0a 0a 70 72 6f 63 20 3a 3a 6b 65 74 74 6c 65 3a  ..proc ::kettle:
0fb0: 3a 67 75 69 3a 3a 41 64 64 41 63 74 69 6f 6e 20  :gui::AddAction 
0fc0: 7b 77 69 6e 20 63 6d 64 20 6c 61 62 65 6c 20 77  {win cmd label w
0fd0: 65 69 67 68 74 7d 20 7b 0a 20 20 20 20 76 61 72  eight} {.    var
0fe0: 69 61 62 6c 65 20 61 63 74 69 6f 6e 73 0a 20 20  iable actions.  
0ff0: 20 20 73 65 74 20 72 6f 77 20 5b 6c 6c 65 6e 67    set row [lleng
1000: 74 68 20 24 61 63 74 69 6f 6e 73 5d 0a 0a 20 20  th $actions]..  
1010: 20 20 73 65 74 20 74 6f 70 20 24 77 69 6e 20 3b    set top $win ;
1020: 20 69 66 20 7b 24 74 6f 70 20 65 71 20 7b 7d 7d   if {$top eq {}}
1030: 20 7b 20 73 65 74 20 74 6f 70 20 2e 20 7d 0a 0a   { set top . }..
1040: 20 20 20 20 23 20 74 74 6b 3a 3a 62 75 74 74 6f      # ttk::butto
1050: 6e 20 2d 3e 20 6e 6f 20 2d 61 6e 63 68 6f 72 20  n -> no -anchor 
1060: 6f 70 74 69 6f 6e 2c 20 6c 61 62 65 6c 73 20 63  option, labels c
1070: 65 6e 74 65 72 65 64 2e 0a 20 20 20 20 62 75 74  entered..    but
1080: 74 6f 6e 20 24 7b 77 69 6e 7d 2e 69 24 72 6f 77  ton ${win}.i$row
1090: 20 2d 63 6f 6d 6d 61 6e 64 20 24 63 6d 64 20 2d   -command $cmd -
10a0: 74 65 78 74 20 24 6c 61 62 65 6c 20 2d 61 6e 63  text $label -anc
10b0: 68 6f 72 20 77 0a 20 20 20 20 67 72 69 64 20 20  hor w.    grid  
10c0: 20 24 7b 77 69 6e 7d 2e 69 24 72 6f 77 20 2d 72   ${win}.i$row -r
10d0: 6f 77 20 24 72 6f 77 20 2d 63 6f 6c 75 6d 6e 20  ow $row -column 
10e0: 31 20 2d 73 74 69 63 6b 79 20 6e 65 77 0a 20 20  1 -sticky new.  
10f0: 20 20 67 72 69 64 20 72 6f 77 63 6f 6e 66 69 67    grid rowconfig
1100: 75 72 65 20 24 74 6f 70 20 24 72 6f 77 20 2d 77  ure $top $row -w
1110: 65 69 67 68 74 20 24 77 65 69 67 68 74 0a 0a 20  eight $weight.. 
1120: 20 20 20 6c 61 70 70 65 6e 64 20 61 63 74 69 6f     lappend actio
1130: 6e 73 20 24 7b 77 69 6e 7d 2e 69 24 72 6f 77 0a  ns ${win}.i$row.
1140: 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72      return.}..pr
1150: 6f 63 20 3a 3a 6b 65 74 74 6c 65 3a 3a 67 75 69  oc ::kettle::gui
1160: 3a 3a 4c 61 62 65 6c 20 7b 72 65 63 69 70 65 7d  ::Label {recipe}
1170: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c   {.    set resul
1180: 74 20 7b 7d 0a 20 20 20 20 66 6f 72 65 61 63 68  t {}.    foreach
1190: 20 65 20 5b 73 70 6c 69 74 20 24 72 65 63 69 70   e [split $recip
11a0: 65 20 2d 5d 20 7b 0a 09 6c 61 70 70 65 6e 64 20  e -] {..lappend 
11b0: 72 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 74  result [string t
11c0: 6f 74 69 74 6c 65 20 24 65 5d 0a 20 20 20 20 7d  otitle $e].    }
11d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 6a 6f 69  .    return [joi
11e0: 6e 20 24 72 65 73 75 6c 74 20 7b 20 7d 5d 0a 7d  n $result { }].}
11f0: 0a 0a 70 72 6f 63 20 3a 3a 6b 65 74 74 6c 65 3a  ..proc ::kettle:
1200: 3a 67 75 69 3a 3a 52 75 6e 20 7b 77 69 6e 20 72  :gui::Run {win r
1210: 65 63 69 70 65 7d 20 7b 0a 20 20 20 20 41 63 74  ecipe} {.    Act
1220: 69 6f 6e 20 64 69 73 61 62 6c 65 64 0a 0a 20 20  ion disabled..  
1230: 20 20 24 7b 77 69 6e 7d 2e 74 20 64 65 6c 65 74    ${win}.t delet
1240: 65 20 30 2e 31 20 65 6e 64 0a 0a 20 20 20 20 72  e 0.1 end..    r
1250: 65 63 69 70 65 20 72 75 6e 20 24 72 65 63 69 70  ecipe run $recip
1260: 65 0a 0a 20 20 20 20 73 74 61 74 75 73 20 63 6c  e..    status cl
1270: 65 61 72 0a 20 20 20 20 41 63 74 69 6f 6e 20 6e  ear.    Action n
1280: 6f 72 6d 61 6c 0a 20 20 20 20 72 65 74 75 72 6e  ormal.    return
1290: 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 6b 65 74 74 6c  .}..proc ::kettl
12a0: 65 3a 3a 67 75 69 3a 3a 41 63 74 69 6f 6e 20 7b  e::gui::Action {
12b0: 65 7d 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c  e} {.    variabl
12c0: 65 20 61 63 74 69 6f 6e 73 0a 20 20 20 20 66 6f  e actions.    fo
12d0: 72 65 61 63 68 20 62 20 24 61 63 74 69 6f 6e 73  reach b $actions
12e0: 20 7b 0a 09 24 62 20 63 6f 6e 66 69 67 75 72 65   {..$b configure
12f0: 20 2d 73 74 61 74 65 20 24 65 0a 20 20 20 20 7d   -state $e.    }
1300: 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23  .    return.}..#
1310: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
1320: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
1330: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
1340: 23 23 23 23 23 23 23 23 23 23 23 23 0a 72 65 74  ############.ret
1350: 75 72 6e 0a                                      urn.