version 1.3, 1999/11/05 19:32:17
|
version 1.10, 2000/03/22 21:08:02
|
Line 20 proc gradeSubjective {} {
|
Line 20 proc gradeSubjective {} {
|
gets $fileid aline |
gets $fileid aline |
gets $fileid aline |
gets $fileid aline |
set gSubj(max) [lindex [split $aline {}] [expr $gSubj(quest) - 1]] |
set gSubj(max) [lindex [split $aline {}] [expr $gSubj(quest) - 1]] |
|
set gSubj(keywords) "" |
createGradeSubjWindow |
createGradeSubjWindow |
} |
} |
|
|
Line 31 proc createGradeSubjWindow {} {
|
Line 32 proc createGradeSubjWindow {} {
|
|
|
set info [frame $gradSubj.info] |
set info [frame $gradSubj.info] |
set grade [frame $gradSubj.grade] |
set grade [frame $gradSubj.grade] |
|
set keyword [frame $gradSubj.keyword] |
set gSubj(pictFrame) [set picts [frame $gradSubj.picts -borderwidth 4 -relief groove]] |
set gSubj(pictFrame) [set picts [frame $gradSubj.picts -borderwidth 4 -relief groove]] |
pack $info $grade -side top |
pack $info $grade $keyword -side top |
|
|
set msg [frame $info.msg] |
set msg [frame $info.msg] |
set id [frame $info.id] |
set id [frame $info.id] |
Line 52 proc createGradeSubjWindow {} {
|
Line 54 proc createGradeSubjWindow {} {
|
|
|
set gSubj(responseList) [listbox $msglist.list -width 40 -height 5 \ |
set gSubj(responseList) [listbox $msglist.list -width 40 -height 5 \ |
-yscrollcommand "$msglist.scroll set"] |
-yscrollcommand "$msglist.scroll set"] |
scrollbar $msglist.scroll -command "$msglist.text yview" |
scrollbar $msglist.scroll -command "$msglist.list yview" |
pack $gSubj(responseList) $msglist.scroll -side left |
pack $gSubj(responseList) $msglist.scroll -side left |
pack configure $msglist.scroll -fill y |
pack configure $msglist.scroll -fill y |
|
|
Line 88 proc createGradeSubjWindow {} {
|
Line 90 proc createGradeSubjWindow {} {
|
|
|
set scoreandcom [toplevel $gradSubj.scoreandcom] |
set scoreandcom [toplevel $gradSubj.scoreandcom] |
wm title $scoreandcom "Control Panel" |
wm title $scoreandcom "Control Panel" |
wm protocol $gradSubj WM_DELETE_WINDOW "subjDone" |
wm protocol $scoreandcom WM_DELETE_WINDOW "subjDone" |
|
|
set score [frame $scoreandcom.score] |
set score [frame $scoreandcom.score] |
set command [frame $scoreandcom.command] |
set command [frame $scoreandcom.command] |
Line 116 proc createGradeSubjWindow {} {
|
Line 118 proc createGradeSubjWindow {} {
|
pack $bot.scroll |
pack $bot.scroll |
pack configure $bot.scroll -expand 0 -fill x |
pack configure $bot.scroll -expand 0 -fill x |
|
|
|
set left [frame $keyword.left] |
|
set left2 [frame $keyword.left2] |
|
set right [frame $keyword.right] |
|
pack $left $left2 $right -side left |
|
|
|
set gSubj(keyword) [text $right.keyword -width 60 -height 5 \ |
|
-yscrollcommand "$right.scroll set" ] |
|
scrollbar $right.scroll -command "$right.response yview" |
|
pack $gSubj(keyword) $right.scroll -side left |
|
pack configure $right.scroll -fill y |
|
|
|
bindtags $gSubj(keyword) "$gSubj(keyword) all" |
|
bind $gSubj(keyword) <1> "[bind Text <1>][bind Text <Double-1>]" |
|
|
|
button $left.add -command "subjAddKeyword" -text "Add" |
|
button $left2.addsp -command "subjAddKeywordSpelling" -text "Add Sp" |
|
button $left.delete -command "subjDeleteKeyword" -text "Delete" |
|
button $left2.see -command "subjSeeKeyword" -text "See Sp" |
|
pack $left.add $left2.addsp $left.delete $left2.see -side top |
|
|
wm geometry $gradSubj "-10+0" |
wm geometry $gradSubj "-10+0" |
|
|
set score0 [frame $score.score0] |
set score0 [frame $score.score0] |
Line 143 proc createGradeSubjWindow {} {
|
Line 165 proc createGradeSubjWindow {} {
|
frame $command2.space2 -height 30 |
frame $command2.space2 -height 30 |
frame $command2.space22 -height 5 |
frame $command2.space22 -height 5 |
button $command1.next -text "Next" -command subjNext -width $buttonwidth |
button $command1.next -text "Next" -command subjNext -width $buttonwidth |
button $command2.prev -text "Prev" -command subjPrev -width $buttonwidth |
button $command1.prev -text "Prev" -command subjPrev -width $buttonwidth |
button $command1.findid -text "Find ID" -command subjFindId -width $buttonwidth |
button $command1.goto -text "GoTo" -command subjGoto -width $buttonwidth |
button $command2.addid -text "Add ID" -command subjAddId -width $buttonwidth |
|
button $command1.findname -text "Find Name" -command subjFindName -width $buttonwidth |
|
button $command2.goto -text "GoTo" -command subjGoto -width $buttonwidth |
|
button $command1.exit -text "Exit" -command subjDone -width $buttonwidth |
button $command1.exit -text "Exit" -command subjDone -width $buttonwidth |
|
button $command2.findid -text "Find ID" -command subjFindId -width $buttonwidth |
|
button $command2.addid -text "Add ID" -command subjAddId -width $buttonwidth |
|
button $command2.findname -text "Find Name" -command subjFindName -width $buttonwidth |
checkbutton $command2.wrap -text wrap -command subjWrap -variable gSubj(wrap) |
checkbutton $command2.wrap -text wrap -command subjWrap -variable gSubj(wrap) |
checkbutton $command2.pict -text pict -command subjPict -variable gSubj(pict) |
checkbutton $command2.pict -text pict -command subjPict -variable gSubj(pict) |
checkbutton $command1.done -text graded -variable gSubj(donestat) -state disabled |
checkbutton $command1.done -text graded -variable gSubj(donestat) -state disabled |
pack $command1.setnext $command2.set $command1.space1 $command2.space2 \ |
pack $command1.setnext $command2.set $command1.space1 $command2.space2 \ |
$command1.next $command2.prev $command1.findid \ |
$command1.next $command1.prev $command2.findid \ |
$command2.addid $command1.findname $command1.exit $command2.goto \ |
$command2.addid $command2.findname $command1.goto $command1.exit \ |
$command2.wrap $command2.pict $command1.done $command2.space22 |
$command2.wrap $command2.pict $command1.done $command2.space22 |
|
|
button $morebut.print -text "Print Response" -command subjPrint \ |
button $morebut.print -text "Print Response" -command subjPrint \ |
Line 205 proc updateSecCount {} {
|
Line 227 proc updateSecCount {} {
|
|
|
proc subjCheckForNew {} { |
proc subjCheckForNew {} { |
global gSubj |
global gSubj |
|
|
|
foreach file [glob ?????????] { |
|
if { [lsearch $gSubj(stunums) $file] == -1 } { lappend gSubj(stunums) $file } |
|
} |
|
set gSubj(togo) [expr [llength $gSubj(stunums)]-$gSubj(done)] |
|
} |
|
|
|
proc checkGSubj {} { |
|
global gSubj |
|
if {[catch {set gSubj(stunums)}]} { |
|
cd [file join $gSubj(dir) records set$gSubj(set) problem$gSubj(quest)] |
|
set gSubj(stunums) [lsort -dictionary [glob *]] |
|
if { [set num [lsearch $gSubj(stunums) gradingstatus]] != -1} { |
|
set gSubj(stunums) [lreplace $gSubj(stunums) $num $num] |
|
} |
|
cd $gSubj(dir) |
|
} |
|
if {[catch {set gSubj(current)}]} {set gSubj(current) -1} |
|
if {[catch {set gSubj(totalsec)}]} {set gSubj(totalsec) 0} |
|
if {[catch {set gSubj(seconds)}]} {set gSubj(seconds) [clock seconds]} |
|
if {[catch {set gSubj(togo)}]} {set gSubj(togo) [llength $gSubj(stunums)]} |
|
if {[catch {set gSubj(allstunum)}] || |
|
[catch {set gSubj(allname)}] || |
|
[catch {set gSubj(allemail)}] } { |
|
subjInitAllLists |
|
} |
} |
} |
|
|
proc subjRestore {} { |
proc subjRestore {} { |
Line 213 proc subjRestore {} {
|
Line 261 proc subjRestore {} {
|
subjCheckForNew |
subjCheckForNew |
set gSubj(seconds) [expr {[clock seconds] - $gSubj(sec)}] |
set gSubj(seconds) [expr {[clock seconds] - $gSubj(sec)}] |
cd $gSubj(dir) |
cd $gSubj(dir) |
incr gSubj(current) -1 |
if { [catch {incr gSubj(current) -1}]} { set gSubj(current) -1 } |
|
if { $gSubj(redoalllists) } { subjInitAllLists; set gSubj(redoalllists) 0 } |
|
checkGSubj |
|
subjIndexResponse |
subjNext |
subjNext |
} |
} |
|
|
Line 222 proc subjSave {} {
|
Line 273 proc subjSave {} {
|
set file [file join $gSubj(dir) records set$gSubj(set) \ |
set file [file join $gSubj(dir) records set$gSubj(set) \ |
problem$gSubj(quest) gradingstatus] |
problem$gSubj(quest) gradingstatus] |
set fileId [open $file w] |
set fileId [open $file w] |
puts $fileId "array set gSubj \"[array get gSubj]\"" |
puts $fileId "array set gSubj \{[array get gSubj]\}" |
close $fileId |
close $fileId |
} |
} |
|
|
proc subjDone {} { |
proc subjDone {} { |
global gSubj |
global gSubj |
subjSave |
if { [catch {subjSave}] } { |
|
displayMessage "Unable to save." |
|
} |
unset gSubj |
unset gSubj |
destroy .gradesubjective |
destroy .gradesubjective |
} |
} |
|
|
|
proc subjInitAllLists {} { |
|
global gSubj |
|
set i 0 |
|
catch {unset gSubj(allstunum)} |
|
catch {unset gSubj(allname)} |
|
catch {unset gSubj(allemail)} |
|
set fileId [open classl r] |
|
while { 1 } { |
|
incr i |
|
set aline [gets $fileId] |
|
if { [eof $fileId]} {break} |
|
# skip blank lines |
|
if { [string trim $aline] == "" } { continue } |
|
lappend gSubj(allstunum) [string toupper [string range $aline 14 22]] |
|
#lappend gSubj(allname) [string toupper [string range $aline 24 59]] |
|
lappend gSubj(allname) [string range $aline 24 59] |
|
lappend gSubj(allemail) [string range $aline 60 99] |
|
} |
|
} |
|
|
proc subjInit {} { |
proc subjInit {} { |
global gSubj |
global gSubj |
|
|
set dir [file join $gSubj(dir) records set$gSubj(set) problem$gSubj(quest)] |
set dir [file join $gSubj(dir) records set$gSubj(set) problem$gSubj(quest)] |
cd $dir |
cd $dir |
|
set gSubj(redoalllists) 0 |
if { [file exists gradingstatus] } { subjRestore } else { |
if { [file exists gradingstatus] } { subjRestore } else { |
set gSubj(stunums) [lsort -dictionary [glob *]] |
set gSubj(stunums) [lsort -dictionary [glob *]] |
cd $gSubj(dir) |
cd $gSubj(dir) |
set gSubj(current) -1 |
set gSubj(current) -1 |
set gSubj(totalsec) 0 |
set gSubj(totalsec) 0 |
set gSubj(seconds) [clock seconds] |
set gSubj(seconds) [clock seconds] |
set fileId [open classl r] |
subjInitAllLists |
while { 1 } { |
|
set aline [gets $fileId] |
|
if { [eof $fileId]} {break} |
|
lappend gSubj(allstunum) [string toupper [string range $aline 14 22]] |
|
# lappend gSubj(allname) [string toupper [string range $aline 24 59]] |
|
lappend gSubj(allname) [string range $aline 24 59] |
|
} |
|
set gSubj(togo) [llength $gSubj(stunums)] |
set gSubj(togo) [llength $gSubj(stunums)] |
subjNext |
subjNext |
} |
} |
|
subjUpdateKeywords |
after 300 updateSecCount |
after 300 updateSecCount |
} |
} |
|
|
Line 335 proc subjNext {} {
|
Line 403 proc subjNext {} {
|
subjInsertIds $gSubj(done.$id.idlist) |
subjInsertIds $gSubj(done.$id.idlist) |
update idletasks |
update idletasks |
} |
} |
|
subjUpdateResponse |
subjPicts |
subjPicts |
} |
} |
|
|
Line 357 proc subjFindIds2 {} {
|
Line 426 proc subjFindIds2 {} {
|
set text [string toupper [$gSubj(response) get 0.0 end]] |
set text [string toupper [$gSubj(response) get 0.0 end]] |
set result "" |
set result "" |
if { [catch {lsearch $text a}] } { |
if { [catch {lsearch $text a}] } { |
puts badlist; return subjFindIds1 |
#puts badlist |
|
return subjFindIds1 |
} else { |
} else { |
foreach id $gSubj(allstunum) { |
foreach id $gSubj(allstunum) { |
if { [lsearch -glob $text *$id*] != -1 } { |
if { [lsearch -glob $text *$id*] != -1 } { |
Line 502 proc subjPrev {} {
|
Line 572 proc subjPrev {} {
|
|
|
proc subjMessage { mesg {tag normal} } { |
proc subjMessage { mesg {tag normal} } { |
global gSubj |
global gSubj |
displayMessage $message |
displayMessage $mesg |
# $gSubj(msg) insert end "[clock format [clock seconds] -format {%I:%M:%S}] - $mesg\n" $tag |
# $gSubj(msg) insert end "[clock format [clock seconds] -format {%I:%M:%S}] - $mesg\n" $tag |
# $gSubj(msg) see end |
# $gSubj(msg) see end |
} |
} |
Line 677 proc subjGetOneStudent { window path idV
|
Line 747 proc subjGetOneStudent { window path idV
|
########################################################### |
########################################################### |
########################################################### |
########################################################### |
proc subjSendResponse {} { |
proc subjSendResponse {} { |
global gSubj |
global gSubj gCapaConfig |
|
|
|
if { "" == [set which [$gSubj(responseList) curselection]]} { |
|
displayMessage "Please select a message to send." |
|
return |
|
} |
|
incr which |
|
|
|
set message "" |
|
|
|
set stuList [$gSubj(idlist) get 0 end] |
|
foreach stu $stuList { |
|
set stu [lindex $stu 0] |
|
set index [lsearch $gSubj(allstunum) $stu] |
|
set name [lindex $gSubj(allname) $index] |
|
set email [lindex $gSubj(allemail) $index] |
|
#puts "$name:[split $name ,]:[lindex [split $name ,] 1]:[lindex [lindex [split $name ,] 1] 0]:$index:$stu" |
|
#puts [lsearch $gSubj(allemail) albertel@pilot.msu.edu] |
|
set first_name [lindex [lindex [split $name ,] 1] 0] |
|
set last_name [lindex [split $name , ] 0] |
|
set score $gSubj(score) |
|
regsub -all -- \\\$last_name $gSubj(response.$which) $last_name message |
|
regsub -all -- \\\$first_name $message $first_name message |
|
regsub -all -- \\\$score $message $score message |
|
# set message [subst -nobackslashes -nocommands $gSubj(response.$which)] |
|
if { [regexp -- (^Subject:\[^\n\]*)(\n)(.*) $message matchvar subjline newline messagebody] } { |
|
set subject "$subjline Class [file tail $gSubj(dir)], Set $gSubj(set), Question $gSubj(quest)" |
|
set message $messagebody |
|
} else { |
|
set subject "Subject: Class [file tail $gSubj(dir)], Set $gSubj(set), Question $gSubj(quest)" |
|
} |
|
displayMessage "$message sent to $email" |
|
exec echo $message | $gCapaConfig(mail_command) -s $subject $email |
|
} |
} |
} |
|
|
########################################################### |
########################################################### |
Line 692 proc subjIndexResponse {} {
|
Line 795 proc subjIndexResponse {} {
|
|
|
set i 0 |
set i 0 |
foreach element [lsort -dictionary [array names gSubj "response.*"]] { |
foreach element [lsort -dictionary [array names gSubj "response.*"]] { |
regsub -all -- "\n\r\t" [string range $gSubj($element) 0 30] " " head |
regsub -all -- "\[\n\r\t\]+" [string range $gSubj($element) 0 37] " " head |
$gSubj(responseList) insert end "[incr i]. $head" |
$gSubj(responseList) insert end "[incr i].$head" |
} |
} |
} |
} |
|
|
Line 706 proc subjSaveResponse {} {
|
Line 809 proc subjSaveResponse {} {
|
global gSubj |
global gSubj |
|
|
set num [incr gSubj(numresponse)] |
set num [incr gSubj(numresponse)] |
set gSubj(response.$num) [$gSubj(responseEdit) get 0.0 end] |
set gSubj(response.$num) [$gSubj(responseNew) get 0.0 end-1c] |
destroy [winfo toplevel $gSubj(responseEdit)] |
destroy [winfo toplevel $gSubj(responseNew)] |
subjIndexResponse |
subjIndexResponse |
|
$gSubj(responseList) selection set end |
|
$gSubj(responseList) see end |
} |
} |
|
|
########################################################### |
########################################################### |
Line 731 proc subjNewResponse {} {
|
Line 836 proc subjNewResponse {} {
|
set buttonFrame [frame $response.button] |
set buttonFrame [frame $response.button] |
pack $textFrame $buttonFrame |
pack $textFrame $buttonFrame |
|
|
set gSubj(responseEdit) [text $textFrame.text -yscrollcommand \ |
set gSubj(responseNew) [text $textFrame.text -yscrollcommand \ |
"$textFrame.scroll set" -wrap char -height 15] |
"$textFrame.scroll set" -wrap char -height 15] |
scrollbar $textFrame.scroll -command "$textFrame.text yview" |
scrollbar $textFrame.scroll -command "$textFrame.text yview" |
pack $textFrame.text $textFrame.scroll -side left -expand 1 |
pack $textFrame.text $textFrame.scroll -side left -expand 1 |
Line 749 proc subjNewResponse {} {
|
Line 854 proc subjNewResponse {} {
|
########################################################### |
########################################################### |
proc subjDeleteResponse {} { |
proc subjDeleteResponse {} { |
global gSubj |
global gSubj |
|
if { [winfo exists .editresponse] } { |
|
displayMessage "Please finish with editing the response, before deleting responses." |
|
return |
|
} |
|
if { "" == [set which [$gSubj(responseList) curselection]]} { return } |
|
incr which |
|
if { [catch {unset gSubj(response.$which)}] } { |
|
#puts [array names gSubj response.*] |
|
return |
|
} |
|
for {set i [expr $which + 1]} { [info exists gSubj(response.$i)] } {incr i} { |
|
set j [expr $i - 1] |
|
set gSubj(response.$j) $gSubj(response.$i) |
|
unset gSubj(response.$i) |
|
} |
|
set gSubj(numresponse) [expr $i - 2] |
|
subjIndexResponse |
|
$gSubj(responseList) see [incr which -2] |
} |
} |
|
|
########################################################### |
########################################################### |
Line 757 proc subjDeleteResponse {} {
|
Line 880 proc subjDeleteResponse {} {
|
########################################################### |
########################################################### |
########################################################### |
########################################################### |
proc subjEditResponse {} { |
proc subjEditResponse {} { |
global gSubj |
global gSubj gWindowMenu |
|
|
|
if { [winfo exists .editresponse] } { capaRaise .editresponse ; return } |
|
if { "" == [set which [$gSubj(responseList) curselection]]} { return } |
|
incr which |
|
|
|
set response [toplevel .editresponse ] |
|
$gWindowMenu add command -label "EditingResponse" -command "capaRaise $response" |
|
wm title $response "Editing a Response" |
|
|
|
set textFrame [frame $response.text] |
|
set buttonFrame [frame $response.button] |
|
pack $textFrame $buttonFrame |
|
|
|
set gSubj(responseEdit) [text $textFrame.text -yscrollcommand \ |
|
"$textFrame.scroll set" -wrap char -height 15] |
|
scrollbar $textFrame.scroll -command "$textFrame.text yview" |
|
pack $textFrame.text $textFrame.scroll -side left -expand 1 |
|
pack configure $textFrame.scroll -fill y |
|
$gSubj(responseEdit) insert 0.0 $gSubj(response.$which) |
|
|
|
set gSubj(editresponsedone) 0 |
|
button $buttonFrame.save -text Save -command "set gSubj(editresponsedone) 1" |
|
button $buttonFrame.forget -text Cancel -command "set gSubj(editresponsedone) 0" |
|
pack $buttonFrame.save $buttonFrame.forget -side left |
|
vwait gSubj(editresponsedone) |
|
if { $gSubj(editresponsedone) } { |
|
set gSubj(response.$which) [$gSubj(responseEdit) get 0.0 end-1c] |
|
subjIndexResponse |
|
$gSubj(responseList) selection set $which |
|
$gSubj(responseList) see $which |
|
} |
|
destroy $response |
} |
} |
|
|
########################################################### |
########################################################### |
Line 766 proc subjEditResponse {} {
|
Line 921 proc subjEditResponse {} {
|
########################################################### |
########################################################### |
########################################################### |
########################################################### |
proc subjViewResponse {} { |
proc subjViewResponse {} { |
|
global gSubj gUniqueNumber gWindowMenu |
|
|
|
if { "" == [set which [$gSubj(responseList) curselection]]} { return } |
|
incr which |
|
set num [incr gUniqueNumber] |
|
|
|
set response [toplevel .viewresponse$num ] |
|
$gWindowMenu add command -label "ViewingResponse $which" \ |
|
-command "capaRaise $response" |
|
wm title $response "Viewing Response $which" |
|
|
|
set textFrame [frame $response.text] |
|
set buttonFrame [frame $response.button] |
|
pack $textFrame $buttonFrame |
|
|
|
text $textFrame.text -yscrollcommand "$textFrame.scroll set" -wrap char -height 15 |
|
scrollbar $textFrame.scroll -command "$textFrame.text yview" |
|
pack $textFrame.text $textFrame.scroll -side left -expand 1 |
|
pack configure $textFrame.scroll -fill y |
|
$textFrame.text insert 0.0 $gSubj(response.$which) |
|
$textFrame.text configure -state disabled |
|
|
|
button $buttonFrame.forget -text Dismiss -command "destroy $response" |
|
pack $buttonFrame.forget -side left |
|
} |
|
|
|
########################################################### |
|
# subjUpdateResponse |
|
########################################################### |
|
########################################################### |
|
########################################################### |
|
proc subjUpdateResponse {} { |
|
global gSubj |
|
|
|
$gSubj(response) tag delete keyword |
|
$gSubj(response) tag configure keyword -background green |
|
set startindex 0.0 |
|
set lastindex [$gSubj(response) index end] |
|
while { 1 } { |
|
set endindex [$gSubj(response) index "$startindex wordend"] |
|
# puts "$startindex -> $endindex" |
|
set word [string trim [string toupper [$gSubj(response) get $startindex $endindex]]] |
|
if { $word != "" } { |
|
# puts "Word :$word:" |
|
foreach keyword $gSubj(keywords) { |
|
set keyword [string toupper [lindex $keyword 1]] |
|
if { [lsearch -exact $keyword $word] != -1 } { |
|
$gSubj(response) tag add keyword $startindex $endindex |
|
} |
|
} |
|
# puts [$gSubj(response) index "$endindex+1c"] |
|
# puts [$gSubj(response) index "$endindex wordstart"] |
|
# puts [$gSubj(response) index "$endindex+1c wordstart"] |
|
|
|
# set startindex [$gSubj(response) index "$endindex + 1c"] |
|
} |
|
set startindex $endindex |
|
if { $startindex == $lastindex } { break } |
|
} |
|
} |
|
|
|
########################################################### |
|
# subjUpdateKeywords |
|
########################################################### |
|
########################################################### |
|
########################################################### |
|
proc subjUpdateKeywords {} { |
|
global gSubj |
|
$gSubj(keyword) delete 0.0 end |
|
set lokeyword "" |
|
# puts $gSubj(keywords) |
|
foreach keyword $gSubj(keywords) { lappend lokeyword [lindex $keyword 0] } |
|
if { $lokeyword == "" } { return } |
|
set lokeyword [lsort $lokeyword] |
|
set max 0 |
|
foreach key $lokeyword { |
|
if { [string length $key] > $max } { set max [string length $key] } |
|
} |
|
incr max |
|
set numcol [expr 60/$max] |
|
set end [llength $lokeyword] |
|
set lastline 0 |
|
for { set i 0 } { $i < $end } { incr i } { |
|
set line [expr $i/$numcol] |
|
set col [expr $i%$numcol*$max] |
|
# puts $line.$col |
|
$gSubj(keyword) insert end [format "%-[set max]s" [lindex $lokeyword $i]] |
|
if {($col + (2*$max)) > 60} { |
|
# puts "Putting in newlne" |
|
$gSubj(keyword) insert end "\n" |
|
set lastline $line |
|
} |
|
} |
|
subjUpdateResponse |
|
} |
|
|
|
########################################################### |
|
# subjAddKeyword |
|
########################################################### |
|
########################################################### |
|
########################################################### |
|
proc subjAddKeyword {} { |
|
global gSubj |
|
|
|
if { "" == [set newword [getString [winfo toplevel $gSubj(keyword)] "Enter a new keyword" nospace ]]} { |
|
return |
|
} |
|
set i 0 |
|
foreach keyword $gSubj(keywords) { |
|
if {-1 != [lsearch $keyword $newword]} { break } |
|
incr i |
|
} |
|
if { $i >= [llength $gSubj(keywords)] } { |
|
lappend gSubj(keywords) [list $newword [list $newword]] |
|
subjUpdateKeywords |
|
} |
|
} |
|
|
|
########################################################### |
|
# subjAddKeywordSpelling |
|
########################################################### |
|
########################################################### |
|
########################################################### |
|
proc subjAddKeywordSpelling {} { |
global gSubj |
global gSubj |
|
|
|
if { [catch {set word [$gSubj(keyword) get sel.first sel.last]}]} { return } |
|
if { "" == [set newspell [getString [winfo toplevel $gSubj(keyword)] "Enter a new spelling for $word" nospace ]]} { |
|
return |
|
} |
|
set i 0 |
|
foreach keyword $gSubj(keywords) { |
|
if {-1 != [lsearch $keyword $word]} { break } |
|
incr i |
|
} |
|
|
|
set gSubj(keywords) [lreplace $gSubj(keywords) $i $i \ |
|
[list $word [concat [lindex $keyword 1] $newspell]]] |
|
subjUpdateKeywords |
|
} |
|
|
|
########################################################### |
|
# subjSeeKeyword |
|
########################################################### |
|
########################################################### |
|
########################################################### |
|
proc subjSeeKeyword {} { |
|
global gSubj gPromptMC |
|
|
|
if { [catch {set word [$gSubj(keyword) get sel.first sel.last]}]} { return } |
|
set i 0 |
|
foreach keyword $gSubj(keywords) { |
|
if {-1 != [lsearch $keyword $word]} { break } |
|
incr i |
|
} |
|
|
|
set which $i |
|
set setWin [toplevel $gSubj(keyword).keyword] |
|
|
|
set msgFrame [frame $setWin.msgFrame] |
|
set valFrame [frame $setWin.valFrame] |
|
set buttonFrame [frame $setWin.buttonFrame] |
|
pack $msgFrame $valFrame $buttonFrame |
|
pack configure $valFrame -expand 1 -fill both |
|
|
|
message $msgFrame.msg -text "Alternate spellings for [lindex $keyword 0]" \ |
|
-aspect 3000 |
|
pack $msgFrame.msg |
|
|
|
set maxWidth 1 |
|
foreach choice [lindex $keyword 1] { |
|
if {[string length $choice] > $maxWidth} {set maxWidth [string length $choice]} |
|
} |
|
listbox $valFrame.val -width [expr $maxWidth + 2] \ |
|
-yscrollcommand "$valFrame.scroll set" -selectmode single |
|
scrollbar $valFrame.scroll -command "$valFrame.val yview" |
|
pack $valFrame.val $valFrame.scroll -side left |
|
pack configure $valFrame.val -expand 1 -fill both |
|
pack configure $valFrame.scroll -expand 0 -fill y |
|
foreach choice [lsort [lrange [lindex $keyword 1] 1 end]] { |
|
$valFrame.val insert end $choice |
|
} |
|
|
|
button $buttonFrame.select -text "Delete" -command { set gPromptMC(ok) 1 } |
|
frame $buttonFrame.spacer -width 10 |
|
button $buttonFrame.cancel -text "Dismiss" -command { set gPromptMC(ok) 0 } |
|
pack $buttonFrame.select $buttonFrame.cancel -side left |
|
|
|
bind $setWin <Return> "set gPromptMC(ok) 0" |
|
Centre_Dialog $setWin default |
|
update idletasks |
|
focus $setWin |
|
capaRaise $setWin |
|
capaGrab $setWin |
|
while { 1 } { |
|
update idletasks |
|
vwait gPromptMC(ok) |
|
if { $gPromptMC(ok) == 0 } { break } |
|
set select [$valFrame.val curselection] |
|
if { $select != "" } { |
|
$valFrame.val delete $select |
|
} |
|
} |
|
set spellings [lindex $keyword 0] |
|
for {set i 0} {$i < [$valFrame.val index end]} { incr i } { |
|
lappend spellings [$valFrame.val get $i] |
|
} |
|
capaGrab release $setWin |
|
destroy $setWin |
|
|
|
set gSubj(keywords) [lreplace $gSubj(keywords) $which $which \ |
|
[list [lindex $keyword 0] $spellings ]] |
|
|
|
subjUpdateKeywords |
} |
} |
|
|
|
########################################################### |
|
# subjDeleteKeyword |
|
########################################################### |
|
########################################################### |
|
########################################################### |
|
proc subjDeleteKeyword {} { |
|
global gSubj |
|
|
|
if { [catch {set word [$gSubj(keyword) get sel.first sel.last]}]} { return } |
|
set newkeyword "" |
|
foreach keyword $gSubj(keywords) { |
|
if {-1 == [lsearch $keyword $word]} { lappend newkeyword $keyword } |
|
} |
|
set gSubj(keywords) $newkeyword |
|
subjUpdateKeywords |
|
} |
|
|