aboutsummaryrefslogtreecommitdiff
path: root/properties.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'properties.tcl')
-rw-r--r--properties.tcl423
1 files changed, 0 insertions, 423 deletions
diff --git a/properties.tcl b/properties.tcl
deleted file mode 100644
index d225d74..0000000
--- a/properties.tcl
+++ /dev/null
@@ -1,423 +0,0 @@
-if {[catch {package require colorpicker}]} {
- source [file join [file dirname [info script]] colorpicker.tcl]
- package require colorpicker
-}
-namespace import ::colorpicker::colorpicker
-
-proc propertieswindow {gfxstub_id {options {}} {title {}}} {
- set win $gfxstub_id
- set ::id($win.p) $gfxstub_id
- set ::optkeys($win.p) [list]
- foreach {k v} $options {
- set ::config($win.p:$k) $v
- lappend ::optkeys($win.p) $k
- }
- toplevel $win
- pack [propertiespanel $win.p]
- wm resizable $win 0 0
- wm title $win $title
- set win
-}
-
-proc has_key {w key} {
- expr {[lsearch -exact $::optkeys($w) $key] != -1}
-}
-
-proc propertiespanel {w} {
- set pad [propertiespanel_padding $w]
- incr pad $pad
- frame $w -borderwidth 0 -relief raised -padx $pad -pady $pad
- set subpanels {dimensions output behavior connective label colors}
- foreach subpanel $subpanels {
- set x [propertiespanel_$subpanel $w]
- if {$x != {}} {grid $x -sticky ew -in $w}
- }
- set x [propertiespanel_buttons $w]
- grid $x -in $w
- grid columnconfigure . 0 -weight 1
- set w
-}
-
-proc propertiespanel_padding {w} {
- return 3
-}
-
-proc propertiespanel_dimensions {w} {
- set x ${w}.dimensions
- set pad [propertiespanel_padding $w]
- labelframe $x -text "Dimensions:" -borderwidth 1 -relief raised
- set count 0
- set row 0; set col 0
- if {[has_key $w -width]} {
- grid [label ${x}.wl -text "Width (px):" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.w -textvar ::config($w:-width) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- if {[has_key $w -height]} {
- grid [label ${x}.hl -text "Height (px):" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.h -textvar ::config($w:-height) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- incr row; set col 0
- if {[has_key $w -uwidth]} {
- grid [label ${x}.uwl -text "Width (cells):" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.uw -textvar ::config($w:-uwidth) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- if {[has_key $w -uheight]} {
- grid [label ${x}.uhl -text "Height (cells):" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.uh -textvar ::config($w:-uheight) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- incr row; set col 0
- if {[has_key $w -cellsize]} {
- grid [label ${x}.csl -text "Cell size (pixels):" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.cs -textvar ::config($w:-cellsize) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- incr row; set col 0
- if {[has_key $w -cellwidth]} {
- grid [label ${x}.uwl -text "Cell width:" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.uw -textvar ::config($w:-cellwidth) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- if {[has_key $w -cellheight]} {
- grid [label ${x}.uhl -text "Cell height:" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.uh -textvar ::config($w:-cellheight) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- incr row; set col 0
- if {$count == 0} {return {}}
- set x
-}
-
-proc propertiespanel_output {w} {
- set x ${w}.output
- set pad [propertiespanel_padding $w]
- labelframe $x -text "Output range:" -borderwidth 1 -relief raised
- set count 0
- set row 0; set col 0
- if {[has_key $w -rangebottom]} {
- grid [label ${x}.rbl -text "Bottom:" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.rb -textvar ::config($w:-rangebottom) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- if {[has_key $w -rangetop]} {
- grid [label ${x}.rtl -text "Top:" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.rt -textvar ::config($w:-rangetop) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- incr row; set col 0
- if {[has_key $w -rangeleft]} {
- grid [label ${x}.rll -text "Left:" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.rl -textvar ::config($w:-rangeleft) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- if {[has_key $w -rangeright]} {
- grid [label ${x}.rrl -text "Right:" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.rr -textvar ::config($w:-rangeright) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- incr row; set col 0
- if {[has_key $w -rangemin]} {
- grid [label ${x}.rml -text "Min:" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.rm -textvar ::config($w:-rangemin) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- if {[has_key $w -rangemax]} {
- grid [label ${x}.rMl -text "Max:" -anchor e] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- grid [entry ${x}.rM -textvar ::config($w:-rangemax) -width 5] \
- -row $row -column $col -sticky ew -padx $pad -pady $pad
- incr col
- incr count
- }
- incr row; set col 0
- if {[has_key $w -logarithmic]} {
- incr col
- grid [checkbutton ${x}.rL -variable ::config($w:-logarithmic) \
- -text "Logarithmic"] \
- -row $row -column $col -columnspan 3 -sticky w -padx $pad -pady $pad
- incr col
- incr count
- }
- incr row; set col 0
- if {$count == 0} {return {}}
- set x
-}
-
-proc propertiespanel_behavior {w} {
- set x ${w}.behavior
- set pad [propertiespanel_padding $w]
- labelframe $x -text "Widget behavior:" -borderwidth 1 -relief raised
- set count 0
- set row 0; set col 0
- if {[has_key $w -jumponclick]} {
- grid [checkbutton ${x}.joc -variable ::config($w:-jumponclick) \
- -text "Jump on click"] \
- -row $row -column $col -sticky w -padx $pad -pady $pad
- incr col
- incr count
- }
- if {[has_key $w -init]} {
- grid [checkbutton ${x}.init -variable ::config($w:-init) \
- -text "Output init value"] \
- -row $row -column $col -sticky w -padx $pad -pady $pad
- incr col
- incr count
- }
- incr row; set col 0
- if {$count == 0} {return {}}
- set x
-}
-
-proc propertiespanel_label {w} {
- set x ${w}.label
- set pad [propertiespanel_padding $w]
- labelframe $x -text "Label:" -borderwidth 1 -relief raised
- set count 0
- set row 0
- if {[has_key $w -label]} {
- grid [label ${x}.ll -text "Text:" -anchor e] \
- -row $row -column 0 -sticky ew -padx $pad -pady $pad
- grid [entry ${x}.l -textvar ::config($w:-label)] \
- -row $row -column 1 -sticky ew -padx $pad -pady $pad
- incr row
- incr count
- }
- if {[has_key $w -labelpos]} {
- grid [label ${x}.lpl -text "Position:" -anchor e] \
- -row $row -column 0 -sticky ew -padx $pad -pady $pad
- frame ${x}.f
- if {![info exists ::config($w:-labelpos)]} {
- set ::config($w:-labelpos) top
- }
- grid [radiobutton ${x}.f.lp1 -variable ::config($w:-labelpos) \
- -value top -text Top] \
- -row 1 -column 1 -sticky w -padx $pad -pady $pad -in ${x}.f
- grid [radiobutton ${x}.f.lp2 -variable ::config($w:-labelpos) \
- -value bottom -text Bottom] \
- -row 1 -column 2 -sticky w -padx $pad -pady $pad -in ${x}.f
- grid [radiobutton ${x}.f.lp3 -variable ::config($w:-labelpos) \
- -value left -text Left] \
- -row 2 -column 1 -sticky w -padx $pad -pady $pad -in ${x}.f
- grid [radiobutton ${x}.f.lp4 -variable ::config($w:-labelpos) \
- -value right -text Right] \
- -row 2 -column 2 -sticky w -padx $pad -pady $pad -in ${x}.f
- grid ${x}.f -sticky w -row $row -column 1
- incr row
- incr count
- }
- if {$count == 0} {return {}}
- set x
-}
-
-proc propertiespanel_connective {w} {
- set x ${w}.connective
- set pad [propertiespanel_padding $w]
- labelframe $x -text "Messages:" -borderwidth 1 -relief raised
- set count 0
- set row 0
- if {[has_key $w -sendsymbol]} {
- grid [label ${x}.ssl -text "Send symbol:" -anchor e] \
- -row $row -column 0 -sticky ew -padx $pad -pady $pad
- grid [entry ${x}.ss -textvar ::config($w:-sendsymbol) -width 15] \
- -row $row -column 1 -sticky ew -padx $pad -pady $pad
- incr row
- incr count
- }
- if {[has_key $w -receivesymbol]} {
- grid [label ${x}.rsl -text "Receive symbol:" -anchor e] \
- -row $row -column 0 -sticky ew -padx $pad -pady $pad
- grid [entry ${x}.rs -textvar ::config($w:-receivesymbol) -width 15] \
- -row $row -column 1 -sticky ew -padx $pad -pady $pad
- incr row
- incr count
- }
- if {$count == 0} {return {}}
- set x
-}
-
-proc propertiespanel_colors {w} {
- set colors {-bgcolor Background -fgcolor Foreground -lblcolor Label}
- set x ${w}.colors
- set pad [propertiespanel_padding $w]
- labelframe $x -text "Colors:" -borderwidth 1 -relief raised
- set count 0
- set row 0
- foreach {optkey color} $colors {
- if {![has_key $w $optkey]} {continue}
- grid [label ${x}.l$color -text "${color}:" -anchor e] \
- -row $row -column 0 -sticky ew -padx $pad -pady $pad
- grid [entry ${x}.t$color -textvar ::config($w:$optkey) -width 8] \
- -row $row -column 1 -sticky ew -padx $pad -pady $pad
- grid [frame ${x}.p$color -width 20 -height 20 \
- -borderwidth 1 -relief sunken] \
- -row $row -column 2 -sticky ew -padx $pad -pady $pad
- grid [button ${x}.b$color -text "Pick..." -overrelief {} \
- -command {} \
- ] -row $row -column 3 -sticky ew -padx $pad -pady $pad
- bind ${x}.b$color <Enter> {break}
- bind ${x}.b$color <Leave> {break}
- bind ${x}.b$color <ButtonPress-1> [list \
- propertiespanel_colors_pick \
- $w $x $colors ${x}.b$color ${x}.p$color ${x}.t$color]
- trace add variable ::config($w:$optkey) write [list \
- propertiespanel_colors_set_wrap $w $x ${x}.p$color $optkey]
- incr row
- incr count
- }
- if {![info exists ::cpt($w)]} {set ::cpt($w) switches}
- foreach {optkey color} $colors {
- if {![has_key $w $optkey]} {continue}
- # trigger the variable trace:
- if {[info exists ::config($w:$optkey)]} {
- set ::config($w:$optkey) $::config($w:$optkey)
- }
- }
- if {$count == 0} {return {}}
- frame ${x}.f
- grid [radiobutton ${x}.f.cpt1 -variable ::cpt($w) -justify right \
- -value switches -text Switches] \
- -row 0 -column 0 -sticky ew -padx $pad -pady $pad
- grid [radiobutton ${x}.f.cpt2 -variable ::cpt($w) -justify right \
- -value hsv -text HSV] \
- -row 1 -column 0 -sticky ew -padx $pad -pady $pad
- grid ${x}.f -row $row -column 0
- grid [colorpicker ${x}.cp2 hsv] \
- -row $row -column 1 -columnspan 3 -sticky ew -padx $pad -pady $pad
- grid [colorpicker ${x}.cp1 switches -command [list ${x}.cp2 set]] \
- -row $row -column 1 -columnspan 3 -sticky ew -padx $pad -pady $pad
- raise ${x}.cp1
- trace add variable ::cpt($w) write \
- [list propertiespanel_colors_switchpicker $w $x $row]
- set x
-}
-
-proc propertiespanel_colors_set_wrap {w x wp optkey config_ idx op} {
- propertiespanel_colors_set $w $x $wp {} -1 $::config($w:$optkey)
-}
-
-proc propertiespanel_colors_switchpicker {w x row cpt idx op} {
- raise ${x}.cp[expr {1+($::cpt($w) == {hsv})}]
-}
-
-proc propertiespanel_colors_pick {w x colors wb wp wt} {
- foreach {k color} $colors {
- ${x}.b$color configure -relief raised -state normal
- }
- set r [$wb cget -relief]
- if {$r == {sunken}} {
- $wb configure -relief raised
- ${x}.cp1 configure -command {}
- ${x}.cp2 configure -command {}
- } else {
- $wb configure -relief sunken
- ${x}.cp1 configure -command \
- [list propertiespanel_colors_set $w $x $wp $wt 1]
- ${x}.cp2 configure -command \
- [list propertiespanel_colors_set $w $x $wp $wt 2]
- }
-}
-
-proc propertiespanel_colors_set {w x wp wt from color} {
- if {$wt != {}} {$wt delete 0 end ; $wt insert 0 $color}
- $wp configure -background $color
- if {$::cpt($w) == {switches} && $from == 1} {
- ${x}.cp2 set $color
- }
-}
-
-proc propertiespanel_buttons {w} {
- set x ${w}.buttons
- set pad [propertiespanel_padding $w]
- frame $x -padx $pad -pady $pad
- set col 0
- foreach action {Cancel Apply Ok} {
- grid [button ${x}.btn$action \
- -command [list propertiespanel_buttons_action $w $action] \
- -text $action] \
- -row 0 -column $col -padx $pad -pady $pad
- incr col
- }
- set x
-}
-
-proc propertiespanel_buttons_action {w action} {
- switch -- $action {
- Cancel {
- propertiespanel_close $w
- }
- Apply {
- propertiespanel_apply $w
- }
- Ok {
- propertiespanel_apply $w
- propertiespanel_close $w
- }
- }
-}
-
-proc propertiespanel_apply {w} {
- set newconf [list]
- foreach key $::optkeys($w) {
- set v $::config($w:$key)
- if {$v == ""} {set v "empty"}
- lappend newconf $key $v
- }
- set newconf [string map {$ \\$} $newconf]
- pd [linsert $newconf 0 $::id($w) config]\;
-}
-
-proc propertiespanel_close {w} {
- pd [concat $::id($w) cancel \;]
-}