summaryrefslogtreecommitdiff
path: root/blt/demos/scripts/clone.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'blt/demos/scripts/clone.tcl')
-rw-r--r--blt/demos/scripts/clone.tcl88
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]