--- capa/capa51/GUITools/quizzer.tcl 1999/10/20 19:57:37 1.4 +++ capa/capa51/GUITools/quizzer.tcl 2000/01/12 21:00:25 1.12 @@ -948,7 +948,7 @@ proc createDateDialog { toplevel makedef checkbutton $optionsFrame2.response -variable gDates(inhibitresponse) \ -text "Inhibit Correct/Incorrect response \n(normally only for exams/quizzes)" pack $durationFrame $optionsFrame2.view $optionsFrame2.response -side top - set gDates(viewbetween) 1 + set gDates(viewbetween) 0 set gDates(inhibitresponse) 0 label $durationFrame.label -text "Duration" @@ -1580,7 +1580,7 @@ proc replaceAll {} { set gCreateImportLinks 1 getFindWindow refNum if { $refNum >= 0 } { registerCreateImportLinks $refNum 0.0 end } - displayMessage "Replaced $num occurance$s" + displayMessage "Replaced $num occurrence$s" } ########################################################### @@ -2228,11 +2228,32 @@ proc createPreviewWindow {} { } ########################################################### +# openError +########################################################### +########################################################### +########################################################### +proc openError { file line type} { + global gRefLine gLineNumberGoto gTextWindow + if { $type == 2 } { + set gLineNumberGoto $line + gotoLine + capaRaise [winfo toplevel $gTextWindow] + } else { + if {[set num [openReferenceFile $file]]} { + update idletasks + set gRefLine($num) $line + gotoRefLine $num + } + } +} + +########################################################### +# showParseErrors ########################################################### ########################################################### ########################################################### proc showParseErrors {} { - global gParseErrorsText gWindowMenu + global gParseErrorsText gWindowMenu gUniqueNumber gCapaConfig set parseErrors [getParseErrors] @@ -2282,8 +2303,29 @@ proc showParseErrors {} { $gParseErrorsText delete 0.0 end capaRaise .parseErrors } - - $gParseErrorsText insert end $parseErrors + foreach line [split $parseErrors "\n"] { + set tag 0 + if { [regexp -indices {File:.+->(.+), Line ([0-9]+): ERROR:} $line result file linenum]} { + set tag 1 + } else { + if { [regexp -indices {File:(.+), Line ([0-9]+): ERROR:} $line result file linenum]} { + set tag 2 + } + } + if { $tag } { + set tagnum [incr gUniqueNumber] + set linenum [eval [list string range $line] $linenum] + set filename [eval [list string range $line] $file] + set i [expr [lindex [split [$gParseErrorsText index end] .] 0] - 1] + } + $gParseErrorsText insert end "$line\n" + if { $tag } { + $gParseErrorsText tag add error.$tagnum $i.[lindex $file 0] $i.[expr [lindex $file 1] + 1] + $gParseErrorsText tag configure error.$tagnum -foreground $gCapaConfig(IMP_color) + $gParseErrorsText tag bind error.$tagnum \ + "eval openError $filename $linenum $tag" + } + } } else { if { [winfo exists .parseErrors] } { $gParseErrorsText delete 0.0 end } } @@ -2420,6 +2462,7 @@ proc rereadCapaConfig { } { displayError "Invalid capa.config file" set gCapaConfig(printer_option) $printer_option } + setDefaultValues updateColors } @@ -2438,16 +2481,24 @@ proc pickCapaConfig { } { cd [file dirname $file] set error [parseCapaConfig] if { $error != "OK" } { displayError "Invalid capa.config file"; cd $oldDir } + setDefaultValues } } +proc setDefaultValues {} { + global gProbVal gTryVal gHintVal gCapaConfig + catch {set gProbVal $gCapaConfig(default_prob_val)} + catch {set gTryVal $gCapaConfig(default_try_val)} + catch {set gHintVal $gCapaConfig(default_hint_val)} +} + ########################################################### # openDocument ########################################################### ########################################################### ########################################################### proc openDocument {} { - global gFile gTextWindow gSetNumberText gPrefs gChanged gQuizTemp gUndo + global gFile gTextWindow gSetNumberText gPrefs gChanged gQuizTemp gUndo if { $gChanged } { if { [askToSave 0 0] == "Cancel" } { return } } if { ![catch {set gTextWindow}] } { @@ -2517,7 +2568,8 @@ proc openDocument {} { set gQuizTemp true return } - + setDefaultValues + createEditingWindow 0 $gTextWindow delete 0.0 end $gTextWindow insert 0.0 [read $fileId [file size $gFile]] @@ -2703,7 +2755,7 @@ proc isReferenceFileOpen { file } { set entryfile [lindex $entry 1] } # puts $entryfile - if { [catch {file stat $entryfile a1}] } { puts skipped;continue } + if { [catch {file stat $entryfile a1}] } { continue } file stat $file a2 # puts "$a2(ino) == $a1(ino)" if { $a2(ino) == $a1(ino) } { @@ -2760,18 +2812,19 @@ proc openReferenceFile { {file ""} {new -title "Select the proper file" \ -initialdir "$gDir(reference)" ] event generate .main - if { $file == "" } { return } + if { $file == "" } { return 0 } set gDir(reference) [file dirname $file] if { [file isdirectory $file] } { displayError "You attempted to open $file which is a directory not a file." - return + return 0 } } else { if { !$new } { if { [set window [isReferenceFileOpen $file] ] != "" } { + set num [lindex [split [lindex [split $window .] 1] e] end] capaRaise $window - return + return $num } # specifically opening the capa.config file if { $file == "capa.config" } { @@ -2782,18 +2835,18 @@ proc openReferenceFile { {file ""} {new { {All Files} {"*"} } } \ -title "Select the proper file" \ -initialdir "$gDir(reference)" ] - if { $file == "" } { return } + if { $file == "" } { return 0 } } else { set file [file join [file dirname $gFile] capa.config] } } else { if { ![file isfile $file] && ![file readable $file] } { displayError "Unable to find $file" - return + return 0 } if { [file isdirectory $file] } { displayError "You attempted to open $file which is a directory not a file." - return + return 0 } } } @@ -2911,6 +2964,7 @@ proc openReferenceFile { {file ""} {new set gRefChanged($num) 0 set gRefClosed($num) 0 addFindList $num + return $num } ########################################################### @@ -2951,11 +3005,15 @@ proc trackChanges { procName num } { set chars \[ .$procName get \$insertindex \$insertindex2 \] } set gUndo($num.\$numChange) \"insert \$insertindex \[list \$chars\] \" - if {\[regexp \{.*\[\"/\].*\} \$chars\] || \ - \[regexp \{.*\[\"/\].*\} \[.$procName get \"\$insertindex linestart\" \"\$insertindex2 lineend\"\]\]} { - registerCreateImportLinks $num \$insertindex \$insertindex2 + if { \[string length \$chars\] > 100 } { + registerCreateImportLinks $num \$insertindex-1line \$insertindex2+1line + } else { + if {\[regexp \{.*\[\"/\].*\} \$chars\] || \ + \[regexp \{.*\[\"/\].*\} \[.$procName get \"\$insertindex linestart\" \"\$insertindex2 lineend\"\]\]} { + registerCreateImportLinks $num \$insertindex \$insertindex2 + } } - } + } set result \[uplevel .$procName \$args\] updateLocation $num return \$result @@ -2967,7 +3025,7 @@ proc trackChanges { procName num } { ########################################################### ########################################################### proc undo { num } { - global gUndo gRefText gTextWindow + global gUndo gRefText gTextWindow gChanged gRefChanged if { $gUndo($num.cur) == 0 } { return } set undoInfo $gUndo($num.$gUndo($num.cur)) if { [regexp {.*[\"/].*} $undoInfo] } { @@ -2978,8 +3036,10 @@ proc undo { num } { } if { $num == 0 } { if {[catch {eval ".$gTextWindow $gUndo($num.$gUndo($num.cur))"}]} { return } + set gChanged 1 } else { if {[catch {eval ".$gRefText($num) $gUndo($num.$gUndo($num.cur))"}]} { return } + set gRefChanged($num) 1 } incr gUndo($num.cur) -1 } @@ -3729,7 +3789,10 @@ proc createCreateDviWin {} { # sends the file quiztemp.ps to the printer through lpr using # the option foud in gLprCommand ########################################################### -# Arguments: none +# Arguments: lprCommand - actual command to be run to print +# showCompletionMessage - (defaults to 1 true) +# controls whether the print complete +# message gets shown # Returns: Nothing # Globals: gCapaConfig - # gStopPrinting - @@ -3743,7 +3806,7 @@ proc printBody { lprCommand { showComple -o quiztemp.ps >& /dev/null} errorMsg ] if { $error } { displayError \ - "When attempting to run dvips an error occured : $errorMsg" + "When attempting to run dvips an error occurred : $errorMsg" return 1 } @@ -3758,7 +3821,7 @@ proc printBody { lprCommand { showComple set error [catch {set returnMessage [eval "exec $lprCommand"] } errorMsg ] if { $error == 1 } { - displayError "When attempting to print an error occured : $errorMsg" + displayError "When attempting to print an error occurred : $errorMsg" return 1 } else { if { $showCompletionMessage } { @@ -4014,12 +4077,14 @@ proc printSection { { lprCommand "" } } default { set type "-T" } } + set prSection [string trimleft $gPrintSelection(section) 0] + if { [set gStopPrinting [expr 2 == [runLatex \ "echo [pwd] | $gCapaConfig(qzparse_command) \ - -sec $gPrintSelection(section) -set $set \ + -sec $prSection -set $set \ -d [pwd] -c [pwd] $type " gCreateDviText] ] ] } { for {set i $start} { $i <= $end} { incr i } { - exec rm -f section$gPrintSelection(section)-set$i.tex + exec rm -f section$prSection-set$i.tex } if {$showStopping} { displayMessage "Printing has been stopped." @@ -4036,7 +4101,7 @@ proc printSection { { lprCommand "" } } } for { set i $start} { $i <= $end } { incr i } { - if { ! [file exists section$gPrintSelection(section)-set$i.tex] } { + if { ! [file exists section$prSection-set$i.tex] } { if {$showStopping} { displayError "The qzparse command: $gCapaConfig(qzparse_command), was unable to produce the expected output. Printing stopped" set gStopPrinting 0 @@ -4045,7 +4110,7 @@ proc printSection { { lprCommand "" } } return 2 } - exec mv section$gPrintSelection(section)-set$i.tex quiztemp.tex + exec mv section$prSection-set$i.tex quiztemp.tex exec /bin/rm -f quiztemp.dvi $gCreateDviText insert end "$gCapaConfig(latex_command)\n" @@ -4325,7 +4390,7 @@ proc analyzeClass { {start 1} } { set name [lindex $gAnalyze(toprocess) 1] set section [lindex $gAnalyze(toprocess) 2] set gAnalyze(toprocess) [lrange $gAnalyze(toprocess) 3 end] - set command "$gCapaConfig(answers_command) $number \"$name\" $section $gAnalyze(set)" + set command "$gCapaConfig(answers_command) $number \"$name\" 0 $gAnalyze(set)" set fileId [open "|$command" "r"] set gAnalyze(pid) [pid $fileId] fconfigure $fileId -blocking 0 @@ -4606,7 +4671,7 @@ proc analyzeStop {} { global gAnalyze set gAnalyze(stop) 1 set gAnalyze(status) "Stopped" - exec kill -SIGKILL $gAnalyze(pid) + catch {exec kill -SIGKILL $gAnalyze(pid)} } ###########################################################