archie/tcl-dp/examples/whiteboard/wbClient.tcl
2024-05-27 16:13:40 +02:00

66 lines
1.6 KiB
Tcl

package require dp 4.0
puts "Enter hostname of server:"
set host localhost
set server [dp_MakeRPCClient $host 4544]
proc DoCmd {args} {
global server
eval dp_RDO $server BroadCast $args
}
dp_RDO $server JoinGroup
wm grid . 1 1 1 1
# Create menu bar:
frame .menubar -relief ridge
menubutton .menubar.file -text "File" -menu .menubar.file.menu
pack .menubar.file -side left
menubutton .menubar.object -text "Objects" -menu .menubar.object.menu
pack .menubar.object -side left
pack .menubar -side top -fill both
menu .menubar.file.menu
.menubar.file.menu add command -label "Exit" -command exit
menu .menubar.object.menu
.menubar.object.menu add command -label "Clear" -command "DoCmd Clear"
.menubar.object.menu add command -label "Circle" -command "DoCmd CreateCircle"
# Create canvas
canvas .c -background blue
pack .c -fill both
proc CreateRect {x y} {
DoCmd .c create rectangle $x $y $x $y -width 4 -outline white
}
proc CreateCircle {} {
set i [.c create oval 150 150 170 170 -fill skyblue]
.c bind $i <Any-Enter> "DoCmd .c itemconfig $i -fill red"
.c bind $i <Any-Leave> "DoCmd .c itemconfig $i -fill SkyBlue2"
.c bind $i <3> "DoCmd plotDown .c $i %x %y"
.c bind $i <B3-Motion> "DoCmd plotMove .c $i %x %y"
}
proc Clear {} {.c delete all}
proc plotDown {w item x y} {
global plot
$w raise $item
set plot(lastX) $x
set plot(lastY) $y
}
proc plotMove {w item x y} {
global plot
$w move $item [expr $x-$plot(lastX)] [expr $y-$plot(lastY)]
set plot(lastX) $x
set plot(lastY) $y
}
bind .c <B1-Motion> {CreateRect %x %y}