Artifact
27d1b9672b8c6c2862de9126aaa7202dfa8c3eed9360b0e06bdb230976c8d88c :
File
apps/tkchat/tkchat.vfs/bin/tkchat_whiteboard.tcl
— part of check-in
[8b3841a01c]
at
2023-10-13 23:16:47
on branch emiliano-cleanup
— Variable naming cleanup. Bring most used variables in procs to LVT using either [global] or [variable]
(user:
emiliano
size: 4411)
[more...]
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 ----------.