Files
geant4/environments/Momo/tcltk/DefineColor.proc
T
2016-06-01 15:25:35 +02:00

383 lines
10 KiB
PSL

## DefineColor
## (Momo procedure)
# Define foreground and background Color of all widgets
##
## k.ohtubo(Tubocky)
##
## 1997.3.16
## Tcl/Tk version 8.0
## 1998 July 5 GEANT4 Beta-01
proc Define_Color {} {
global env FC FR FG FB BC BR BG BB
if {![info exists FC]} {
if {[lsearch [array name env] FORE_GROUND_COLOR] >= 0} {
set FC $env(FORE_GROUND_COLOR)
Reset_Color F
}
}
if {![info exists BC]} {
if {[lsearch [array name env] BACK_GROUND_COLOR] >= 0} {
set BC $env(BACK_GROUND_COLOR)
Reset_Color B
}
}
if [winfo exists .dc] {
raise .dc
return
}
toplevel .dc -highlightthickness 0
wm title .dc "Define Colors"
frame .dc.butt -highlightthickness 0
pack .dc.butt -side top -fill x
button .dc.butt.change -text "Change Color" -bd 3 \
-highlightthickness 0 \
-command {
Change_Color $FC $BC .
set env(FORE_GROUND_COLOR) $FC
set env(BACK_GROUND_COLOR) $BC
if [winfo exists .cf] {
Change_Color $FC $BC .cf
}
if [winfo exists .se] {
Change_Color $FC $BC .se
Put_Env
}
Make_Color .dc.fg.main.color
Make_Color .dc.bg.main.color
}
pack .dc.butt.change -side left
button .dc.butt.default -text Default -bd 3 -highlightthickness 0 \
-command {
set FR 0
set FG 0
set FB 0
Make_Color .dc.fg.main.color
set BR 0.848
set BG 0.848
set BB 0.848
Make_Color .dc.bg.main.color
}
pack .dc.butt.default -side left
button .dc.butt.cancel -text Cancel -bd 3 -highlightthickness 0 \
-command {
destroy .dc
}
pack .dc.butt.cancel -side left
frame .dc.space -height 10 -highlightthickness 0
pack .dc.space -side top
frame .dc.fg -highlightthickness 0
pack .dc.fg -side top -fill both
frame .dc.fg.input -relief raised -bd 1 -highlightthickness 0
pack .dc.fg.input -side top -fill x
label .dc.fg.input.label -text Foreground: -highlightthickness 0
pack .dc.fg.input.label -side left
entry .dc.fg.input.ent -textvariable FC -state disabled -relief flat \
-highlightthickness 0
pack .dc.fg.input.ent -side left -fill x -expand 1
frame .dc.fg.main -relief raised -bd 1 -highlightthickness 0
pack .dc.fg.main -side top -fill x
frame .dc.fg.main.color -relief sunken -bd 1 -width 70 -height 40 \
-highlightthickness 0
pack .dc.fg.main.color -side left -padx 20 -pady 10
frame .dc.fg.main.scale -highlightthickness 0
pack .dc.fg.main.scale -side left -fill x -expand 1
frame .dc.fg.main.scale.r -highlightthickness 0
pack .dc.fg.main.scale.r -side top -fill x -expand 1
label .dc.fg.main.scale.r.label -text R -anchor w \
-highlightthickness 0
pack .dc.fg.main.scale.r.label -side left
entry .dc.fg.main.scale.r.ent -width 5 -relief flat \
-textvariable FR -highlightthickness 0
pack .dc.fg.main.scale.r.ent -side left
scale .dc.fg.main.scale.r.scale -from 0 -to 1 -resolution 0.01 \
-variable FR -orient horizontal -showvalue false \
-activebackground #fff000000 -troughcolor #bcd000000 \
-command {Make_Color .dc.fg.main.color} \
-highlightthickness 0
pack .dc.fg.main.scale.r.scale -side left -fill x -expand 1
frame .dc.fg.main.scale.g -highlightthickness 0
pack .dc.fg.main.scale.g -side top -fill x -expand 1
label .dc.fg.main.scale.g.label -text G -anchor w \
-highlightthickness 0
pack .dc.fg.main.scale.g.label -side left
entry .dc.fg.main.scale.g.ent -width 5 -relief flat \
-textvariable FG -highlightthickness 0
pack .dc.fg.main.scale.g.ent -side left
scale .dc.fg.main.scale.g.scale -from 0 -to 1 -resolution 0.01 \
-variable FG -orient horizontal -showvalue false \
-activebackground #000fff000 -troughcolor #000bcd000 \
-command {Make_Color .dc.fg.main.color} \
-highlightthickness 0
pack .dc.fg.main.scale.g.scale -side left -fill x -expand 1
frame .dc.fg.main.scale.b -highlightthickness 0
pack .dc.fg.main.scale.b -side top -fill x -expand 1
label .dc.fg.main.scale.b.label -text B -anchor w \
-highlightthickness 0
pack .dc.fg.main.scale.b.label -side left
entry .dc.fg.main.scale.b.ent -width 5 -relief flat \
-textvariable FB -highlightthickness 0
pack .dc.fg.main.scale.b.ent -side left
scale .dc.fg.main.scale.b.scale -from 0 -to 1 -resolution 0.01 \
-variable FB -orient horizontal -showvalue false \
-activebackground #000000fff -troughcolor #000000bcd \
-command {Make_Color .dc.fg.main.color} \
-highlightthickness 0
pack .dc.fg.main.scale.b.scale -side left -fill x -expand 1
frame .dc.between -height 10 -highlightthickness 0
pack .dc.between -side top -fill x
frame .dc.bg -highlightthickness 0
pack .dc.bg -side top -fill both
frame .dc.bg.input -relief raised -bd 1 -highlightthickness 0
pack .dc.bg.input -side top -fill x
label .dc.bg.input.label -text Background: -highlightthickness 0
pack .dc.bg.input.label -side left
entry .dc.bg.input.ent -textvariable BC -state disabled \
-relief flat -highlightthickness 0
pack .dc.bg.input.ent -side left -fill x -expand 1
frame .dc.bg.main -relief raised -bd 1 -highlightthickness 0
pack .dc.bg.main -side top -fill x
frame .dc.bg.main.color -relief sunken -bd 1 -width 70 -height 40 \
-highlightthickness 0
pack .dc.bg.main.color -side left -padx 20 -pady 10
frame .dc.bg.main.scale -highlightthickness 0
pack .dc.bg.main.scale -side left -fill x -expand 1
frame .dc.bg.main.scale.r -highlightthickness 0
pack .dc.bg.main.scale.r -side top -fill x -expand 1
label .dc.bg.main.scale.r.label -text R -anchor w \
-highlightthickness 0
pack .dc.bg.main.scale.r.label -side left
entry .dc.bg.main.scale.r.ent -width 5 -relief flat \
-textvariable BR -highlightthickness 0
pack .dc.bg.main.scale.r.ent -side left
scale .dc.bg.main.scale.r.scale -from 0 -to 1 -resolution 0.01 \
-variable BR -orient horizontal -showvalue false \
-activebackground #fff000000 -troughcolor #bcd000000 \
-command {Make_Color .dc.bg.main.color} \
-highlightthickness 0
pack .dc.bg.main.scale.r.scale -side left -fill x -expand 1
frame .dc.bg.main.scale.g -highlightthickness 0
pack .dc.bg.main.scale.g -side top -fill x -expand 1
label .dc.bg.main.scale.g.label -text G -anchor w \
-highlightthickness 0
pack .dc.bg.main.scale.g.label -side left
entry .dc.bg.main.scale.g.ent -width 5 -relief flat \
-textvariable BG -highlightthickness 0
pack .dc.bg.main.scale.g.ent -side left
scale .dc.bg.main.scale.g.scale -from 0 -to 1 -resolution 0.01 \
-variable BG -orient horizontal -showvalue false \
-activebackground #000fff000 -troughcolor #000bcd000 \
-command {Make_Color .dc.bg.main.color} \
-highlightthickness 0
pack .dc.bg.main.scale.g.scale -side left -fill x -expand 1
frame .dc.bg.main.scale.b -highlightthickness 0
pack .dc.bg.main.scale.b -side top -fill x -expand 1
label .dc.bg.main.scale.b.label -text B -anchor w \
-highlightthickness 0
pack .dc.bg.main.scale.b.label -side left
entry .dc.bg.main.scale.b.ent -width 5 -relief flat \
-textvariable BB -highlightthickness 0
pack .dc.bg.main.scale.b.ent -side left
scale .dc.bg.main.scale.b.scale -from 0 -to 1 -resolution 0.01 \
-variable BB -orient horizontal -showvalue false \
-activebackground #000000fff -troughcolor #000000bcd \
-command {Make_Color .dc.bg.main.color} \
-highlightthickness 0
pack .dc.bg.main.scale.b.scale -side left -fill x -expand 1
# Binding
foreach BIND {Return Tab Down Control-n} {
bind .dc.fg.main.scale.r.ent <$BIND> {
focus .dc.fg.main.scale.g.ent
}
bind .dc.fg.main.scale.g.ent <$BIND> {
focus .dc.fg.main.scale.b.ent
}
bind .dc.fg.main.scale.b.ent <$BIND> {
focus .dc.bg.main.scale.r.ent
}
bind .dc.bg.main.scale.r.ent <$BIND> {
focus .dc.bg.main.scale.g.ent
}
bind .dc.bg.main.scale.g.ent <$BIND> {
focus .dc.bg.main.scale.b.ent
}
bind .dc.bg.main.scale.b.ent <$BIND> {
focus .dc.fg.main.scale.r.ent
}
}
foreach BIND {Shift-Tab Up Control-p} {
bind .dc.fg.main.scale.r.ent <$BIND> {
focus .dc.bg.main.scale.b.ent
}
bind .dc.fg.main.scale.g.ent <$BIND> {
focus .dc.fg.main.scale.r.ent
}
bind .dc.fg.main.scale.b.ent <$BIND> {
focus .dc.fg.main.scale.g.ent
}
bind .dc.bg.main.scale.r.ent <$BIND> {
focus .dc.fg.main.scale.b.ent
}
bind .dc.bg.main.scale.g.ent <$BIND> {
focus .dc.bg.main.scale.r.ent
}
bind .dc.bg.main.scale.b.ent <$BIND> {
focus .dc.bg.main.scale.g.ent
}
}
if {[lsearch [array names env] FONT] >= 0} {
Change_Font $env(FONT) .dc
}
Change_Color $env(FORE_GROUND_COLOR) $env(BACK_GROUND_COLOR) .dc
Win_Size .dc
wm resizable .dc 1 0
Tab_off
Control
}
# Make Color (RGB)
proc Make_Color {w args} {
switch $w {
.dc.fg.main.color {
global FC FR FG FB
regexp {^[0-9]+} [expr $FR * 4095] red
regexp {^[0-9]+} [expr $FG * 4095] green
regexp {^[0-9]+} [expr $FB * 4095] blue
set FC [format #%03x%03x%03x $red $green $blue]
$w configure -bg $FC
}
.dc.bg.main.color {
global BC BR BG BB
regexp {^[0-9]+} [expr $BR * 4095] red
regexp {^[0-9]+} [expr $BG * 4095] green
regexp {^[0-9]+} [expr $BB * 4095] blue
set BC [format #%03x%03x%03x $red $green $blue]
$w configure -bg $BC
}
}
}
# Set Color(FG BG) value in environment variable
proc Set_Color {} {
global env FC BC
set env(FORE_GROUND_COLOR) $FC
set env(BACK_GROUND_COLOR) $BC
}
# Reset Color default value
proc Reset_Color SWITCH {
global FC FR FG FB BC BR BG BB
switch $SWITCH {
F {
switch [string length $FC] {
4 { scan $FC #%01x%01x%01x red green blue
set FR [expr [format %f $red] / 4095.0]
set FG [expr [format %f $green] / 4095.0]
set FB [expr [format %f $blue] / 4095.0]
}
7 { scan $FC #%02x%02x%02x red green blue
set FR [expr [format %f $red] / 4095.0]
set FG [expr [format %f $green] / 4095.0]
set FB [expr [format %f $blue] / 4095.0]
}
10 { scan $FC #%03x%03x%03x red green blue
set FR [expr [format %f $red] / 4095.0]
set FG [expr [format %f $green] / 4095.0]
set FB [expr [format %f $blue] / 4095.0]
}
}
}
B {
switch [string length $BC] {
4 { scan $BC #%01x%01x%01x red green blue
set BR [expr [format %f $red] / 4095.0]
set BG [expr [format %f $green] / 4095.0]
set BB [expr [format %f $blue] / 4095.0]
}
7 { scan $BC #%02x%02x%02x red green blue
set BR [expr [format %f $red] / 4095.0]
set BG [expr [format %f $green] / 4095.0]
set BB [expr [format %f $blue] / 4095.0]
}
10 { scan $BC #%03x%03x%03x red green blue
set BR [expr [format %f $red] / 4095.0]
set BG [expr [format %f $green] / 4095.0]
set BB [expr [format %f $blue] / 4095.0]
}
}
}
}
}