TclApps Library Source Code
Hex Artifact Content
Not logged in

Artifact 27d1b9672b8c6c2862de9126aaa7202dfa8c3eed9360b0e06bdb230976c8d88c:


0000: 23 0a 23 20 53 61 66 65 20 57 68 69 74 65 62 6f  #.# Safe Whitebo
0010: 61 72 64 0a 23 0a 23 20 24 49 64 3a 20 74 6b 63  ard.#.# $Id: tkc
0020: 68 61 74 5f 77 68 69 74 65 62 6f 61 72 64 2e 74  hat_whiteboard.t
0030: 63 6c 2c 76 20 31 2e 34 20 32 30 30 38 2f 31 31  cl,v 1.4 2008/11
0040: 2f 30 39 20 31 36 3a 32 38 3a 30 39 20 70 61 74  /09 16:28:09 pat
0050: 74 68 6f 79 74 73 20 45 78 70 20 24 0a 0a 6e 61  thoyts Exp $..na
0060: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 74  mespace eval ::t
0070: 6b 63 68 61 74 3a 3a 57 68 69 74 65 62 6f 61 72  kchat::Whiteboar
0080: 64 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65  d {.    variable
0090: 20 76 65 72 73 69 6f 6e 20 31 2e 30 0a 20 20 20   version 1.0.   
00a0: 20 76 61 72 69 61 62 6c 65 20 48 69 73 74 6f 72   variable Histor
00b0: 79 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f  y.    if {![info
00c0: 20 65 78 69 73 74 73 20 48 69 73 74 6f 72 79 5d   exists History]
00d0: 7d 20 7b 20 73 65 74 20 48 69 73 74 6f 72 79 20  } { set History 
00e0: 5b 6c 69 73 74 5d 20 7d 0a 7d 0a 0a 70 72 6f 63  [list] }.}..proc
00f0: 20 3a 3a 74 6b 63 68 61 74 3a 3a 57 68 69 74 65   ::tkchat::White
0100: 62 6f 61 72 64 3a 3a 49 6e 69 74 20 7b 7d 20 7b  board::Init {} {
0110: 0a 20 20 20 20 67 6c 6f 62 61 6c 20 4f 70 74 69  .    global Opti
0120: 6f 6e 73 0a 20 20 20 20 69 66 20 7b 20 5b 77 69  ons.    if { [wi
0130: 6e 66 6f 20 65 78 69 73 74 73 20 2e 77 68 69 74  nfo exists .whit
0140: 65 62 6f 61 72 64 5d 20 7d 20 7b 0a 0a 20 20 20  eboard] } {..   
0150: 20 20 20 20 20 77 6d 20 64 65 69 63 6f 6e 69 66       wm deiconif
0160: 79 20 2e 77 68 69 74 65 62 6f 61 72 64 0a 20 20  y .whiteboard.  
0170: 20 20 20 20 20 20 66 6f 63 75 73 20 2e 77 68 69        focus .whi
0180: 74 65 62 6f 61 72 64 0a 0a 20 20 20 20 7d 20 65  teboard..    } e
0190: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 73 65  lse {.        se
01a0: 74 20 64 6c 67 20 5b 3a 3a 74 6b 63 68 61 74 3a  t dlg [::tkchat:
01b0: 3a 44 69 61 6c 6f 67 20 2e 77 68 69 74 65 62 6f  :Dialog .whitebo
01c0: 61 72 64 20 2d 63 6f 6e 74 61 69 6e 65 72 20 30  ard -container 0
01d0: 5d 0a 20 20 20 20 20 20 20 20 77 6d 20 74 69 74  ].        wm tit
01e0: 6c 65 20 24 64 6c 67 20 22 57 68 69 74 65 62 6f  le $dlg "Whitebo
01f0: 61 72 64 22 0a 20 20 20 20 20 20 20 20 77 6d 20  ard".        wm 
0200: 74 72 61 6e 73 69 65 6e 74 20 24 64 6c 67 20 7b  transient $dlg {
0210: 7d 0a 20 20 20 20 20 20 20 20 77 6d 20 77 69 74  }.        wm wit
0220: 68 64 72 61 77 20 24 64 6c 67 0a 20 20 20 20 20  hdraw $dlg.     
0230: 20 20 20 66 72 61 6d 65 20 24 64 6c 67 2e 66 72     frame $dlg.fr
0240: 61 6d 65 20 2d 63 6f 6e 74 61 69 6e 65 72 20 31  ame -container 1
0250: 0a 20 20 20 20 20 20 20 20 70 61 63 6b 20 24 64  .        pack $d
0260: 6c 67 2e 66 72 61 6d 65 20 2d 66 69 6c 6c 20 62  lg.frame -fill b
0270: 6f 74 68 20 2d 65 78 70 61 6e 64 20 31 0a 20 20  oth -expand 1.  
0280: 20 20 20 20 20 20 73 65 74 20 73 6c 61 76 65 20        set slave 
0290: 5b 3a 3a 73 61 66 65 3a 3a 69 6e 74 65 72 70 43  [::safe::interpC
02a0: 72 65 61 74 65 20 77 68 69 74 65 62 6f 61 72 64  reate whiteboard
02b0: 5d 0a 20 20 20 20 20 20 20 20 3a 3a 73 61 66 65  ].        ::safe
02c0: 3a 3a 6c 6f 61 64 54 6b 20 24 73 6c 61 76 65 20  ::loadTk $slave 
02d0: 2d 75 73 65 20 24 64 6c 67 2e 66 72 61 6d 65 0a  -use $dlg.frame.
02e0: 20 20 20 20 20 20 20 20 62 69 6e 64 20 24 64 6c          bind $dl
02f0: 67 20 3c 44 65 73 74 72 6f 79 3e 20 5b 6c 69 73  g <Destroy> [lis
0300: 74 20 63 61 74 63 68 20 5b 6c 69 73 74 20 69 6e  t catch [list in
0310: 74 65 72 70 20 64 65 6c 65 74 65 20 24 73 6c 61  terp delete $sla
0320: 76 65 5d 5d 0a 20 20 20 20 20 20 20 20 69 6e 74  ve]].        int
0330: 65 72 70 20 61 6c 69 61 73 20 24 73 6c 61 76 65  erp alias $slave
0340: 20 3a 3a 57 68 69 74 65 62 6f 61 72 64 43 6c 65   ::WhiteboardCle
0350: 61 72 20 7b 7d 20 5b 6e 61 6d 65 73 70 61 63 65  ar {} [namespace
0360: 20 6f 72 69 67 69 6e 20 43 6c 65 61 72 5d 0a 20   origin Clear]. 
0370: 20 20 20 20 20 20 20 69 6e 74 65 72 70 20 61 6c         interp al
0380: 69 61 73 20 24 73 6c 61 76 65 20 3a 3a 57 68 69  ias $slave ::Whi
0390: 74 65 62 6f 61 72 64 4c 69 6e 65 20 7b 7d 20 5b  teboardLine {} [
03a0: 6e 61 6d 65 73 70 61 63 65 20 6f 72 69 67 69 6e  namespace origin
03b0: 20 4c 69 6e 65 5d 0a 20 20 20 20 20 20 20 20 69   Line].        i
03c0: 6e 74 65 72 70 20 61 6c 69 61 73 20 24 73 6c 61  nterp alias $sla
03d0: 76 65 20 3a 3a 57 68 69 74 65 62 6f 61 72 64 53  ve ::WhiteboardS
03e0: 63 72 69 70 74 20 7b 7d 20 5b 6e 61 6d 65 73 70  cript {} [namesp
03f0: 61 63 65 20 6f 72 69 67 69 6e 20 53 63 72 69 70  ace origin Scrip
0400: 74 5d 0a 20 20 20 20 20 20 20 20 77 68 69 74 65  t].        white
0410: 62 6f 61 72 64 20 65 76 61 6c 20 7b 0a 20 20 20  board eval {.   
0420: 20 20 20 20 20 20 20 20 20 74 74 6b 3a 3a 66 72           ttk::fr
0430: 61 6d 65 20 2e 77 62 0a 20 20 20 20 20 20 20 20  ame .wb.        
0440: 20 20 20 20 74 74 6b 3a 3a 65 6e 74 72 79 20 2e      ttk::entry .
0450: 77 62 2e 65 20 2d 74 65 78 74 76 61 72 69 61 62  wb.e -textvariab
0460: 6c 65 20 77 62 65 6e 74 72 79 0a 20 20 20 20 20  le wbentry.     
0470: 20 20 20 20 20 20 20 74 74 6b 3a 3a 62 75 74 74         ttk::butt
0480: 6f 6e 20 2e 77 62 2e 62 63 6c 65 61 72 20 2d 74  on .wb.bclear -t
0490: 65 78 74 20 43 6c 65 61 72 20 2d 63 6f 6d 6d 61  ext Clear -comma
04a0: 6e 64 20 57 68 69 74 65 62 6f 61 72 64 43 6c 65  nd WhiteboardCle
04b0: 61 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ar.            t
04c0: 74 6b 3a 3a 6c 61 62 65 6c 20 2e 77 62 2e 73 74  tk::label .wb.st
04d0: 61 74 75 73 20 2d 61 6e 63 68 6f 72 20 77 0a 20  atus -anchor w. 
04e0: 20 20 20 20 20 20 20 20 20 20 20 63 61 6e 76 61             canva
04f0: 73 20 2e 77 62 2e 63 20 2d 62 61 63 6b 67 72 6f  s .wb.c -backgro
0500: 75 6e 64 20 77 68 69 74 65 20 2d 77 69 64 74 68  und white -width
0510: 20 33 35 30 20 2d 68 65 69 67 68 74 20 33 30 30   350 -height 300
0520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 69 6e  .            bin
0530: 64 20 2e 77 62 2e 63 20 3c 42 75 74 74 6f 6e 2d  d .wb.c <Button-
0540: 31 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  1> {.           
0550: 20 20 20 20 20 73 65 74 20 69 64 20 5b 25 57 20       set id [%W 
0560: 63 72 65 61 74 65 20 6c 69 6e 65 20 25 78 20 25  create line %x %
0570: 79 20 25 78 20 25 79 5d 0a 20 20 20 20 20 20 20  y %x %y].       
0580: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
0590: 20 20 20 62 69 6e 64 20 2e 77 62 2e 63 20 3c 42     bind .wb.c <B
05a0: 75 74 74 6f 6e 31 2d 4d 6f 74 69 6f 6e 3e 20 7b  utton1-Motion> {
05b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
05c0: 20 25 57 20 63 6f 6f 72 64 73 20 24 69 64 20 5b   %W coords $id [
05d0: 63 6f 6e 63 61 74 20 5b 25 57 20 63 6f 6f 72 64  concat [%W coord
05e0: 73 20 24 69 64 5d 20 25 78 20 25 79 5d 0a 20 20  s $id] %x %y].  
05f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
0600: 20 20 20 20 20 20 20 20 62 69 6e 64 20 2e 77 62          bind .wb
0610: 2e 63 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73  .c <ButtonReleas
0620: 65 2d 31 3e 20 7b 0a 20 20 20 20 20 20 20 20 20  e-1> {.         
0630: 20 20 20 20 20 20 20 57 68 69 74 65 62 6f 61 72         Whiteboar
0640: 64 4c 69 6e 65 20 25 57 20 24 69 64 0a 20 20 20  dLine %W $id.   
0650: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0660: 20 20 20 20 20 20 20 62 69 6e 64 20 2e 77 62 2e         bind .wb.
0670: 65 20 3c 52 65 74 75 72 6e 3e 20 7b 57 68 69 74  e <Return> {Whit
0680: 65 62 6f 61 72 64 53 63 72 69 70 74 20 24 77 62  eboardScript $wb
0690: 65 6e 74 72 79 7d 0a 0a 20 20 20 20 20 20 20 20  entry}..        
06a0: 20 20 20 20 67 72 69 64 20 2e 77 62 2e 65 20 2e      grid .wb.e .
06b0: 77 62 2e 62 63 6c 65 61 72 20 2d 73 74 69 63 6b  wb.bclear -stick
06c0: 79 20 6e 65 77 73 0a 20 20 20 20 20 20 20 20 20  y news.         
06d0: 20 20 20 67 72 69 64 20 2e 77 62 2e 63 20 2d 20     grid .wb.c - 
06e0: 20 20 20 20 20 20 20 20 20 2d 73 74 69 63 6b 79           -sticky
06f0: 20 6e 65 77 73 0a 20 20 20 20 20 20 20 20 20 20   news.          
0700: 20 20 67 72 69 64 20 2e 77 62 2e 73 74 61 74 75    grid .wb.statu
0710: 73 20 2d 20 20 20 20 20 2d 73 74 69 63 6b 79 20  s -     -sticky 
0720: 73 65 77 0a 20 20 20 20 20 20 20 20 20 20 20 20  sew.            
0730: 67 72 69 64 20 72 6f 77 63 6f 6e 66 69 67 75 72  grid rowconfigur
0740: 65 20 20 20 20 2e 77 62 20 31 20 2d 77 65 69 67  e    .wb 1 -weig
0750: 68 74 20 31 0a 20 20 20 20 20 20 20 20 20 20 20  ht 1.           
0760: 20 67 72 69 64 20 63 6f 6c 75 6d 6e 63 6f 6e 66   grid columnconf
0770: 69 67 75 72 65 20 2e 77 62 20 30 20 2d 77 65 69  igure .wb 0 -wei
0780: 67 68 74 20 31 0a 0a 20 20 20 20 20 20 20 20 20  ght 1..         
0790: 20 20 20 67 72 69 64 20 2e 77 62 20 2d 73 74 69     grid .wb -sti
07a0: 63 6b 79 20 6e 65 77 73 0a 20 20 20 20 20 20 20  cky news.       
07b0: 20 20 20 20 20 67 72 69 64 20 63 6f 6c 75 6d 6e       grid column
07c0: 63 6f 6e 66 69 67 75 72 65 20 2e 20 30 20 2d 77  configure . 0 -w
07d0: 65 69 67 68 74 20 31 0a 20 20 20 20 20 20 20 20  eight 1.        
07e0: 20 20 20 20 67 72 69 64 20 72 6f 77 63 6f 6e 66      grid rowconf
07f0: 69 67 75 72 65 20 20 20 20 2e 20 30 20 2d 77 65  igure    . 0 -we
0800: 69 67 68 74 20 31 0a 20 20 20 20 20 20 20 20 20  ight 1.         
0810: 20 20 20 70 72 6f 63 20 53 74 61 74 75 73 20 7b     proc Status {
0820: 73 7d 20 7b 2e 77 62 2e 73 74 61 74 75 73 20 63  s} {.wb.status c
0830: 6f 6e 66 69 67 75 72 65 20 2d 74 65 78 74 20 24  onfigure -text $
0840: 73 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  s}.        }.   
0850: 20 20 20 20 20 77 68 69 74 65 62 6f 61 72 64 20       whiteboard 
0860: 65 76 61 6c 20 5b 6c 69 73 74 20 3a 3a 74 74 6b  eval [list ::ttk
0870: 3a 3a 73 65 74 54 68 65 6d 65 20 24 3a 3a 74 74  ::setTheme $::tt
0880: 6b 3a 3a 63 75 72 72 65 6e 74 54 68 65 6d 65 5d  k::currentTheme]
0890: 0a 0a 20 20 20 20 20 20 20 20 77 6d 20 64 65 69  ..        wm dei
08a0: 63 6f 6e 69 66 79 20 24 64 6c 67 0a 20 20 20 20  conify $dlg.    
08b0: 20 20 20 20 23 69 66 20 7b 24 4f 70 74 69 6f 6e      #if {$Option
08c0: 73 28 55 73 65 54 6b 4f 6e 6c 79 29 7d 20 7b 20  s(UseTkOnly)} { 
08d0: 77 6d 20 67 65 6f 6d 65 74 72 79 20 24 64 6c 67  wm geometry $dlg
08e0: 20 33 35 30 78 33 30 30 20 7d 0a 20 20 20 20 7d   350x300 }.    }
08f0: 0a 7d 0a 0a 23 20 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 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
0940: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  # The following 
0950: 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 61 6c 69  commands are ali
0960: 61 73 65 64 20 69 6e 20 74 68 65 20 73 61 66 65  ased in the safe
0970: 20 73 6c 61 76 65 0a 0a 23 20 63 61 6c 6c 65 64   slave..# called
0980: 20 66 72 6f 6d 20 74 68 65 20 73 61 66 65 20 69   from the safe i
0990: 6e 74 65 72 70 2c 20 74 72 61 6e 73 6d 69 74 20  nterp, transmit 
09a0: 6e 65 77 20 6c 69 6e 65 0a 70 72 6f 63 20 3a 3a  new line.proc ::
09b0: 74 6b 63 68 61 74 3a 3a 57 68 69 74 65 62 6f 61  tkchat::Whiteboa
09c0: 72 64 3a 3a 4c 69 6e 65 20 7b 77 20 69 64 7d 20  rd::Line {w id} 
09d0: 7b 0a 20 20 20 20 73 65 74 20 63 6d 64 20 5b 6c  {.    set cmd [l
09e0: 69 73 74 20 2e 77 62 2e 63 20 63 72 65 61 74 65  ist .wb.c create
09f0: 20 6c 69 6e 65 5d 0a 20 20 20 20 66 6f 72 65 61   line].    forea
0a00: 63 68 20 63 20 5b 77 68 69 74 65 62 6f 61 72 64  ch c [whiteboard
0a10: 20 65 76 61 6c 20 5b 6c 69 73 74 20 24 77 20 63   eval [list $w c
0a20: 6f 6f 72 64 73 20 24 69 64 5d 5d 20 7b 0a 09 6c  oords $id]] {..l
0a30: 61 70 70 65 6e 64 20 63 6d 64 20 5b 65 78 70 72  append cmd [expr
0a40: 20 7b 20 69 6e 74 28 72 6f 75 6e 64 28 24 63 29   { int(round($c)
0a50: 29 20 7d 5d 0a 20 20 20 20 7d 0a 20 20 20 20 54  ) }].    }.    T
0a60: 72 61 6e 73 6d 69 74 20 24 63 6d 64 0a 7d 0a 0a  ransmit $cmd.}..
0a70: 23 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68  # called from th
0a80: 65 20 73 61 66 65 20 69 6e 74 65 72 70 2c 20 63  e safe interp, c
0a90: 6c 65 61 6e 20 74 68 65 20 77 68 69 74 65 62 6f  lean the whitebo
0aa0: 61 72 64 20 61 6e 64 20 74 65 6c 6c 20 65 76 65  ard and tell eve
0ab0: 72 79 6f 6e 65 0a 70 72 6f 63 20 3a 3a 74 6b 63  ryone.proc ::tkc
0ac0: 68 61 74 3a 3a 57 68 69 74 65 62 6f 61 72 64 3a  hat::Whiteboard:
0ad0: 3a 43 6c 65 61 72 20 7b 7d 20 7b 0a 20 20 20 20  :Clear {} {.    
0ae0: 73 65 74 20 63 6d 64 20 5b 6c 69 73 74 20 2e 77  set cmd [list .w
0af0: 62 2e 63 20 64 65 6c 65 74 65 20 61 6c 6c 5d 0a  b.c delete all].
0b00: 20 20 20 20 53 63 72 69 70 74 20 24 63 6d 64 0a      Script $cmd.
0b10: 7d 0a 0a 23 20 63 61 6c 6c 65 64 20 66 72 6f 6d  }..# called from
0b20: 20 73 61 66 65 20 69 6e 74 65 72 70 20 2d 20 65   safe interp - e
0b30: 76 61 6c 20 73 63 72 69 70 74 20 61 6e 64 20 74  val script and t
0b40: 72 61 6e 73 6d 69 74 20 73 63 72 69 70 74 0a 70  ransmit script.p
0b50: 72 6f 63 20 3a 3a 74 6b 63 68 61 74 3a 3a 57 68  roc ::tkchat::Wh
0b60: 69 74 65 62 6f 61 72 64 3a 3a 53 63 72 69 70 74  iteboard::Script
0b70: 20 7b 73 63 72 69 70 74 7d 20 7b 0a 20 20 20 20   {script} {.    
0b80: 69 66 20 7b 5b 63 61 74 63 68 20 7b 20 77 68 69  if {[catch { whi
0b90: 74 65 62 6f 61 72 64 20 65 76 61 6c 20 24 73 63  teboard eval $sc
0ba0: 72 69 70 74 20 7d 20 65 72 72 5d 7d 20 7b 0a 20  ript } err]} {. 
0bb0: 20 20 20 20 20 20 20 77 68 69 74 65 62 6f 61 72         whiteboar
0bc0: 64 20 65 76 61 6c 20 5b 6c 69 73 74 20 53 74 61  d eval [list Sta
0bd0: 74 75 73 20 24 65 72 72 5d 0a 20 20 20 20 20 20  tus $err].      
0be0: 20 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 20    return.    }. 
0bf0: 20 20 20 54 72 61 6e 73 6d 69 74 20 24 73 63 72     Transmit $scr
0c00: 69 70 74 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d  ipt.}..# -------
0c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c50: 2d 2d 0a 0a 23 20 45 76 61 6c 75 61 74 65 20 74  --..# Evaluate t
0c60: 72 61 6e 73 6d 69 74 74 65 64 20 73 63 72 69 70  ransmitted scrip
0c70: 74 20 69 6e 73 69 64 65 20 74 68 65 20 73 61 66  t inside the saf
0c80: 65 20 69 6e 74 65 72 70 0a 70 72 6f 63 20 3a 3a  e interp.proc ::
0c90: 74 6b 63 68 61 74 3a 3a 57 68 69 74 65 62 6f 61  tkchat::Whiteboa
0ca0: 72 64 3a 3a 45 76 61 6c 20 7b 77 68 6f 20 73 63  rd::Eval {who sc
0cb0: 72 69 70 74 20 7b 63 6f 6c 6f 72 20 7b 7d 7d 7d  ript {color {}}}
0cc0: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 4f 70   {.    global Op
0cd0: 74 69 6f 6e 73 20 65 72 72 6f 72 49 6e 66 6f 0a  tions errorInfo.
0ce0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 48 69 73      variable His
0cf0: 74 6f 72 79 0a 20 20 20 20 69 66 20 7b 21 5b 69  tory.    if {![i
0d00: 6e 74 65 72 70 20 65 78 69 73 74 73 20 77 68 69  nterp exists whi
0d10: 74 65 62 6f 61 72 64 5d 7d 20 7b 0a 20 20 20 20  teboard]} {.    
0d20: 20 20 20 20 69 66 20 7b 21 24 4f 70 74 69 6f 6e      if {!$Option
0d30: 73 28 45 6e 61 62 6c 65 57 68 69 74 65 62 6f 61  s(EnableWhiteboa
0d40: 72 64 29 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  rd)} {.         
0d50: 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 20 20     return.      
0d60: 20 20 7d 0a 20 20 20 20 20 20 20 20 49 6e 69 74    }.        Init
0d70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 7b  .    }..    if {
0d80: 5b 63 61 74 63 68 20 7b 77 68 69 74 65 62 6f 61  [catch {whiteboa
0d90: 72 64 20 65 76 61 6c 20 24 73 63 72 69 70 74 7d  rd eval $script}
0da0: 20 65 72 72 5d 7d 20 7b 0a 20 20 20 20 20 20 20   err]} {.       
0db0: 20 6c 6f 67 3a 3a 6c 6f 67 20 69 6e 66 6f 20 24   log::log info $
0dc0: 65 72 72 6f 72 49 6e 66 6f 0a 20 20 20 20 20 20  errorInfo.      
0dd0: 20 20 77 68 69 74 65 62 6f 61 72 64 20 65 76 61    whiteboard eva
0de0: 6c 20 5b 6c 69 73 74 20 53 74 61 74 75 73 20 24  l [list Status $
0df0: 65 72 72 5d 0a 20 20 20 20 7d 20 65 6c 73 65 20  err].    } else 
0e00: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
0e10: 64 20 48 69 73 74 6f 72 79 20 5b 6c 69 73 74 20  d History [list 
0e20: 24 77 68 6f 20 24 73 63 72 69 70 74 5d 0a 20 20  $who $script].  
0e30: 20 20 20 20 20 20 77 68 69 74 65 62 6f 61 72 64        whiteboard
0e40: 20 65 76 61 6c 20 5b 6c 69 73 74 20 53 74 61 74   eval [list Stat
0e50: 75 73 20 22 24 77 68 6f 20 69 73 20 64 72 61 77  us "$who is draw
0e60: 69 6e 67 22 5d 0a 20 20 20 20 7d 0a 7d 0a 0a 23  ing"].    }.}..#
0e70: 20 54 72 61 6e 73 6d 69 74 20 73 6f 6d 65 20 74   Transmit some t
0e80: 63 6c 20 73 63 72 69 70 74 20 74 6f 20 61 6c 6c  cl script to all
0e90: 20 6c 69 73 74 65 6e 65 72 73 0a 70 72 6f 63 20   listeners.proc 
0ea0: 3a 3a 74 6b 63 68 61 74 3a 3a 57 68 69 74 65 62  ::tkchat::Whiteb
0eb0: 6f 61 72 64 3a 3a 54 72 61 6e 73 6d 69 74 20 7b  oard::Transmit {
0ec0: 73 63 72 69 70 74 7d 20 7b 0a 20 20 20 20 67 6c  script} {.    gl
0ed0: 6f 62 61 6c 20 4f 70 74 69 6f 6e 73 0a 20 20 20  obal Options.   
0ee0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 20 20   if {[catch {.  
0ef0: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 3a        variable :
0f00: 3a 74 6b 6a 61 62 62 65 72 3a 3a 6a 61 62 62 65  :tkjabber::jabbe
0f10: 72 0a 20 20 20 20 20 20 20 20 76 61 72 69 61 62  r.        variab
0f20: 6c 65 20 3a 3a 74 6b 6a 61 62 62 65 72 3a 3a 63  le ::tkjabber::c
0f30: 6f 6e 66 65 72 65 6e 63 65 0a 20 20 20 20 20 20  onference.      
0f40: 20 20 73 65 74 20 61 74 74 72 73 20 5b 6c 69 73    set attrs [lis
0f50: 74 20 78 6d 6c 6e 73 20 75 72 6e 3a 74 6b 63 68  t xmlns urn:tkch
0f60: 61 74 3a 77 68 69 74 65 62 6f 61 72 64 20 63 6f  at:whiteboard co
0f70: 6c 6f 72 20 24 4f 70 74 69 6f 6e 73 28 4d 79 43  lor $Options(MyC
0f80: 6f 6c 6f 72 29 5d 0a 20 20 20 20 20 20 20 20 73  olor)].        s
0f90: 65 74 20 78 6c 69 73 74 20 5b 6c 69 73 74 20 5b  et xlist [list [
0fa0: 77 72 61 70 70 65 72 3a 3a 63 72 65 61 74 65 74  wrapper::createt
0fb0: 61 67 20 78 20 2d 61 74 74 72 6c 69 73 74 20 24  ag x -attrlist $
0fc0: 61 74 74 72 73 20 2d 63 68 64 61 74 61 20 24 73  attrs -chdata $s
0fd0: 63 72 69 70 74 5d 5d 0a 20 20 20 20 20 20 20 20  cript]].        
0fe0: 24 6a 61 62 62 65 72 20 73 65 6e 64 5f 6d 65 73  $jabber send_mes
0ff0: 73 61 67 65 20 24 63 6f 6e 66 65 72 65 6e 63 65  sage $conference
1000: 20 2d 74 79 70 65 20 67 72 6f 75 70 63 68 61 74   -type groupchat
1010: 20 2d 78 6c 69 73 74 20 24 78 6c 69 73 74 0a 20   -xlist $xlist. 
1020: 20 20 20 7d 20 65 72 72 5d 7d 20 7b 0a 20 20 20     } err]} {.   
1030: 20 20 20 20 20 77 68 69 74 65 62 6f 61 72 64 20       whiteboard 
1040: 65 76 61 6c 20 5b 6c 69 73 74 20 53 74 61 74 75  eval [list Statu
1050: 73 20 24 65 72 72 5d 0a 20 20 20 20 7d 0a 7d 0a  s $err].    }.}.
1060: 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .# -------------
1070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 61 63  ------------.pac
10b0: 6b 61 67 65 20 70 72 6f 76 69 64 65 20 74 6b 63  kage provide tkc
10c0: 68 61 74 3a 3a 77 68 69 74 65 62 6f 61 72 64 20  hat::whiteboard 
10d0: 24 3a 3a 74 6b 63 68 61 74 3a 3a 57 68 69 74 65  $::tkchat::White
10e0: 62 6f 61 72 64 3a 3a 76 65 72 73 69 6f 6e 0a 23  board::version.#
10f0: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
1100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a                 ----------.