diff options
Diffstat (limited to 'blt/demos/scripts/clone.tcl')
-rw-r--r-- | blt/demos/scripts/clone.tcl | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/blt/demos/scripts/clone.tcl b/blt/demos/scripts/clone.tcl new file mode 100644 index 00000000000..874f55d54b7 --- /dev/null +++ b/blt/demos/scripts/clone.tcl @@ -0,0 +1,88 @@ + +proc CopyOptions { cmd orig new } { + set all [eval $orig $cmd] + set configLine $new + foreach arg $cmd { + lappend configLine $arg + } + foreach option $all { + if { [llength $option] != 5 } { + continue + } + set switch [lindex $option 0] + set initial [lindex $option 3] + set current [lindex $option 4] + if { [string compare $initial $current] == 0 } { + continue + } + lappend configLine $switch $current + } + eval $configLine +} + +proc CopyBindings { oper orig new args } { + set tags [$orig $oper bind] + if { [llength $args] > 0 } { + lappend tags [lindex $args 0] + } + foreach tag $tags { + foreach binding [$orig $oper bind $tag] { + set cmd [$orig $oper bind $tag $binding] + $new $oper bind $tag $binding $cmd + } + } +} + +proc CloneGraph { orig new } { + graph $new + CopyOptions "configure" $orig $new + # Axis component + foreach axis [$orig axis names] { + if { [$new axis name $axis] == "" } { + $new axis create $axis + } + CopyOptions [list axis configure $axis] $orig $new + } + foreach axis { x y x2 y2 } { + $new ${axis}axis use [$orig ${axis}axis use] + } + # Pen component + foreach pen [$orig pen names] { + if { [$new pen name $pen] == "" } { + $new pen create $pen + } + CopyOptions [list pen configure $pen] $orig $new + } + # Marker component + foreach marker [$orig marker names] { + $new marker create [$orig marker type $marker] -name $marker + CopyBindings marker $orig $new $marker + CopyOptions [list marker configure $marker] $orig $new + } + # Element component + foreach elem [$orig element names] { + $new element create $elem + CopyBindings element $orig $new $elem + CopyOptions [list element configure $elem] $orig $new + } + # Fix element display list + $new element show [$orig element show] + # Legend component + CopyOptions {legend configure} $orig $new + CopyBindings legend $orig $new + # Postscript component + CopyOptions {postscript configure} $orig $new + # Grid component + CopyOptions {grid configure} $orig $new + # Grid component + CopyOptions {crosshairs configure} $orig $new + # Graph bindings + foreach binding [bind $orig] { + set cmd [bind $orig $binding] + bind $new $binding $cmd + } + return $new +} + +toplevel .top +pack [CloneGraph $graph .top.graph] |