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

412 lines
10 KiB
PSL

## FBsearchstring
## (FBtext procedure)
# make Search String window
##
## k.ohtubo(Tubocky)
##
## 1997.3.16
## Tcl/Tk version 8.0
## 1998 July 5 GEANT4 Beta-01
##
proc Search_String {} {
global FONT SEARCH REPLACE F_COLOR B_COLOR
if {![winfo exists .fbt.text]} {
Message_Skeleton -icon warning -button O.K. \
-message "Warning!\nWhat's happen?"
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {destroy .msgskeleton}
return
}
if [winfo exists .ss] {
raise .ss
focus .ss.ent.search
return
}
toplevel .ss -highlightthickness 0
wm title .ss "Search String"
wm protocol .ss WM_DELETE_WINDOW {
.fbt.text tag remove SEARCH_TAG 1.0 end
.fbt.text tag remove SEARCH_ALL_TAG 1.0 end
destroy .ss
}
frame .ss.butt -highlightthickness 0
pack .ss.butt -side top -fill x
button .ss.butt.b0 -text Search -bd 3 -highlightthickness 0 \
-command {
if {[.ss.ent.search get] != ""} {
if {![Search]} {
set STRING [.ss.ent.search get]
Message_Skeleton -icon info -button O.K. \
-message "$STRING:No match."
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {destroy .msgskeleton}
}
} else {
Message_Skeleton -icon error -button O.K. \
-message "Input String."
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {destroy .msgskeleton}
}
}
button .ss.butt.b1 -text Replace -bd 3 -highlightthickness 0 \
-command {
if {[.ss.ent.search get] != ""} {
if {[.ss.ent.replace get] != ""} {
Message_Skeleton -icon question -button {Yes No} \
-message "Chack!\nDelete [.ss.ent.search get]?"
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {
destroy .msgskeleton
Replace
}
.msgskeleton.butt.1 configure -command {destroy .msgskeleton}
}
} else {
Message_Skeleton -icon error -button O.K. \
-message "Input String."
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {destroy .msgskeleton}
}
}
menubutton .ss.butt.b2 -text Option -menu .ss.butt.b2.set \
-relief raised -bd 3 -highlightthickness 0
menu .ss.butt.b2.set -tearoff 0
.ss.butt.b2.set add cascade -label Search -menu .ss.butt.b2.set.search
.ss.butt.b2.set add cascade -label Replace \
-menu .ss.butt.b2.set.replace
menu .ss.butt.b2.set.search -tearoff 0
.ss.butt.b2.set.search add radiobutton -label Up \
-variable SEARCH -value Up
.ss.butt.b2.set.search add radiobutton -label Down \
-variable SEARCH -value Down
menu .ss.butt.b2.set.replace -tearoff 0
.ss.butt.b2.set.replace add radiobutton -label "Only One" \
-variable REPLACE -value One
.ss.butt.b2.set.replace add radiobutton -label "About All" \
-variable REPLACE -value All
button .ss.butt.b3 -text Clear -bd 3 -highlightthickness 0 \
-command {
.ss.ent.search delete 0 end
.ss.ent.replace delete 0 end
.fbt.text tag remove SEARCH_TAG 1.0 end
.fbt.text tag remove SEARCH_ALL_TAG 1.0 end
focus .ss.ent.search
.fbt.text see end
}
button .ss.butt.b4 -text Cancel -bd 3 -highlightthickness 0 \
-command {
if [winfo exists .ss] {destroy .ss}
.fbt.text tag remove SEARCH_TAG 1.0 end
.fbt.text tag remove SEARCH_ALL_TAG 1.0 end
}
pack .ss.butt.b0 .ss.butt.b1 .ss.butt.b2 .ss.butt.b3 .ss.butt.b4 \
-side left -fill x
frame .ss.space -highlightthickness 0
pack .ss.space -side top -fill both -expand 1
frame .ss.label -highlightthickness 0
pack .ss.label -side left
label .ss.label.search -text Search -anchor w \
-highlightthickness 0
pack .ss.label.search -side top -fill x
label .ss.label.replace -text Replace -anchor w \
-highlightthickness 0
pack .ss.label.replace -side top -fill x
frame .ss.ent -highlightthickness 0
pack .ss.ent -side left -fill x -expand 1
entry .ss.ent.search -highlightthickness 0
pack .ss.ent.search -side top -fill x
entry .ss.ent.replace -highlightthickness 0
pack .ss.ent.replace -side top -fill x
focus .ss.ent.search
Tab_off
Control
foreach BIND {Return Tab Shift-Tab Down Control-n} {
bind .ss.ent.search <$BIND> {focus .ss.ent.replace}
}
foreach BIND {Return Tab Shift-Tab Up Control-p} {
bind .ss.ent.replace <$BIND> {focus .ss.ent.search}
}
if {$FONT != ""} {
Change_Font $FONT .ss
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .ss
}
Win_Size .ss
wm resizable .ss 1 0
}
# Search string on FBtext window
proc Search {} {
global SEARCH FONT F_COLOR B_COLOR
if {![winfo exists .ss.ent.search]} {
Message_Skeleton -icon warning -button O.K. \
-message "Warning!\nWhat's happen?"
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {destroy .msgskeleton}
return 1
}
.fbt.text tag remove SEARCH_ALL_TAG 1.0 end
.fbt.text tag configure SEARCH_ALL_TAG \
-foreground #fffffffff -background #000000000
set CURSOL [.fbt.text index insert]
set CUR 1.0
set STRING [.ss.ent.search get]
if {$STRING != ""} {
while {[set CUR [.fbt.text search -count LENGTH -regexp --\
$STRING $CUR end]] != ""} {
.fbt.text tag add SEARCH_ALL_TAG \
$CUR "$CUR + $LENGTH char"
set CUR [.fbt.text index "$CUR + $LENGTH char"]
}
}
.fbt.text index $CURSOL
switch $SEARCH {
Up {
if [Search_Up] {
return 1
} else {
return 0
}
}
Down {
if [Search_Down] {
return 1
} else {
return 0
}
}
default {
Message_Skeleton -icon error -button O.K. \
-message "Click \"Option\" button.\nAnd check search up or down."
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {destroy .msgskeleton}
return 1
}
}
}
# Search mode is "up"
proc Search_Up {} {
.fbt.text tag remove SEARCH_TAG 1.0 end
.fbt.text tag configure SEARCH_TAG \
-foreground #fffffffff -background #ccc000000
set CURSOL [.fbt.text index insert]
set STRING [.ss.ent.search get]
set STOP 1.0
set INDEX [.fbt.text search -backwards \
-count LENGTH -regexp -- $STRING $CURSOL $STOP]
if {$INDEX != ""} {
scan $INDEX %d.%d LINE HEAD
set TAIL [expr $HEAD + $LENGTH]
.fbt.text tag add SEARCH_TAG $LINE.$HEAD $LINE.$TAIL
.fbt.text mark set insert $LINE.$HEAD
.fbt.text yview -pickplace insert
} else {
.fbt.text mark set insert 1.0
return 0
}
return 1
}
# Search mode is "down"
proc Search_Down {} {
.fbt.text tag remove SEARCH_TAG 1.0 end
.fbt.text tag configure SEARCH_TAG \
-foreground #fffffffff -background #ccc000000
set CURSOL [.fbt.text index insert]
set STRING [.ss.ent.search get]
set STOP [.fbt.text index end]
set INDEX [.fbt.text search -count LENGTH -regexp \
-- $STRING $CURSOL $STOP]
if {$INDEX != ""} {
scan $INDEX %d.%d LINE HEAD
set TAIL [expr $HEAD + $LENGTH]
.fbt.text tag add SEARCH_TAG $LINE.$HEAD $LINE.$TAIL
.fbt.text mark set insert $LINE.$TAIL
.fbt.text yview -pickplace insert
} else {
.fbt.text mark set insert end
return 0
}
return 1
}
# Replace string on FBtext window
proc Replace {} {
global REPLACE FONT F_COLOR B_COLOR errorCode errorInfo
if {![winfo exists .ss.ent.replace]} {
Message_Skeleton -icon warning -button O.K. \
-message "Warning!\nWhat's happen?"
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {destroy .msgskeleton}
return
}
set STRING [.ss.ent.search get]
switch $REPLACE {
One {
if {![Replace_One]} {
Message_Skeleton -icon info -button O.K. \
-message "$STRING:No match."
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {destroy .msgskeleton}
}
}
All {
Message_Skeleton -icon question -button {Yes No} \
-message "Check!\nReplace all?"
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 configure -command {
destroy .msgskeleton
Replace_All
}
.msgskeleton.butt.1 configure -command {destroy .msgskeleton}
}
default {
Message_Skeleton -icon warning -button O.K. \
-message "Click \"Option\" button.\nAnd check replace one or all."
if {$FONT != ""} {
Change_Font $FONT .msgskeleton
}
if {$F_COLOR != "" && $B_COLOR != ""} {
Change_Color $F_COLOR $B_COLOR .msgskeleton
}
.msgskeleton.butt.0 conigure -command {destroy .msgskeleton}
}
}
}
# Replace mode is "one"
proc Replace_One {} {
if {[set RANGE [.fbt.text tag range SEARCH_TAG]] == ""} {
if {![Search]} {
return 0
} else {
return 1
}
}
if {[.ss.ent.search get] != [eval ".fbt.text get $RANGE"]} {
if {![Search]} {
return 0
} else {
set RANGE [.fbt.text tag range SEARCH_TAG]
}
}
.fbt.text tag remove SEARCH_TAG 1.0 end
eval .fbt.text delete $RANGE
set INSERT [lindex [split $RANGE] 0]
if {![catch {.ss.ent.replace get} STRING]} {
.fbt.text insert $INSERT $STRING
scan $INSERT %d.%d LINE HEAD
set TAIL [expr [string length $STRING] + $HEAD]
.fbt.text tag add SEARCH_TAG $LINE.$HEAD $LINE.$TAIL
if {![Search]} {return 0}
}
if {$errorCode != "NONE"} {
set errorCode NONE
}
if {$errorInfo != ""} {
set errorInfo ""
}
return 1
}
# Replace mode is "all"
proc Replace_All {} {
while {[Replace_One] != 0} {}
}