--- capa/capa51/GUITools/classl.tcl 1999/09/28 21:25:36 1.1.1.1 +++ capa/capa51/GUITools/classl.tcl 2000/07/07 18:25:12 1.4 @@ -1,3 +1,26 @@ +# classl editor +# Copyright (C) 1992-2000 Michigan State University +# +# The CAPA system is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# The CAPA system is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with the CAPA system; see the file COPYING. If not, +# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# As a special exception, you have permission to link this program +# with the TtH/TtM library and distribute executables, as long as you +# follow the requirements of the GNU GPL in regard to all of the +# software in the executable aside from TtH/TtM. + ########################################################### # createClasslEditor ########################################################### @@ -67,13 +90,16 @@ proc createClasslEditor { classlFile } { #action button $actionFrame.add -text "Add" -command "classlAdd $num" button $actionFrame.edit -text "Edit" -command "classlEdit $num" + button $actionFrame.save -text "Save" -command "saveClassl $num 1" button $actionFrame.delete -text "Delete" -command "classlDelete $num" button $actionFrame.section -text "Change Section" -command "classlSectionChange $num" button $actionFrame.sort -text "Sort" -command "classlSort $num" button $actionFrame.print -text "Print" -command "classlPrint $num" button $actionFrame.find -text "Find" -command "classlFind $num" - pack $actionFrame.add $actionFrame.edit $actionFrame.delete $actionFrame.section \ - $actionFrame.sort $actionFrame.print $actionFrame.find -side left + button $actionFrame.merge -text "Merge" -command "classlMerge $num" + pack $actionFrame.add $actionFrame.edit $actionFrame.save $actionFrame.delete \ + $actionFrame.section $actionFrame.sort $actionFrame.print $actionFrame.find \ + $actionFrame.merge -side left #window set leftFrame [frame $windowFrame.left] @@ -738,9 +764,8 @@ proc classlDoFind { num type } { incr which } set max [$gClassl($num) index end] - for {set i 0} { $i < ($max-1)} {incr i} { + for {set i 0} { $i < ($max)} {incr i} { set current [expr ($i+$which)%$max] - puts -nonewline "$current:" set entry [$gClassl($num) get $current] switch $type { name { set tmp [string range [$gClassl($num) get $current] 24 53] } @@ -751,9 +776,52 @@ proc classlDoFind { num type } { $gClassl($num) selection clear 0 end $gClassl($num) selection set $current $gClassl($num) see $current - puts " " return } } displayMessage "Not Found" -} \ No newline at end of file +} + +########################################################### +# classlMerge +########################################################### +########################################################### +########################################################### +proc classlMerge { num } { + global gClassl + + set filename [tk_getOpenFile -title "Select a File to merge in"] + + if { $filename == "" } { return } + set fileId [open $filename "r"] + set maxlines [lindex [exec wc -l $filename] 0] + set linenum 0 + set newentries 0 + displayStatus "Merging $filename" both $num + set aline [gets $fileId] + while {![eof $fileId]} { + incr linenum + set found 0 + set stunum [string range $aline 14 22] + set max [$gClassl($num) index end] + for {set i 0} { $i < ($max)} {incr i} { + set tmp [string range [$gClassl($num) get $i] 14 22] + if { [regexp -nocase $stunum $tmp] } { + set found 1 + break + } + } + if { !$found } { + incr newentries + $gClassl($num) insert end $aline + } + updateStatusBar [expr $linenum/double($maxlines)] $num + set aline [gets $fileId] + } + removeStatus $num + if { $newentries != 0 } { + $gClassl($num) see $max + $gClassl($num) selection set $max + } + displayMessage "Added $newentries students." +}