Annotation of capa/capa51/GUITools/classl.tcl, revision 1.1
1.1 ! albertel 1: ###########################################################
! 2: # createClasslEditor
! 3: ###########################################################
! 4: ###########################################################
! 5: ###########################################################
! 6: proc createClasslEditor { classlFile } {
! 7: global gUniqueNumber gWindowMenu gWindow gTitle gClassl gFile \
! 8: gClosed
! 9:
! 10: set error [ catch {set fileId [open $classlFile "r"]}]
! 11: if { $error } {
! 12: displayError "Unable to open a $classlFile."
! 13: return
! 14: }
! 15: close $fileId
! 16:
! 17: set num [incr gUniqueNumber]
! 18:
! 19: set gFile($num) $classlFile
! 20:
! 21: set classlWin [toplevel .classlwindow$num]
! 22: $gWindowMenu add command -label "Classl $classlFile" \
! 23: -command "capaRaise $classlWin"
! 24: wm title $classlWin "Classl $classlFile"
! 25:
! 26: set menuFrame [frame $classlWin.menu -borderwidth 3 -relief raised]
! 27: set infoFrame [frame $classlWin.infoFrame]
! 28: set actionFrame [frame $classlWin.actionFrame]
! 29: set windowFrame [frame $classlWin.windowFrame]
! 30: pack $menuFrame $infoFrame $actionFrame $windowFrame
! 31: pack configure $windowFrame -expand 1 -fill both
! 32: pack configure $menuFrame -fill x -anchor w
! 33:
! 34: #menu
! 35: menubutton $menuFrame.file -text File -menu $menuFrame.file.m
! 36: menubutton $menuFrame.edit -text Copy -menu $menuFrame.edit.m
! 37: pack $menuFrame.file $menuFrame.edit -side left
! 38:
! 39: set fileMenu [ menu $menuFrame.file.m ]
! 40: set editMenu [ menu $menuFrame.edit.m ]
! 41:
! 42: $fileMenu add command -label Open -accelerator "Alt+o" \
! 43: -command "specifyClass createClasslEditor"
! 44: bind $classlWin <Alt-o> "specifyClass createClasslEditor"
! 45: $fileMenu add command -label Save -command "saveClassl $num 0" \
! 46: -accelerator "Alt+s"
! 47: bind $classlWin <Alt-s> "saveClassl $num 0"
! 48: $fileMenu add command -label "Save As" -command "saveClassl $num 1" \
! 49: -accelerator "Alt+S"
! 50: bind $classlWin <Alt-Shift-s> "saveClassl $num 1"
! 51: $fileMenu add command -label Print -command "printClassl $num"
! 52: $fileMenu add command -label Close -command "closeClassl $num" \
! 53: -accelerator "Alt+w"
! 54: bind $classlWin <Alt-w> "closeClassl $num"
! 55:
! 56: $editMenu add command -label "Copy StudentNum" -command "classlCopy $num stunum" \
! 57: -accelerator "Alt+c"
! 58: bind $classlWin <Alt-c> "classlCopy $num stunum"
! 59: $editMenu add command -label "Copy Name" -command "classlCopy $num name" \
! 60: -accelerator "Alt+n"
! 61: bind $classlWin <Alt-n> "classlCopy $num name"
! 62: $editMenu add command -label "Copy Email" -command "classlCopy $num email" \
! 63: -accelerator "Alt+e"
! 64: bind $classlWin <Alt-e> "classlCopy $num email"
! 65:
! 66: #info
! 67: #action
! 68: button $actionFrame.add -text "Add" -command "classlAdd $num"
! 69: button $actionFrame.edit -text "Edit" -command "classlEdit $num"
! 70: button $actionFrame.delete -text "Delete" -command "classlDelete $num"
! 71: button $actionFrame.section -text "Change Section" -command "classlSectionChange $num"
! 72: button $actionFrame.sort -text "Sort" -command "classlSort $num"
! 73: button $actionFrame.print -text "Print" -command "classlPrint $num"
! 74: button $actionFrame.find -text "Find" -command "classlFind $num"
! 75: pack $actionFrame.add $actionFrame.edit $actionFrame.delete $actionFrame.section \
! 76: $actionFrame.sort $actionFrame.print $actionFrame.find -side left
! 77:
! 78: #window
! 79: set leftFrame [frame $windowFrame.left]
! 80: set rightFrame [frame $windowFrame.right]
! 81: pack $leftFrame $rightFrame -side left
! 82: pack configure $leftFrame -expand 1 -fill both
! 83: pack configure $rightFrame -fill y
! 84:
! 85: #FIXME need to set the title width based on the widest occuring element in
! 86: #the listbox
! 87: scrollbar $rightFrame.scroll -orient v -command "$leftFrame.classl yview"
! 88: pack $rightFrame.scroll -fill y -expand 1 -pady 20
! 89:
! 90: set gTitle($num) [format "%-100s" "Class Section StuNum Name E-mail"]
! 91: entry $leftFrame.title -textvariable gTitle($num) -width 80 \
! 92: -state disabled -xscrollcommand "$leftFrame.scroll set"
! 93: set gClassl($num) [ listbox $leftFrame.classl -width 80 -height 30 \
! 94: -xscrollcommand "$leftFrame.scroll set" \
! 95: -yscrollcommand "$rightFrame.scroll set" \
! 96: -exportselection 0]
! 97: scrollbar $leftFrame.scroll -orient h -command \
! 98: "scrolltwo {$leftFrame.classl xview} {$leftFrame.title xview}"
! 99: pack $leftFrame.title $leftFrame.classl $leftFrame.scroll -side top
! 100: pack configure $leftFrame.title $leftFrame.scroll -fill x
! 101: pack configure $leftFrame.classl -fill both -expand 1
! 102:
! 103: set fileId [open $classlFile "r"]
! 104: while { 1 } {
! 105: set aline [gets $fileId]
! 106: if { [eof $fileId ] } { break }
! 107: $gClassl($num) insert end [format "%-100s" $aline]
! 108: }
! 109: set gClassl($num.changed) 0
! 110: set gClassl($num.changedlast) 0
! 111: set gClosed($num) 0
! 112: Centre_Dialog $classlWin default
! 113: trace variable gClassl($num.changed) w updateClasslStatus
! 114: }
! 115:
! 116: ###########################################################
! 117: # closeClassl
! 118: ###########################################################
! 119: ###########################################################
! 120: ###########################################################
! 121: proc closeClassl { num { mustClose 0 } } {
! 122: global gWindowMenu gWindow gTitle gClassl gFile gClosed
! 123:
! 124: if { ![winfo exists $gClassl($num)] } { return }
! 125:
! 126: if { $gClosed($num) } { return }
! 127: if { $gClassl($num.changed) == 1 } {
! 128: if { [askToSave "Do you wish to save $gFile($num)?" "saveClassl $num" ] == "Cancel" && ( ! $mustClose ) } { return }
! 129: }
! 130:
! 131: if { ( ! $mustClose ) && ( [makeSure "Are you sure you wish to stop editing
! 132: $gFile($num)?"] == "Cancel" ) } {
! 133: return
! 134: }
! 135: set gClosed($num) 1
! 136: destroy [winfo toplevel $gClassl($num)]
! 137: removeWindowEntry "Classl $gFile($num)"
! 138: }
! 139:
! 140: ###########################################################
! 141: # saveClassl
! 142: ###########################################################
! 143: ###########################################################
! 144: ###########################################################
! 145: proc saveClassl { num {saveAs 0}} {
! 146: global gFile gClassl
! 147:
! 148: if { ![winfo exists $gClassl($num)] } { return }
! 149: if { $saveAs } {
! 150: set file [tk_getSaveFile -title "Enter name to Save As" \
! 151: -initialdir [file dirname "$gFile($num)"]]
! 152: if {$file == "" } { return }
! 153: set gFile($num) $file
! 154: }
! 155: set fileId [open "$gFile($num)" "w"]
! 156: foreach line [$gClassl($num) get 0 end] { puts $fileId $line }
! 157: close $fileId
! 158: set gClassl($num.changed) 0
! 159: }
! 160:
! 161: ###########################################################
! 162: # classlSectionChange
! 163: ###########################################################
! 164: ###########################################################
! 165: ###########################################################
! 166: proc classlSectionChange { num } {
! 167: global gFile gClassl gWindowMenu
! 168:
! 169: if { [set which [$gClassl($num) curselection]] == "" } {
! 170: displayMessage "Select a student first"
! 171: return
! 172: }
! 173: if { [winfo exists .classlsection$num] } {
! 174: capaRaise .classlsection$num
! 175: return
! 176: }
! 177: set sectionChange [toplevel .classlsection$num]
! 178: $gWindowMenu add command -label "Section Change" \
! 179: -command "capaRaise $sectionChange"
! 180: wm title $sectionChange [file dirname $sectionChange]
! 181:
! 182: set infoFrame [frame $sectionChange.info]
! 183: set entryFrame [frame $sectionChange.entry]
! 184: set buttonFrame [frame $sectionChange.button]
! 185: pack $infoFrame $entryFrame $buttonFrame -side top
! 186:
! 187: label $infoFrame.label -text "Enter New Section Number"
! 188: pack $infoFrame.label
! 189:
! 190: label $entryFrame.label -text "Section:"
! 191: entry $entryFrame.section -textvariable gClassl($num.section) -width 3 \
! 192: -validate key -validatecommand "limitEntry %W 3 number %P"
! 193: pack $entryFrame.label $entryFrame.section -side left
! 194:
! 195: set gClassl($num.done) 0
! 196: button $buttonFrame.change -text "Change" -command "set gClassl($num.done) 1"
! 197: button $buttonFrame.cancel -text "Cancel" -command "set gClassl($num.done) 0"
! 198: pack $buttonFrame.change $buttonFrame.cancel -side left
! 199:
! 200: Centre_Dialog $sectionChange default
! 201: update
! 202:
! 203: focus $sectionChange
! 204: capaGrab $sectionChange
! 205: vwait gClassl($num.done)
! 206: capaGrab release $sectionChange
! 207:
! 208: if { $gClassl($num.done) } {
! 209: set record [$gClassl($num) get $which]
! 210: set record "[string range $record 0 9][format %03d $gClassl($num.section)][string range $record 13 end]"
! 211: $gClassl($num) delete $which
! 212: $gClassl($num) insert $which $record
! 213: set gClassl($num.changed) 1
! 214: }
! 215:
! 216: destroy $sectionChange
! 217: }
! 218:
! 219: ###########################################################
! 220: # classlSort
! 221: ###########################################################
! 222: ###########################################################
! 223: ###########################################################
! 224: proc classlSort { num } {
! 225: global gFile gClassl gWindowMenu
! 226: if { [winfo exists .classlsort$num] } {
! 227: capaRaise .classlsort$num
! 228: return
! 229: }
! 230:
! 231: set sortClassl [toplevel .classlsort$num]
! 232: $gWindowMenu add command -label "Sort Classl" \
! 233: -command "capaRaise $sortClassl"
! 234: wm title $sortClassl [file dirname $sortClassl]
! 235:
! 236: set infoFrame [frame $sortClassl.info]
! 237: set buttonFrame [frame $sortClassl.button]
! 238: pack $infoFrame $buttonFrame -side top
! 239:
! 240: label $infoFrame.label -text "How would you like the classl sorted?"
! 241: pack $infoFrame.label
! 242:
! 243: set gClassl($num.done) 0
! 244: button $buttonFrame.section -text "Sort By Section" \
! 245: -command "set gClassl($num.done) Section"
! 246: button $buttonFrame.name -text "Sort By Name" \
! 247: -command "set gClassl($num.done) Name"
! 248: button $buttonFrame.cancel -text "Cancel" -command "set gClassl($num.done) 0"
! 249: pack $buttonFrame.section $buttonFrame.name $buttonFrame.cancel -side left
! 250:
! 251: Centre_Dialog $sortClassl default
! 252: update
! 253:
! 254: focus $sortClassl
! 255: capaGrab $sortClassl
! 256: vwait gClassl($num.done)
! 257: capaGrab release $sortClassl
! 258:
! 259: if { $gClassl($num.done) != 0 } {
! 260: sortClassl$gClassl($num.done) $num
! 261: set gClassl($num.changed) 1
! 262: }
! 263: destroy $sortClassl
! 264: }
! 265:
! 266: ###########################################################
! 267: # classlCompare
! 268: ###########################################################
! 269: ###########################################################
! 270: ###########################################################
! 271: proc classlCompare { field1 field2 val1 val2 } {
! 272: switch $field1 {
! 273: section {
! 274: set a [string range $val1 10 12]
! 275: set b [string range $val2 10 12]
! 276: }
! 277: name {
! 278: set a " [string range $val1 24 55]"
! 279: set b " [string range $val2 24 55]"
! 280: }
! 281: }
! 282: switch $field2 {
! 283: name {
! 284: append a " [string range $val1 24 55]"
! 285: append b " [string range $val2 24 55]"
! 286: }
! 287: default {}
! 288: }
! 289: return [string compare $a $b]
! 290: }
! 291:
! 292: ###########################################################
! 293: # sortClasslSection
! 294: ###########################################################
! 295: ###########################################################
! 296: ###########################################################
! 297: proc sortClasslSection { num } {
! 298: global gClassl
! 299: set allitems [$gClassl($num) get 0 end]
! 300: set newitems [lsort -command "classlCompare section name" $allitems]
! 301: $gClassl($num) delete 0 end
! 302: eval "$gClassl($num) insert end $newitems"
! 303: }
! 304:
! 305: ###########################################################
! 306: # sortClasslName
! 307: ###########################################################
! 308: ###########################################################
! 309: ###########################################################
! 310: proc sortClasslName { num } {
! 311: global gClassl
! 312: set allitems [$gClassl($num) get 0 end]
! 313: set newitems [lsort -command "classlCompare name {}" $allitems]
! 314: $gClassl($num) delete 0 end
! 315: eval "$gClassl($num) insert end $newitems"
! 316: }
! 317:
! 318: ###########################################################
! 319: # makeClasslEntryEditor
! 320: ###########################################################
! 321: ###########################################################
! 322: ###########################################################
! 323: proc makeClasslEntryEditor { num window title buttonname } {
! 324: global gClassl gWindowMenu
! 325:
! 326: if { [winfo exists $window] } {
! 327: capaRaise $window
! 328: return 1
! 329: }
! 330:
! 331: set add [toplevel $window]
! 332: $gWindowMenu add command -label "$title" -command "capaRaise $add"
! 333: wm title $add "$title"
! 334:
! 335: set infoFrame [frame $add.info]
! 336: set buttonFrame [frame $add.button]
! 337: pack $infoFrame $buttonFrame -side top -anchor w
! 338:
! 339: set classFrame [frame $infoFrame.class]
! 340: set sectionFrame [frame $infoFrame.section]
! 341: set stuFrame [frame $infoFrame.stu]
! 342: set nameFrame [frame $infoFrame.name]
! 343: set emailFrame [frame $infoFrame.email]
! 344: pack $classFrame $sectionFrame $stuFrame $nameFrame $emailFrame -side top -anchor w
! 345:
! 346: label $classFrame.label -text "Class Name" -width 20
! 347: entry $classFrame.entry -textvariable gClassl($num.editclass) -width 9 \
! 348: -validate key -validatecommand "limitEntry %W 9 any %P"
! 349: pack $classFrame.label $classFrame.entry -side left
! 350:
! 351: label $sectionFrame.label -text "Section" -width 20
! 352: entry $sectionFrame.entry -textvariable gClassl($num.editsection) -width 3 \
! 353: -validate key -validatecommand "limitEntry %W 3 number %P"
! 354: pack $sectionFrame.label $sectionFrame.entry -side left
! 355:
! 356: label $stuFrame.label -text "Student Number" -width 20
! 357: entry $stuFrame.entry -textvariable gClassl($num.editstu) -width 9 \
! 358: -validate key -validatecommand "limitEntry %W 9 any %P"
! 359: pack $stuFrame.label $stuFrame.entry -side left
! 360:
! 361: label $nameFrame.label -text "Name(Last, First MI)" -width 20
! 362: entry $nameFrame.entry -textvariable gClassl($num.editname) -width 30 \
! 363: -validate key -validatecommand "limitEntry %W 30 any %P"
! 364: pack $nameFrame.label $nameFrame.entry -side left
! 365:
! 366: label $emailFrame.label -text "Email" -width 20
! 367: entry $emailFrame.entry -textvariable gClassl($num.editemail) -width 40 \
! 368: -validate key -validatecommand "limitEntry %W 40 any %P"
! 369: pack $emailFrame.label $emailFrame.entry -side left
! 370:
! 371: button $buttonFrame.add -text $buttonname -command "set gClassl($num.done) 1"
! 372: button $buttonFrame.cancel -text Cancel -command "set gClassl($num.done) 0"
! 373: pack $buttonFrame.add $buttonFrame.cancel -side left
! 374:
! 375: bind $add <Return> "set gClassl($num.done) 1"
! 376:
! 377: Centre_Dialog $add default
! 378: update
! 379:
! 380: focus $add
! 381: capaGrab $add
! 382: return 0
! 383: }
! 384:
! 385: ###########################################################
! 386: # classlDelete
! 387: ###########################################################
! 388: ###########################################################
! 389: ###########################################################
! 390: proc classlDelete { num } {
! 391: global gClassl gWindowMenu
! 392:
! 393: if { [set which [$gClassl($num) curselection]] == "" } {
! 394: displayMessage "Select a student first"
! 395: return
! 396: }
! 397: $gClassl($num) delete $which
! 398: set gClassl($num.changed) 1
! 399: }
! 400:
! 401: ###########################################################
! 402: # classlEdit
! 403: ###########################################################
! 404: ###########################################################
! 405: ###########################################################
! 406: proc classlEdit { num } {
! 407: global gClassl gWindowMenu
! 408:
! 409: if { [set which [$gClassl($num) curselection]] == "" } {
! 410: displayMessage "Select a student first"
! 411: return
! 412: }
! 413: set record [$gClassl($num) get $which]
! 414:
! 415: set gClassl($num.editclass) [string trimright [string range $record 0 8]]
! 416: set gClassl($num.editsection) [string trimright [string range $record 10 12]]
! 417: set gClassl($num.editstu) [string trimright [string range $record 14 22]]
! 418: set gClassl($num.editname) [string trimright [string range $record 24 53]]
! 419: set gClassl($num.editemail) [string trimright [string range $record 60 99]]
! 420:
! 421: if { [makeClasslEntryEditor $num ".classledit$num" "Editing Student" "Done"] } { return }
! 422:
! 423: vwait gClassl($num.done)
! 424: capaGrab release .classledit$num
! 425: destroy .classledit$num
! 426: if { $gClassl($num.done) } {
! 427: set gClassl($num.editsection) [string trimleft $gClassl($num.editsection) "0"]
! 428: set record [format "%-9s %03d %-9s %-30s %-40s" $gClassl($num.editclass) \
! 429: $gClassl($num.editsection) $gClassl($num.editstu) \
! 430: $gClassl($num.editname) $gClassl($num.editemail)]
! 431: $gClassl($num) delete $which
! 432: $gClassl($num) insert $which $record
! 433: set gClassl($num.changed) 1
! 434: }
! 435: }
! 436:
! 437: ###########################################################
! 438: # findStuNumClassl
! 439: ###########################################################
! 440: ###########################################################
! 441: ###########################################################
! 442: proc findStuNumClassl { num newstunum } {
! 443: global gClassl
! 444:
! 445: set max [$gClassl($num) index end]
! 446: for {set i 0} {$i < $max} {incr i} {
! 447: set teststunum [string range [$gClassl($num) get $i] 14 22]
! 448: if { [regexp -nocase $newstunum $teststunum] } { return $i }
! 449: }
! 450: return -1
! 451: }
! 452:
! 453: ###########################################################
! 454: # classlAdd
! 455: ###########################################################
! 456: ###########################################################
! 457: ###########################################################
! 458: proc classlAdd { num } {
! 459: global gClassl gWindowMenu
! 460:
! 461: set gClassl($num.editclass) ""
! 462: set gClassl($num.editsection) ""
! 463: set gClassl($num.editstu) ""
! 464: set gClassl($num.editname) ""
! 465: set gClassl($num.editemail) ""
! 466:
! 467: if { [makeClasslEntryEditor $num ".classladd$num" "Adding a Student" "Add"] } {
! 468: return
! 469: }
! 470: vwait gClassl($num.done)
! 471: capaGrab release .classladd$num
! 472: destroy .classladd$num
! 473:
! 474: if { $gClassl($num.done) } {
! 475: if { [set which [findStuNumClassl $num $gClassl($num.editstu)]] > -1 } {
! 476: if { "Cancel" == [makeSure "Found a duplicate student \n [$gClassl($num) get $which] \n Replace this one?"] } {
! 477: set gClassl($num.done) 0
! 478: displayMessage "Student was not added."
! 479: } else {
! 480: $gClassl($num) delete $which
! 481: }
! 482: }
! 483: }
! 484: if { $gClassl($num.done) } {
! 485: set gClassl($num.editsection) [string trimleft $gClassl($num.editsection) "0"]
! 486: set a [format "%-9s %03d %-9s %-30s %-40s" $gClassl($num.editclass) \
! 487: $gClassl($num.editsection) $gClassl($num.editstu) \
! 488: $gClassl($num.editname) $gClassl($num.editemail)]
! 489: $gClassl($num) insert 0 $a
! 490: set gClassl($num.changed) 1
! 491: }
! 492: }
! 493:
! 494: ###########################################################
! 495: # classlPrint
! 496: ###########################################################
! 497: ###########################################################
! 498: ###########################################################
! 499: proc classlPrint { num } {
! 500: global gClassl gWindowMenu gFile
! 501:
! 502: if { [set which [$gClassl($num) curselection]] == "" } {
! 503: displayMessage "Select a student first"
! 504: return
! 505: }
! 506: if { $gClassl($num.changed) == 1 } {
! 507: if {[askToSave "Do you wish to save $gFile($num)?" "saveClassl $num"]=="Yes"} {
! 508: saveClassl $num
! 509: }
! 510: }
! 511: set record [$gClassl($num) get $which]
! 512: set stunum [string range $record 14 22]
! 513:
! 514: if { [winfo exists .capaprint$num] } {
! 515: capaRaise .capaprint$num
! 516: return 1
! 517: }
! 518:
! 519: set print [toplevel .capaprint$num]
! 520: $gWindowMenu add command -label "Printing a Student" -command "capaRaise $print"
! 521: wm title $print "Printing a Student"
! 522:
! 523: set infoFrame [frame $print.info]
! 524: set dataFrame [frame $print.data]
! 525: set buttonFrame [frame $print.button]
! 526: pack $infoFrame $dataFrame $buttonFrame -side top -anchor w
! 527:
! 528: label $infoFrame.label -text "Print For Student $stunum"
! 529: pack $infoFrame.label
! 530:
! 531: set setFrame [frame $dataFrame.set]
! 532: set printerFrame [frame $dataFrame.printer]
! 533: pack $setFrame $printerFrame -side top -anchor w
! 534:
! 535: label $setFrame.label -text "Set" -width 13
! 536: entry $setFrame.set -textvariable gClassl($num.printset) -width 2 \
! 537: -validate key -validatecommand "limitEntry %W 9 any %P"
! 538: pack $setFrame.label $setFrame.set -side left
! 539:
! 540: label $printerFrame.label -text "Printer Name" -width 13
! 541: entry $printerFrame.printer -textvariable gClassl($num.printername) -width 20
! 542: pack $printerFrame.label $printerFrame.printer -side left
! 543:
! 544: button $buttonFrame.print -text "Print" -command "set gClassl($num.done) 1"
! 545: button $buttonFrame.cancel -text "Cancel" -command "set gClassl($num.done) 0"
! 546: pack $buttonFrame.print $buttonFrame.cancel -side left
! 547:
! 548: bind $print <Return> "set gClassl($num.done) 1"
! 549:
! 550: Centre_Dialog $print default
! 551: update
! 552:
! 553: focus $print
! 554: capaGrab $print
! 555: vwait gClassl($num.done)
! 556: capaGrab release $print
! 557:
! 558: if { $gClassl($num.done) } {
! 559: global gCapaConfig
! 560: parseCapaConfig $num [file dirname $gFile($num)]
! 561: if {[catch {printStudent $num $stunum $gClassl($num.printset) $gClassl($num.printername)} error ]} {
! 562: displayError "Unable to print $stunum"
! 563: }
! 564: foreach name [array names gCapaConfig "$num.*"] {
! 565: unset gCapaConfig($name)
! 566: }
! 567: }
! 568: destroy $print
! 569: }
! 570:
! 571: ###########################################################
! 572: # printStudent
! 573: ###########################################################
! 574: ###########################################################
! 575: ###########################################################
! 576: proc printStudent { num stunum printset printername } {
! 577: global gCapaConfig gFile
! 578: set command "$gCapaConfig($num.qzparse_command) -c [file dirname $gFile($num)] \
! 579: -set $printset -stu $stunum"
! 580: eval "exec $command"
! 581: set tex_file [file join [file dirname $gFile($num)] TeX $stunum.tex]
! 582: set command "$gCapaConfig($num.latex_command) $tex_file"
! 583: removeStatus $num
! 584: #if { "Yes" != [makeSure "Planning on running LaTeX, Continue?"] } { return }
! 585: displayStatus "Running LaTeX" message $num
! 586: set directory [pwd]
! 587: cd [file join [file dirname $gFile($num)] TeX]
! 588: eval "exec $command"
! 589: cd $directory
! 590: set dvi_file [file join [file dirname $gFile($num)] TeX $stunum.dvi]
! 591: set ps_file [file join [file dirname $gFile($num)] TeX $stunum.ps]
! 592: set command "$gCapaConfig($num.dvips_command) $dvi_file -o $ps_file >& /dev/null"
! 593: removeStatus $num
! 594: #if { "Yes" != [makeSure "Planning on running dvips, Continue?"] } { return }
! 595: displayStatus "Running dvips" message $num
! 596: eval "exec $command"
! 597: removeStatus $num
! 598: #if { "Cancel" == [set lprcmd [getLprCommand $ps_file $num]] } { return }
! 599: if { [catch { eval "exec lpr -P$printername $ps_file" } errors ] } {
! 600: displayError "An error occurred while printing: $errors"
! 601: }
! 602: }
! 603:
! 604: ###########################################################
! 605: # updateClasslStatus
! 606: ###########################################################
! 607: ###########################################################
! 608: ###########################################################
! 609: proc updateClasslStatus { name1 name2 op } {
! 610: global gClassl gWindowMenu
! 611:
! 612: set num [lindex [split $name2 .] 0]
! 613: if { $gClassl($num.changed) != $gClassl($num.changedlast)} {
! 614: set gClassl($num.changedlast) $gClassl($num.changed)
! 615: global gFile
! 616: if { ![winfo exists $gClassl($num)] } { return }
! 617: if { $gClassl($num.changed) } {
! 618: catch {removeWindowEntry "Classl $gFile($num)*"}
! 619: wm title [winfo toplevel $gClassl($num)] "Classl $gFile($num) (Modified)"
! 620: $gWindowMenu add command -label "Classl $gFile($num) (Modified)" -command \
! 621: "capaRaise $gClassl($num)"
! 622: } else {
! 623: catch {removeWindowEntry "Classl $gFile($num)*"}
! 624: wm title [winfo toplevel $gClassl($num)] "Classl $gFile($num)"
! 625: $gWindowMenu add command -label "Classl $gFile($num)" -command \
! 626: "capaRaise $gClassl($num)"
! 627: }
! 628: }
! 629: }
! 630:
! 631: ###########################################################
! 632: # classlCopy
! 633: ###########################################################
! 634: ###########################################################
! 635: ###########################################################
! 636: proc classlCopy { num field } {
! 637: global gClassl
! 638:
! 639: if { ![winfo exists $gClassl($num)] } { return }
! 640: if { [set which [$gClassl($num) curselection]] == "" } {
! 641: displayMessage "Select a student first"
! 642: return
! 643: }
! 644: set entry [$gClassl($num) get $which]
! 645: set text ""
! 646: switch $field {
! 647: stunum { set text [string trimright [string range $entry 14 22]] }
! 648: name { set text [string trimright [string range $entry 24 53]] }
! 649: email { set text [string trimright [string range $entry 60 99]] }
! 650: }
! 651: if { $text != "" } {
! 652: set gClassl($num.selection) $text
! 653: selection own $gClassl($num)
! 654: selection handle $gClassl($num) "classlPaste $num"
! 655: selection handle -selection CLIPBOARD $gClassl($num) "classlPaste $num"
! 656: clipboard clear -displayof $gClassl($num)
! 657: clipboard append -displayof $gClassl($num) -- $text
! 658: }
! 659: }
! 660:
! 661: ###########################################################
! 662: # classlPaste
! 663: ###########################################################
! 664: ###########################################################
! 665: ###########################################################
! 666: proc classlPaste { num start length } {
! 667: global gClassl
! 668: return [string range $gClassl($num.selection) $start [expr $start + $length]]
! 669: }
! 670:
! 671: ###########################################################
! 672: # classlFind
! 673: ###########################################################
! 674: ###########################################################
! 675: ###########################################################
! 676: proc classlFind { num } {
! 677: global gClassl gWindowMenu
! 678:
! 679: if { [winfo exists .classlfind$num] } {
! 680: capaRaise .classlfind$num
! 681: return
! 682: }
! 683: set classlFind [toplevel .classlfind$num]
! 684: $gWindowMenu add command -label "Find in Classl" \
! 685: -command "capaRaise $classlFind"
! 686: wm title $classlFind "Find"
! 687:
! 688: set infoFrame [frame $classlFind.info]
! 689: set entryFrame [frame $classlFind.entry]
! 690: set buttonFrame [frame $classlFind.button]
! 691: pack $infoFrame $entryFrame $buttonFrame -side top -anchor w
! 692:
! 693: set nameFrame [frame $entryFrame.name]
! 694: set stunumFrame [frame $entryFrame.stunum]
! 695: set emailFrame [frame $entryFrame.email]
! 696: pack $nameFrame $stunumFrame $emailFrame -side top -anchor w
! 697:
! 698: label $nameFrame.label -text "Name" -width 14 -anchor w
! 699: entry $nameFrame.name -textvariable gClassl($num.findname) -width 30 \
! 700: -validate key -validatecommand "limitEntry %W 30 any %P"
! 701: frame $nameFrame.spacer -width 80
! 702: button $nameFrame.go -text "Find" -command "classlDoFind $num name"
! 703: pack $nameFrame.label $nameFrame.name $nameFrame.spacer $nameFrame.go \
! 704: -side left -anchor w
! 705:
! 706: label $stunumFrame.label -text "Student Number" -width 14 -anchor w
! 707: entry $stunumFrame.stunum -textvariable gClassl($num.findstunum) -width 9 \
! 708: -validate key -validatecommand "limitEntry %W 9 any %P"
! 709: frame $stunumFrame.spacer -width 248
! 710: button $stunumFrame.go -text "Find" -command "classlDoFind $num stunum"
! 711: pack $stunumFrame.label $stunumFrame.stunum $stunumFrame.spacer \
! 712: $stunumFrame.go -side left -anchor w
! 713:
! 714: label $emailFrame.label -text "Email" -width 14 -anchor w
! 715: entry $emailFrame.email -textvariable gClassl($num.findemail) -width 40 \
! 716: -validate key -validatecommand "limitEntry %W 40 any %P"
! 717: button $emailFrame.go -text "Find" -command "classlDoFind $num email"
! 718: pack $emailFrame.label $emailFrame.email $emailFrame.go -side left -anchor w
! 719:
! 720: button $buttonFrame.close -text "Close" -command "destroy $classlFind"
! 721: pack $buttonFrame.close
! 722:
! 723: Centre_Dialog $classlFind default
! 724: }
! 725:
! 726: ###########################################################
! 727: # classlDoFind
! 728: ###########################################################
! 729: ###########################################################
! 730: ###########################################################
! 731: proc classlDoFind { num type } {
! 732: global gClassl
! 733:
! 734: if {![winfo exists $gClassl($num)]} {return}
! 735: if { [set which [$gClassl($num) curselection]] == "" } {
! 736: set which 0
! 737: } else {
! 738: incr which
! 739: }
! 740: set max [$gClassl($num) index end]
! 741: for {set i 0} { $i < ($max-1)} {incr i} {
! 742: set current [expr ($i+$which)%$max]
! 743: puts -nonewline "$current:"
! 744: set entry [$gClassl($num) get $current]
! 745: switch $type {
! 746: name { set tmp [string range [$gClassl($num) get $current] 24 53] }
! 747: stunum { set tmp [string range [$gClassl($num) get $current] 14 22] }
! 748: email { set tmp [string range [$gClassl($num) get $current] 60 99] }
! 749: }
! 750: if { [regexp -nocase $gClassl($num.find$type) $tmp] } {
! 751: $gClassl($num) selection clear 0 end
! 752: $gClassl($num) selection set $current
! 753: $gClassl($num) see $current
! 754: puts " "
! 755: return
! 756: }
! 757: }
! 758: displayMessage "Not Found"
! 759: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>