Annotation of capa/capa51/GUITools/gradesubjective.tcl, revision 1.1
1.1 ! albertel 1: set gMaxSet 99
! 2:
! 3: proc gradeSubjective {} {
! 4: global gSubj
! 5:
! 6: if { [winfo exists .gradeSubjective] } { return }
! 7: set var [tk_getOpenFile -title "Please select a capa.config file" -filetypes \
! 8: { { {Capa Config} {capa.config} } }]
! 9:
! 10: if { $var != "" } {
! 11: set gSubj(dir) [file dirname $var]
! 12: cd $gSubj(dir)
! 13: } else {
! 14: return
! 15: }
! 16: parseCapaConfig
! 17: if { "" == [set gSubj(set) [getOneSet {} $gSubj(dir)]] } return
! 18: if { "" == [set gSubj(quest) [getString {} "Which question?"]] } return
! 19: set fileid [open "records/set$gSubj(set).db" r]
! 20: gets $fileid aline
! 21: gets $fileid aline
! 22: set gSubj(max) [lindex [split $aline {}] [expr $gSubj(quest) - 1]]
! 23: createGradeSubjWindow
! 24: }
! 25:
! 26: proc createGradeSubjWindow {} {
! 27: global gSubj
! 28:
! 29: set gradSubj [toplevel .gradesubjective]
! 30: wm protocol $gradSubj WM_DELETE_WINDOW "subjDone"
! 31:
! 32: set info [frame $gradSubj.info]
! 33: set grade [frame $gradSubj.grade]
! 34: set gSubj(pictFrame) [set picts [frame $gradSubj.picts -borderwidth 4 -relief groove]]
! 35: pack $info $grade -side top
! 36:
! 37: set msg [frame $info.msg]
! 38: set id [frame $info.id]
! 39: pack $msg $id -side left
! 40:
! 41: # set gSubj(msg) [text $msg.text -width 40 -height 8 -yscrollcommand "$msg.scroll set"]
! 42: # scrollbar $msg.scroll -command "$msg.text yview"
! 43: # pack $gSubj(msg) $msg.scroll -side left
! 44: # pack configure $msg.scroll -fill y
! 45: # $gSubj(msg) tag configure error -foreground red
! 46: # $gSubj(msg) tag configure info -foreground #006c00
! 47:
! 48: set msglist [frame $msg.msglist]
! 49: set msgbutton [frame $msg.msgbutton]
! 50: pack $msglist $msgbutton -side top
! 51: pack configure $msgbutton -anchor w
! 52:
! 53: set gSubj(response) [listbox $msglist.list -width 40 -height 5 \
! 54: -yscrollcommand "$msglist.scroll set"]
! 55: scrollbar $msglist.scroll -command "$msglist.text yview"
! 56: pack $gSubj(response) $msglist.scroll -side left
! 57: pack configure $msglist.scroll -fill y
! 58:
! 59: set gSubj(numresponse) 0
! 60:
! 61: button $msgbutton.send -text Send -command subjSendResponse
! 62: button $msgbutton.new -text New -command subjNewResponse
! 63: button $msgbutton.delete -text Delete -command subjDeleteResponse
! 64: button $msgbutton.view -text View -command subjViewResponse
! 65: button $msgbutton.edit -text Edit -command subjEditResponse
! 66: pack $msgbutton.send $msgbutton.new $msgbutton.delete $msgbutton.view \
! 67: $msgbutton.edit -side left
! 68:
! 69: set idlist [frame $id.idlist]
! 70: set idbutton [frame $id.idbutton]
! 71: pack $idlist $idbutton -side top
! 72: pack configure $idbutton -anchor w
! 73:
! 74: set gSubj(idlist) [listbox $idlist.list -width 34 -height 5 \
! 75: -yscrollcommand "$idlist.scroll set"]
! 76: scrollbar $idlist.scroll -command "$idlist.list yview"
! 77: pack $idlist.list $idlist.scroll -side left
! 78: pack configure $idlist.scroll -fill y
! 79:
! 80: button $idbutton.delete -text Delete -command subjDeleteId
! 81: pack $idbutton.delete
! 82:
! 83: set response [frame $grade.response]
! 84: pack $response
! 85:
! 86: set scoreandcom [toplevel $gradSubj.scoreandcom]
! 87: wm title $scoreandcom "Control Panel"
! 88: wm protocol $gradSubj WM_DELETE_WINDOW "subjDone"
! 89:
! 90: set score [frame $scoreandcom.score]
! 91: set command [frame $scoreandcom.command]
! 92: set morebut [frame $scoreandcom.morebut]
! 93: set stat [frame $scoreandcom.stat]
! 94: pack $score $command $morebut $stat -side top
! 95:
! 96: set command1 [frame $command.command1]
! 97: set command2 [frame $command.command2]
! 98: pack $command1 $command2 -side left
! 99:
! 100: set top [frame $response.top]
! 101: set bot [frame $response.bot]
! 102: pack $top $bot -side top
! 103: pack configure $bot -expand 0 -fill x
! 104:
! 105: set gSubj(response) [text $top.response -width 80 -height 21 \
! 106: -yscrollcommand "$top.scroll set" \
! 107: -xscrollcommand "$bot.scroll set"]
! 108: scrollbar $top.scroll -command "$top.response yview"
! 109: pack $gSubj(response) $top.scroll -side left
! 110: pack configure $top.scroll -fill y
! 111:
! 112: scrollbar $bot.scroll -orient h -command "$top.response xview"
! 113: pack $bot.scroll
! 114: pack configure $bot.scroll -expand 0 -fill x
! 115:
! 116: wm geometry $gradSubj "-10+0"
! 117:
! 118: set score0 [frame $score.score0]
! 119: set score1 [frame $score.score1]
! 120: pack $score0 $score1 -side top
! 121:
! 122: for {set i 0} {$i < 10 } { incr i } {
! 123: set parent [eval set "score[expr $i/5]"]
! 124: set a [frame $parent.score$i -relief sunken -borderwidth 1]
! 125: if { $gSubj(max) < $i} {
! 126: radiobutton $a.score$i -text $i -variable gSubj(score) \
! 127: -value $i -state disabled
! 128: } else {
! 129: radiobutton $a.score$i -text $i -variable gSubj(score) -value $i
! 130: }
! 131: pack $parent.score$i $a.score$i -side left
! 132: }
! 133:
! 134: set buttonwidth 8
! 135: set gSubj(wrap) 1;set gSubj(pict) 0
! 136: button $command1.setnext -text "Grade&Next" -command "subjSet;subjNext" \
! 137: -width $buttonwidth
! 138: button $command2.set -text "Grade" -command subjSet -width $buttonwidth
! 139: frame $command1.space1 -height 30
! 140: frame $command2.space2 -height 30
! 141: frame $command2.space22 -height 5
! 142: button $command1.next -text "Next" -command subjNext -width $buttonwidth
! 143: button $command2.prev -text "Prev" -command subjPrev -width $buttonwidth
! 144: button $command1.findid -text "Find ID" -command subjFindId -width $buttonwidth
! 145: button $command2.addid -text "Add ID" -command subjAddId -width $buttonwidth
! 146: button $command1.findname -text "Find Name" -command subjFindName -width $buttonwidth
! 147: button $command2.goto -text "GoTo" -command subjGoto -width $buttonwidth
! 148: button $command1.exit -text "Exit" -command subjDone -width $buttonwidth
! 149: checkbutton $command2.wrap -text wrap -command subjWrap -variable gSubj(wrap)
! 150: checkbutton $command2.pict -text pict -command subjPict -variable gSubj(pict)
! 151: checkbutton $command1.done -text graded -variable gSubj(donestat) -state disabled
! 152: pack $command1.setnext $command2.set $command1.space1 $command2.space2 \
! 153: $command1.next $command2.prev $command1.findid \
! 154: $command2.addid $command1.findname $command1.exit $command2.goto \
! 155: $command2.wrap $command2.pict $command1.done $command2.space22
! 156:
! 157: button $morebut.print -text "Print Response" -command subjPrint \
! 158: -width [expr $buttonwidth*2]
! 159: pack $morebut.print
! 160:
! 161: set gSubj(done) 0
! 162: set gSubj(togo) 0
! 163: set gSubj(secAvg) 0.0
! 164: set gSubj(sec) 0
! 165: set gSubj(pause) 0
! 166: label $stat.done -text Done:
! 167: label $stat.donenum -textvariable gSubj(done) -width 4
! 168: label $stat.togo -text "To Go:"
! 169: label $stat.togonum -textvariable gSubj(togo) -width 4
! 170: label $stat.sec -text Sec:
! 171: label $stat.secnum -textvariable gSubj(sec) -width 4
! 172: label $stat.avgsec -text AvgSec:
! 173: label $stat.avgsecnum -textvariable gSubj(avgsec) -width 4
! 174: checkbutton $stat.pause -variable gSubj(pause) -text "Pause" -command subjPause
! 175: pack $stat.done $stat.donenum $stat.togo $stat.togonum -side left
! 176: #not packed
! 177: #$stat.sec $stat.secnum $stat.avgsec $stat.avgsecnum $stat.pause
! 178:
! 179: set gSubj(canvas) [canvas $picts.canvas -height 220 \
! 180: -xscrollcommand "$picts.scroll set"]
! 181: scrollbar $picts.scroll -orient h -command "$picts.canvas xview"
! 182: pack $picts.scroll $gSubj(canvas) -fill x
! 183: subjInit
! 184: }
! 185:
! 186: proc subjWrap {} {
! 187: global gSubj
! 188: if { $gSubj(wrap) } {
! 189: $gSubj(response) configure -wrap char
! 190: } else {
! 191: $gSubj(response) configure -wrap none
! 192: }
! 193: }
! 194:
! 195: proc updateSecCount {} {
! 196: global gSubj
! 197:
! 198: if { [catch {set gSubj(pause)}] } { return }
! 199: if { !$gSubj(pause) } {set gSubj(sec) [expr {[clock seconds] - $gSubj(seconds)}]}
! 200: after 300 updateSecCount
! 201: }
! 202:
! 203: proc subjCheckForNew {} {
! 204: global gSubj
! 205: }
! 206:
! 207: proc subjRestore {} {
! 208: global gSubj
! 209: source gradingstatus
! 210: subjCheckForNew
! 211: set gSubj(seconds) [expr {[clock seconds] - $gSubj(sec)}]
! 212: cd $gSubj(dir)
! 213: incr gSubj(current) -1
! 214: subjNext
! 215: }
! 216:
! 217: proc subjSave {} {
! 218: global gSubj
! 219: set file [file join $gSubj(dir) records set$gSubj(set) \
! 220: problem$gSubj(quest) gradingstatus]
! 221: set fileId [open $file w]
! 222: puts $fileId "array set gSubj \"[array get gSubj]\""
! 223: close $fileId
! 224: }
! 225:
! 226: proc subjDone {} {
! 227: global gSubj
! 228: subjSave
! 229: unset gSubj
! 230: destroy .gradesubjective
! 231: }
! 232:
! 233: proc subjInit {} {
! 234: global gSubj
! 235:
! 236: set dir [file join $gSubj(dir) records set$gSubj(set) problem$gSubj(quest)]
! 237: cd $dir
! 238: if { [file exists gradingstatus] } { subjRestore } else {
! 239: set gSubj(stunums) [lsort -dictionary [glob *]]
! 240: cd $gSubj(dir)
! 241: set gSubj(current) -1
! 242: set gSubj(totalsec) 0
! 243: set gSubj(seconds) [clock seconds]
! 244: set fileId [open classl r]
! 245: while { 1 } {
! 246: set aline [gets $fileId]
! 247: if { [eof $fileId]} {break}
! 248: lappend gSubj(allstunum) [string toupper [string range $aline 14 22]]
! 249: # lappend gSubj(allname) [string toupper [string range $aline 24 59]]
! 250: lappend gSubj(allname) [string range $aline 24 59]
! 251: }
! 252: set gSubj(togo) [llength $gSubj(stunums)]
! 253: subjNext
! 254: }
! 255: after 300 updateSecCount
! 256: }
! 257:
! 258: #FIXME check Ids when adding them to the list of ids
! 259: proc checkId { id } {
! 260: global gSubj
! 261: set score [getScore $gSubj(set) $gSubj(quest) $id]
! 262: if { $score == "-" || $score == "0" } { return 1 }
! 263: return 0
! 264: }
! 265:
! 266: proc subjPause {} {
! 267: global gSubj
! 268: if { !$gSubj(pause) } { set gSubj(seconds) [expr {[clock seconds] - $gSubj(sec)}] }
! 269: }
! 270:
! 271: proc subjStatusUpdate {} {
! 272: global gSubj
! 273:
! 274: set gSubj(done) [llength [array names gSubj "done.*.score"]]
! 275: set total [llength $gSubj(stunums)]
! 276: set gSubj(togo) [expr $total-$gSubj(done)]
! 277: incr gSubj(totalsec) [expr {[clock seconds] - $gSubj(seconds)}]
! 278: set gSubj(avgsec) [format %4.1f [expr $gSubj(totalsec)/double($gSubj(done))]]
! 279: # puts $gSubj(avgsec)
! 280: set gSubj(seconds) [clock seconds]
! 281: }
! 282:
! 283: proc subjSet {} {
! 284: global gSubj
! 285:
! 286: # if {$gSubj(togo) == 0} { return }
! 287: if {$gSubj(score) == "" } { subjMessage "Please select a score." error; return }
! 288: set idlist [subjGetIdList]
! 289: foreach id $idlist {
! 290: setScore $gSubj(set) $gSubj(quest) $id $gSubj(score)
! 291: }
! 292: set id [lindex $gSubj(stunums) $gSubj(current)]
! 293: set gSubj(done.$id.idlist) $idlist
! 294: set gSubj(done.$id.score) $gSubj(score)
! 295: set gSubj(donestat) 1
! 296: subjStatusUpdate
! 297: subjSave
! 298: }
! 299:
! 300: proc subjNext {} {
! 301: global gSubj
! 302:
! 303: set gSubj(score) ""
! 304: set gSubj(pict) 0
! 305: subjPict
! 306: incr gSubj(current)
! 307: if { [llength $gSubj(stunums)] < $gSubj(current) } { incr gSubj(current) -1 }
! 308: set id [lindex $gSubj(stunums) $gSubj(current)]
! 309:
! 310: $gSubj(response) delete 0.0 end
! 311: $gSubj(idlist) delete 0 end
! 312:
! 313: if { $id != "" } {
! 314: set file [file join $gSubj(dir) records set$gSubj(set) problem$gSubj(quest) $id]
! 315: set fileId [open $file "r"]
! 316: $gSubj(response) insert 0.0 [read $fileId [file size $file]]
! 317: close $fileId
! 318: subjInsertIds $id
! 319: }
! 320:
! 321: wm title .gradesubjective "Grading Subjective, Set $gSubj(set), Prob $gSubj(quest), $id"
! 322: if { [catch {set gSubj(score) $gSubj(done.$id.score)}] } {
! 323: set gSubj(score) ""
! 324: set gSubj(donestat) 0
! 325: update idletasks
! 326: subjFindIds
! 327: } else {
! 328: set gSubj(donestat) 1
! 329: subjInsertIds $gSubj(done.$id.idlist)
! 330: update idletasks
! 331: }
! 332: subjPicts
! 333: }
! 334:
! 335: proc subjFindIds1 {} {
! 336: global gSubj
! 337:
! 338: set text [$gSubj(response) get 0.0 end]
! 339: set result ""
! 340: foreach id $gSubj(allstunum) {
! 341: if { [regexp -nocase -- $id $text] } {
! 342: lappend result $id
! 343: }
! 344: }
! 345: return $result
! 346: }
! 347:
! 348: proc subjFindIds2 {} {
! 349: global gSubj
! 350:
! 351: set text [string toupper [$gSubj(response) get 0.0 end]]
! 352: set result ""
! 353: if { [catch {lsearch $text a}] } {
! 354: puts badlist; return subjFindIds1
! 355: } else {
! 356: foreach id $gSubj(allstunum) {
! 357: if { [lsearch -glob $text *$id*] != -1 } {
! 358: lappend result $id
! 359: }
! 360: }
! 361: }
! 362: return $result
! 363: }
! 364:
! 365: proc subjFindIds3 {} {
! 366: global gSubj
! 367:
! 368: set text [string toupper [$gSubj(response) get 0.0 end]]
! 369: set text [split $text "{}!@\#\$%^&*()_-+=|\\,.<>/?'\";:`~ \n\t"]
! 370: set result ""
! 371: foreach word $text {
! 372: if { [lsearch -exact $gSubj(allstunum) $word] != -1 } {
! 373: lappend result $word
! 374: }
! 375: }
! 376: return $result
! 377: }
! 378:
! 379: proc subjFindIds4 {} {
! 380: global gSubj
! 381:
! 382: set text [string toupper [$gSubj(response) get 0.0 end]]
! 383: set text [split $text "{}!@\#\$%^&*()_-+=|\\,.<>/?'\";:`~ \n\t"]
! 384: set result ""
! 385: foreach id $gSubj(allstunum) {
! 386: if { [lsearch -exact $text $id] != -1 } {
! 387: lappend result $id
! 388: }
! 389: }
! 390: return $result
! 391: }
! 392:
! 393: proc subjFindId {} {
! 394: global gSubj
! 395: puts "4:[time {subjInsertIds [set ids [subjFindIds4]]} ]\t:[llength $ids]"
! 396: subjPicts
! 397: }
! 398:
! 399: proc subjFindIds {} {
! 400: global gSubj
! 401: # puts "4:[time {subjInsertIds [set ids [subjFindIds4]]} ]\t:[llength $ids]"
! 402: subjInsertIds [set ids [subjFindIds4]]
! 403: # puts "3:[time {set ids [subjFindIds3]} 2]\t:[llength $ids]"
! 404: # puts "2:[time {set ids [subjFindIds2]} 2]\t:[llength $ids]"
! 405: # puts "1:[time {set ids [subjFindIds1]} 2]\t:[llength $ids]"
! 406:
! 407: }
! 408:
! 409: proc subjFindName {} {
! 410: global gSubj
! 411:
! 412: if {[catch {set text [string toupper [$gSubj(response) get sel.first sel.last]]}]} {
! 413: set text [string toupper [$gSubj(response) get 0.0 end]]
! 414: }
! 415: set text [split $text "{}!@\#\$%^&*()_-+=|\\,.<>/?'\";:`~ \n\t"]
! 416: set result ""
! 417: set length [llength $gSubj(allname)]
! 418: foreach word $text {
! 419: if { [string length $word] == 0 } { continue }
! 420: for { set i 0 } { $i < $length } { incr i } {
! 421: set name [string toupper [lindex $gSubj(allname) $i]]
! 422: if { [set find [lsearch -glob $name *$word*]] != -1 } {
! 423: lappend result $i
! 424: }
! 425: }
! 426: }
! 427: set result [lunique $result]
! 428: foreach index $result {
! 429: lappend temp [list [lindex $gSubj(allstunum) $index] \
! 430: [lindex $gSubj(allname) $index]]
! 431: }
! 432: if {[catch {set temp [lsort $temp]}]} {
! 433: displayMessage "No Student found."
! 434: return
! 435: }
! 436: set selected [multipleChoice {} "Select which student you want." $temp 1]
! 437: if {$selected == ""} { return }
! 438: set done 0
! 439: if { [llength $selected] == 2 } {
! 440: if { [lindex [lindex $selected 0] 0] == "" } {
! 441: set selected [lindex $selected 0]
! 442: set done 1
! 443: }
! 444: }
! 445: if { !$done } { foreach person $selected { lappend idlist [lindex $selected 0] } }
! 446: subjInsertIds $idlist
! 447: subjPicts
! 448: }
! 449:
! 450: proc subjGetNameFromId { id } {
! 451: global gSubj
! 452: return [lindex $gSubj(allname) [lsearch $gSubj(allstunum) $id]]
! 453: }
! 454:
! 455: proc subjGetIdList {} {
! 456: global gSubj
! 457: set list [$gSubj(idlist) get 0 end]
! 458: set id ""
! 459: foreach element $list {
! 460: append id "[lindex $element 0] "
! 461: }
! 462: return $id
! 463: }
! 464:
! 465: proc subjInsertIds { selected } {
! 466: global gSubj
! 467: set current [subjGetIdList]
! 468: foreach person $selected {lappend current [lindex $person 0]}
! 469: set current [lsort [lunique $current]]
! 470: $gSubj(idlist) delete 0 end
! 471: foreach id $current {
! 472: $gSubj(idlist) insert end "$id [subjGetNameFromId $id]"
! 473: }
! 474: }
! 475:
! 476: proc subjDeleteId {} {
! 477: global gSubj
! 478: $gSubj(idlist) delete [$gSubj(idlist) curselection]
! 479: subjPicts
! 480: }
! 481:
! 482: proc subjAddId {} {
! 483: global gSubj
! 484: getOneStudent {} $gSubj(dir) id name
! 485: if { $id == "" } { return }
! 486: subjInsertIds $id
! 487: }
! 488:
! 489: proc subjPrev {} {
! 490: global gSubj
! 491: if { $gSubj(current) > 0 } {
! 492: incr gSubj(current) -2
! 493: subjNext
! 494: }
! 495: }
! 496:
! 497: proc subjMessage { mesg {tag normal} } {
! 498: global gSubj
! 499: displayMessage $message
! 500: # $gSubj(msg) insert end "[clock format [clock seconds] -format {%I:%M:%S}] - $mesg\n" $tag
! 501: # $gSubj(msg) see end
! 502: }
! 503:
! 504: proc subjAddPict { id } {
! 505: global gSubj
! 506: set gif [file join $gSubj(dir) photo gif $id.gif]
! 507: if { ![file exists $gif] } { return }
! 508: lappend gSubj(imagelist) [set image [image create photo]]
! 509: $image read $gif
! 510: set a [llength $gSubj(imagelist)]
! 511: $gSubj(canvas) create image [expr ($a-1)*200] 20 -image $image -anchor nw
! 512: $gSubj(canvas) create text [expr ($a-1)*200] 10 -text $id -anchor nw
! 513: $gSubj(canvas) create text [expr ($a-1)*200] 0 -text [subjGetNameFromId $id] \
! 514: -anchor nw
! 515: $gSubj(canvas) configure -scrollregion "1 1 [expr ($a)*200] 200"
! 516: update idletasks
! 517: return $a
! 518: }
! 519:
! 520: proc subjConvertPict { id } {
! 521: global gSubj
! 522: set gif [file join $gSubj(dir) photo gif $id.gif]
! 523: set jpg [file join $gSubj(dir) photo jpg $id.jpg]
! 524: if { ![file exists $gif] } {
! 525: if { [file exists $jpg] } {
! 526: exec djpeg -outfile $gif $jpg
! 527: }
! 528: }
! 529: }
! 530:
! 531: proc subjPicts {} {
! 532: global gSubj
! 533:
! 534: $gSubj(canvas) delete all
! 535: catch { foreach image $gSubj(imagelist) { catch {image delete $image} } }
! 536: set gSubj(imagelist) ""
! 537: set idlist [subjGetIdList]
! 538: foreach id $idlist {
! 539: subjConvertPict $id
! 540: set num [subjAddPict $id]
! 541: }
! 542: }
! 543:
! 544: proc subjPict {} {
! 545: global gSubj
! 546: if { $gSubj(pict) } {
! 547: pack $gSubj(pictFrame)
! 548: pack configure $gSubj(pictFrame) -fill x
! 549: } else {
! 550: pack forget $gSubj(pictFrame)
! 551: }
! 552: }
! 553:
! 554: proc subjPrint {} {
! 555: global gSubj
! 556: set lprCommand [getLprCommand quiztemp.txt]
! 557: if {$lprCommand == "Cancel"} { return }
! 558:
! 559: set fileId [open "quiztemp.txt" w]
! 560: set subid [lindex $gSubj(stunums) $gSubj(current)]
! 561: if { $subid != "" } {
! 562: set file [file join $gSubj(dir) records set$gSubj(set) \
! 563: problem$gSubj(quest) $subid]
! 564: puts $fileId "Submitted at [clock format [file mtime $file ]]"
! 565: puts $fileId "By Student:\n [string trimright [subjGetNameFromId $subid]] ($subid)"
! 566: }
! 567: if { [llength [subjGetIdList]] > 1 } {
! 568: puts $fileId "Additional Authors:"
! 569: foreach id [subjGetIdList] {
! 570: if { $id == $subid } { continue }
! 571: puts $fileId " [string trimright [subjGetNameFromId $id]] ($id)"
! 572: }
! 573: }
! 574: puts $fileId ""
! 575: puts -nonewline $fileId "[ $gSubj(response) get 0.0 end-1c ]"
! 576: close $fileId
! 577:
! 578: set errorMsg ""
! 579: set error [catch {set output [ eval "exec $lprCommand" ] } errorMsg ]
! 580:
! 581: if { $error == 1 } {
! 582: displayError "An error occurred while printing: $errorMsg"
! 583: } else {
! 584: displayMessage "Print job sent to the printer.\n $output"
! 585: }
! 586: exec rm -f quiztemp.txt
! 587: }
! 588:
! 589: proc subjGoto {} {
! 590: global gSubj
! 591: subjGetOneStudent {} $gSubj(dir) id name
! 592: if { $id == "" } { return }
! 593: if { [file exists [file join $gSubj(dir) records set$gSubj(set) problem$gSubj(quest) $id] ] } {
! 594: set gSubj(current) [expr [lsearch $gSubj(stunums) $id] - 1]
! 595: subjNext
! 596: } else {
! 597: displayMessage "Student $id did not submit an answer."
! 598: }
! 599: }
! 600:
! 601: proc subjGetUngraded {} {
! 602: global gSubj
! 603:
! 604: set idlist ""
! 605: foreach stunum $gSubj(stunums) {
! 606: if {[catch {set gSubj(done.$stunum.score)}]} {
! 607: lappend idlist $stunum
! 608: }
! 609: }
! 610: return [multipleChoice {} "Select which student you want to grade." $idlist 1]
! 611: }
! 612:
! 613: proc subjGetOneStudent { window path idVar nameVar {message "" } } {
! 614: upvar $idVar id
! 615: upvar $nameVar name
! 616:
! 617: set select [tk_dialog $window.dialog "$message Student select method" \
! 618: "Select student by:" "" "" "Student Number" \
! 619: "Student Name" "Not Yet Graded" "Cancel"]
! 620: if { $select == 3 } {
! 621: set id ""
! 622: set name ""
! 623: return
! 624: }
! 625: if { $select == 2 } {
! 626: set id [subjGetUngraded]
! 627: set name [subjGetNameFromId $id]
! 628: return
! 629: }
! 630: set done 0
! 631: while { ! $done } {
! 632: if { $select } { set search "name" } { set search "number" }
! 633: set pattern [ getString $window "$message Please enter a student $search." ]
! 634: if {$pattern == "" } {
! 635: set done 1
! 636: set id ""
! 637: set name ""
! 638: continue
! 639: }
! 640: if { $select } {
! 641: set matched_entries [findByStudentName $pattern $path]
! 642: } else {
! 643: set matched_entries [findByStudentNumber $pattern $path]
! 644: }
! 645: if { [llength $matched_entries] == 0 } {
! 646: displayMessage "No student found. Please re-enter student $search."
! 647: } elseif { [llength $matched_entries] == 1 } {
! 648: set id [lindex [lindex $matched_entries 0] 0]
! 649: set name [lindex [lindex $matched_entries 0] 1]
! 650: set done 1
! 651: } elseif { [llength $matched_entries] < 30 } {
! 652: set select [ multipleChoice $window \
! 653: "Matched Student Records, Select one" \
! 654: $matched_entries ]
! 655: if { $select == "" } {
! 656: set id ""; set name ""
! 657: return
! 658: }
! 659: set id [lindex $select 0]
! 660: set name [lindex $select 1]
! 661: set done 1
! 662: } else {
! 663: displayMessage "There were [llength $matched_entries], please enter more data to narrow the search."
! 664: }
! 665: }
! 666: }
! 667:
! 668: ###########################################################
! 669: # subjSendResponse
! 670: ###########################################################
! 671: ###########################################################
! 672: ###########################################################
! 673: proc subjSendResponse {} {
! 674: global gSubj
! 675: }
! 676:
! 677: proc subjIndexResponse {} {
! 678: global gSubj
! 679:
! 680: $gSubj(response) delete 0 end
! 681:
! 682: set i 0
! 683: foreach element [lsort -dictionary [array names gSubj "response.*"]] {
! 684: set head [string range $gSubj($element) 0 30]
! 685: $gSubj(response) insert end "[incr i]. $head"
! 686: }
! 687: }
! 688:
! 689: ###########################################################
! 690: # subjSaveResponse
! 691: ###########################################################
! 692: ###########################################################
! 693: ###########################################################
! 694: proc subjSaveResponse {} {
! 695: global gSubj
! 696:
! 697: set num [incr gSubj(numresponse)]
! 698: set gSubj(response.$num) [$gSubj(responseEdit) get 0.0 end]
! 699: subjIndexResponse
! 700: }
! 701:
! 702: ###########################################################
! 703: # subjNewResponse
! 704: ###########################################################
! 705: ###########################################################
! 706: ###########################################################
! 707: proc subjNewResponse {} {
! 708: global gSubj gWindowMenu
! 709:
! 710: if { [winfo exists .addresponse] } {
! 711: capaRaise .addresponse
! 712: return
! 713: }
! 714: set response [toplevel .addresponse]
! 715: $gWindowMenu add command -label "AddingResponse" -command "capaRaise $response"
! 716: wm title $response "Adding a New Response"
! 717:
! 718: set textFrame [frame $response.text]
! 719: set buttonFrame [frame $response.button]
! 720:
! 721: set gSubj(responseEdit) [text $textFrame.text -yscrollcommand \
! 722: "$textFrame.scroll set" -wrap char -height 15]
! 723: scrollbar $textFrame.scroll -command "$textFrame.text yview"
! 724: pack $textFrame.scroll $textFrame.text -side left -expand 1
! 725:
! 726: button $buttonFrame.save -text Save -command "subjSaveResponse"
! 727: button $buttonFrame.forget -text Cancel -command "destroy $response"
! 728: pack $buttonFrame.save $buttonFrame.forget -side left
! 729: }
! 730:
! 731: ###########################################################
! 732: # subjDeleteResponse
! 733: ###########################################################
! 734: ###########################################################
! 735: ###########################################################
! 736: proc subjDeleteResponse {} {
! 737: global gSubj
! 738: }
! 739:
! 740: ###########################################################
! 741: # subjEditResponse
! 742: ###########################################################
! 743: ###########################################################
! 744: ###########################################################
! 745: proc subjEditResponse {} {
! 746: global gSubj
! 747: }
! 748:
! 749: ###########################################################
! 750: # subjViewResponse
! 751: ###########################################################
! 752: ###########################################################
! 753: ###########################################################
! 754: proc subjViewResponse {} {
! 755: global gSubj
! 756: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>