Annotation of capa/capa51/GUITools/ideas/of5tool/multiplechoice.tcl, revision 1.1

1.1     ! albertel    1: proc MCinit {} {
        !             2:     global problem
        !             3: 
        !             4:     set problem(MCeditleaf) 0
        !             5: }
        !             6: 
        !             7: proc MCadd {} {
        !             8:     global problem MCchoiceList
        !             9:     
        !            10:     set addMultiple [toplevel .mcaddMultiple]
        !            11:     
        !            12:     if { $problem(editing) == 0 } {
        !            13: 	set probnum $problem(num)
        !            14: 	set problem(prob.$problem(num).numleaf) 0
        !            15: 	set problem(prob.$problem(num).type) "Multiple Choice"
        !            16: 	set problem(prob.$problem(num).val) 1
        !            17:     } else {
        !            18: 	set probnum $problem(editing)
        !            19:     }
        !            20: 
        !            21:     set labelFrame [frame $addMultiple.labelFrame ]
        !            22:     set probValFrame [frame $addMultiple.probValFrame ]
        !            23:     set hintFrame [frame $addMultiple.hintFrame ]
        !            24:     set explFrame [frame $addMultiple.explFrame ]
        !            25:     set questFrame [frame $addMultiple.questFrame ]
        !            26:     set listFrame [frame $addMultiple.listFrame ]
        !            27:     set buttonFrame [frame $addMultiple.buttonFrame]
        !            28:     pack $labelFrame $probValFrame $questFrame $hintFrame $explFrame \
        !            29: 	$listFrame $buttonFrame -side top
        !            30:     pack config $probValFrame -anchor w
        !            31: 
        !            32:     label $labelFrame.probLabel -text "Problem $probnum"
        !            33:     pack $labelFrame.probLabel
        !            34: 
        !            35:     label $probValFrame.label -text "Problem Value\n"
        !            36:     scale $probValFrame.value -variable problem(prob.$probnum.val) -from 1 -to 9 -orient h
        !            37:     pack $probValFrame.label $probValFrame.value -side left
        !            38: 
        !            39:     label $questFrame.label -text "Question:"
        !            40:     entry $questFrame.entry -textvariable problem(prob.$probnum.quest) \
        !            41: 	-width 80 -xscrollcommand "$questFrame.scroll set"
        !            42:     scrollbar $questFrame.scroll -command "$questFrame.entry xview" \
        !            43: 	-orient h
        !            44:     pack $questFrame.label $questFrame.entry $questFrame.scroll -side top
        !            45:     pack configure $questFrame.label -anchor w
        !            46:     pack configure $questFrame.scroll -fill x
        !            47: 
        !            48:     label $hintFrame.label -text "Hint:"
        !            49:     entry $hintFrame.entry -textvariable problem(prob.$probnum.hint) \
        !            50: 	-width 80 -xscrollcommand "$hintFrame.scroll set"
        !            51:     scrollbar $hintFrame.scroll -command "$hintFrame.entry xview" \
        !            52: 	-orient h
        !            53:     pack $hintFrame.label $hintFrame.entry $hintFrame.scroll -side top
        !            54:     pack configure $hintFrame.label -anchor w
        !            55:     pack configure $hintFrame.scroll -fill x
        !            56: 
        !            57:     label $explFrame.label -text "Explanation:"
        !            58:     entry $explFrame.entry -textvariable problem(prob.$probnum.expl) \
        !            59: 	-width 80 -xscrollcommand "$explFrame.scroll set"
        !            60:     scrollbar $explFrame.scroll -command "$explFrame.entry xview" \
        !            61: 	-orient h
        !            62:     pack $explFrame.label $explFrame.entry $explFrame.scroll -side top
        !            63:     pack configure $explFrame.label -anchor w
        !            64:     pack configure $explFrame.scroll -fill x
        !            65: 
        !            66:     set MCchoiceList [ listbox $listFrame.list \
        !            67: 			 -yscrollcommand "$listFrame.scroll set" \
        !            68: 			 -width 80 -height 10 ]
        !            69:     scrollbar $listFrame.scroll -command "$listFrame.list yview" \
        !            70: 	-orient v
        !            71:     pack $listFrame.list $listFrame.scroll -side left
        !            72:     pack configure $listFrame.scroll -fill y
        !            73: 
        !            74:     button $buttonFrame.leaf -text "Add leaf" -command MCaddLeaf
        !            75:     button $buttonFrame.edit -text "Edit leaf" -command MCeditLeafOptions
        !            76:     button $buttonFrame.done -text "Done" -command "
        !            77:         if { [ MCcheckIfDone $probnum ] } {
        !            78: 	   destroy $addMultiple
        !            79: 	   set problem(adding) 0
        !            80:            set problem(editing) 0
        !            81:            set problem(editleaf) 0
        !            82:            updateProblemList $probnum
        !            83:         } else {
        !            84:            tk_messageBox -icon error \
        !            85:                -message "At least one leaf needs all options to be correct."
        !            86:                -type ok
        !            87:         }
        !            88:     "
        !            89:     button $buttonFrame.cancel -text "Cancel" -command "
        !            90: 	destroy $addMultiple
        !            91: 	incr problem(num) -1
        !            92: 	#(FIXME) unset possible set vars dealing with this problem
        !            93:     "
        !            94:     pack $buttonFrame.done $buttonFrame.leaf $buttonFrame.edit \
        !            95: 	$buttonFrame.cancel -side left
        !            96: }
        !            97: 
        !            98: proc MCaddLeaf {} {
        !            99:     global problem
        !           100: 
        !           101:     if { $problem(editing) == 0 } {
        !           102: 	set probnum $problem(num)
        !           103:     } else {
        !           104: 	set probnum $problem(editing)
        !           105:     }
        !           106: 
        !           107:     if { $problem(MCeditleaf) == 0 } { 
        !           108: 	set leaf [incr problem(prob.$probnum.numleaf)]
        !           109: 	set problem(prob.$probnum.leaf.$leaf.numoptions) 1
        !           110:     } else {
        !           111: 	set leaf $problem(MCeditleaf)
        !           112:     }
        !           113: 
        !           114:     set addLeaf [toplevel .mcaddleaf]
        !           115:     
        !           116:     set labelFrame [frame $addLeaf.label]
        !           117:     set buttonFrame [frame $addLeaf.button]
        !           118:     pack $labelFrame $buttonFrame -side top
        !           119:     pack configure $buttonFrame -anchor s
        !           120: 
        !           121:     label $labelFrame.label -text "Adding options for leaf $leaf"
        !           122:     pack $labelFrame.label -side top
        !           123: 
        !           124: 
        !           125:     for { set i 1 } { $i <= $problem(prob.$probnum.leaf.$leaf.numoptions) } { incr i } {	
        !           126: 	set leafFrame [frame $addLeaf.frame$i]
        !           127: 	label $leafFrame.label -text "Leaf $leaf Option $i:"
        !           128: 	checkbutton $leafFrame.correct -text Correct -offvalue 2 \
        !           129: 	    -variable problem(prob.$probnum.leaf.$leaf.option.$i.correct)
        !           130: 	entry $leafFrame.entry \
        !           131: 	    -textvariable problem(prob.$probnum.leaf.$leaf.option.$i) \
        !           132: 	    -width 80 -xscrollcommand "$leafFrame.scroll set"
        !           133: 	scrollbar $leafFrame.scroll -command "$leafFrame.entry xview" \
        !           134: 	    -orient h
        !           135: 	pack $leafFrame -before $buttonFrame
        !           136: 	pack $leafFrame.label $leafFrame.correct $leafFrame.entry \
        !           137: 	    $leafFrame.scroll -side top -anchor w
        !           138: 	pack configure $leafFrame.scroll -fill x
        !           139:     }
        !           140: 
        !           141:     button $buttonFrame.add -text "Add option" -command {
        !           142: 	if { $problem(editing) == 0 } { set probnum $problem(num)
        !           143: 	} else { set probnum $problem(editing) }
        !           144: 	
        !           145: 	if { $problem(MCeditleaf) == 0 } { set leaf $problem(prob.$probnum.numleaf)
        !           146: 	} else { set leaf $problem(MCeditleaf) }
        !           147: 	set optnum [incr problem(prob.$probnum.leaf.$leaf.numoptions)] 
        !           148: 	set leafFrame [frame .mcaddleaf.frame$optnum]
        !           149: 	pack $leafFrame -before .mcaddleaf.button
        !           150: 
        !           151: 	label $leafFrame.label -text "Leaf $leaf Option $optnum:"
        !           152: 	checkbutton $leafFrame.correct -text Correct -offvalue 2 \
        !           153: 	    -variable problem(prob.$probnum.leaf.$leaf.option.$optnum.correct)
        !           154: 	entry $leafFrame.entry \
        !           155: 	    -textvariable problem(prob.$probnum.leaf.$leaf.option.$optnum) \
        !           156: 	    -width 80 -xscrollcommand "$leafFrame.scroll set"
        !           157: 	scrollbar $leafFrame.scroll \
        !           158: 	    -command "$leafFrame.entry xview" \
        !           159: 	    -orient h
        !           160: 	pack $leafFrame.label $leafFrame.correct $leafFrame.entry \
        !           161: 	    $leafFrame.scroll -side top -anchor w
        !           162: 	pack configure $leafFrame.scroll -fill x
        !           163:     }
        !           164:     button $buttonFrame.cancel -text "Cancel" -command "
        !           165: 	destroy $addLeaf
        !           166: 	#(FIXME) this needs to do alot more
        !           167:     "
        !           168:     button $buttonFrame.done -text "Done" \
        !           169: 	-command "
        !           170: 	          destroy .mcaddleaf
        !           171: 	          MCupdateLeafList $leaf $probnum 
        !           172:                   set problem(MCeditleaf) 0"
        !           173:     pack $buttonFrame.add $buttonFrame.cancel $buttonFrame.done -side left
        !           174: }
        !           175: 
        !           176: proc MCcheckIfDone { probnum } {
        !           177:     global problem
        !           178: 
        !           179:     set found 0
        !           180:     for { set i 1 } { i <= $problem(prob.$probnum.numleaf } { incr i } {
        !           181: 	set found 1
        !           182: 	for { set j 1 } { j <= $problem(prob.$probnum.leaf.$i.numoptions) } { incr j } {
        !           183: 	    catch {
        !           184: 		if { $problem(prob.$probnum.leaf.$i.option.$j.correct) != 1 } {
        !           185: 		    set found 0
        !           186: 		}
        !           187: 	    }
        !           188: 	}
        !           189:     }
        !           190:     return $found
        !           191: }
        !           192: 
        !           193: 
        !           194: proc MCeditLeafOptions {} {
        !           195:     global problem MCchoiceList
        !           196: 
        !           197:     set leaf [$MCchoiceList curselection]
        !           198:     if { $leaf == "" } { return }
        !           199:     incr leaf
        !           200:     set problem(MCeditleaf) $leaf
        !           201: 
        !           202:     if { $problem(editing) == 0 } {
        !           203: 	set probnum $problem(num)
        !           204:     } else {
        !           205: 	set probnum $problem(editing)
        !           206:     }
        !           207: 
        !           208:     MCaddLeaf
        !           209: }
        !           210: 
        !           211: proc MCupdateLeafList { leaf probnum } {
        !           212:     global problem MCchoiceList
        !           213: 
        !           214:     set numLeafs [$MCchoiceList size]
        !           215:     set numOpt $problem(prob.$probnum.leaf.$leaf.numoptions)
        !           216: 
        !           217:     if { $numLeafs < $leaf } {
        !           218:     } else {
        !           219: 	$MCchoiceList delete  [ expr $leaf - 1 ]
        !           220:     }
        !           221: 
        !           222:     set string "Leaf $leaf, $numOpt options"
        !           223:     
        !           224:     $MCchoiceList insert [ expr $leaf - 1 ] "$string"
        !           225: }
        !           226: 
        !           227: proc MCexportHeader { fileid probnum } {
        !           228:     global problem
        !           229: 
        !           230:     puts $fileid "//****************************"
        !           231:     puts $fileid "/LET prob_val=$problem(prob.$probnum.val)"
        !           232:     if { $problem(prob.$probnum.hint) != "" } {
        !           233: 	puts $fileid "/HIN $problem(prob.$probnum.hint)"
        !           234:     } else {
        !           235: 	puts $fileid "//HIN No hint unless this line is uncommented and modified"
        !           236:     }
        !           237:     if { $problem(prob.$probnum.expl) != "" } {
        !           238: 	puts $fileid "/EXP $problem(prob.$probnum.expl)"
        !           239:     } else {
        !           240: 	puts $fileid "//EXP No explanation unless this line is uncommented and modified"
        !           241:     }
        !           242:     puts $fileid "/IMP \"../Tools/Problem\#\""
        !           243:     puts $fileid "$problem(prob.$probnum.quest)"
        !           244:     puts $fileid "//----------------------------"
        !           245: }
        !           246: 
        !           247: proc MCexportLeafs { fileid probnum } {
        !           248:     global problem
        !           249: 
        !           250:     #(FIXME) need to put out same number of Opts?
        !           251:     #(FIXME) extra char at begging of alphabet so as to get rid of the expr?
        !           252:     set alphabet abcdefghijklmnopqrstuvwxyz
        !           253: 
        !           254:     for { set i 1 } { $i <= $problem(prob.$probnum.numleaf) } { incr i } {
        !           255: 	for { set j 1 } { $j <= $problem(prob.$probnum.leaf.$i.numoptions) } { incr j } {
        !           256: 	    set var ""
        !           257: 	    append var s $i [string index $alphabet [ expr $j - 1 ] ]
        !           258: 	    puts $fileid "/LET $var=\"$problem(prob.$probnum.leaf.$i.option.$j)\""
        !           259: 	}
        !           260: 	puts $fileid "/LET mix$i=random(1,$problem(prob.$probnum.leaf.$i.numoptions),1)"
        !           261: 	for { set j 1 } { $j <= $problem(prob.$probnum.leaf.$i.numoptions) } { incr j } {
        !           262: 	    set var ""
        !           263: 	    append var a $i [string index $alphabet [ expr $j - 1 ] ]
        !           264: 	    puts $fileid "/LET $var=$problem(prob.$probnum.leaf.$i.option.$j.correct)"
        !           265: 	}
        !           266: 	puts $fileid "//"
        !           267:     }
        !           268:     puts $fileid "//Nof5aux follows"
        !           269: }
        !           270: 
        !           271: proc MCexportAns { fileid probnum } {
        !           272:     global problem
        !           273: 
        !           274:     #(FIXME) need to put out same number of Opts?
        !           275:     #(FIXME) extra char at begging of alphabet so as to get rid of the expr?
        !           276:     set alphabet abcdefghijklmnopqrstuvwxyz
        !           277:     set ALPHABET ABCDEFGHIJKLMNOPQRSTUVWXYZ
        !           278: 
        !           279:     for { set i 1 } { $i <= $problem(prob.$probnum.numleaf) } { incr i } {
        !           280: 	set questStr "/LET s$i=choose(mix$i"
        !           281: 	set ansStr "/LET a$i=choose(mix$i"
        !           282: 	for { set j 1 } { $j <= $problem(prob.$probnum.leaf.$i.numoptions) } { incr j } {
        !           283: 	    append questStr ",s$i"
        !           284: 	    append questStr [string index $alphabet [ expr $j - 1 ] ]
        !           285: 	    append ansStr ",a$i"
        !           286: 	    append ansStr [string index $alphabet [ expr $j - 1 ] ]
        !           287: 	}
        !           288: 	append questStr ")"
        !           289: 	append ansStr ")"
        !           290: 	puts $fileid "$questStr"
        !           291: 	puts $fileid "$ansStr"
        !           292:     }    
        !           293:     puts $fileid "/LET seed=random(1,300,1)"
        !           294:     set line "/MAP(seed;"
        !           295:     set end ";"
        !           296:     for { set i 1 } { $i <= $problem(prob.$probnum.numleaf) } { incr i } {
        !           297: 	if { $i != $problem(prob.$probnum.numleaf) } {
        !           298: 	    append line "M$i,"
        !           299: 	    append end "s$i,"
        !           300: 	} else {
        !           301: 	    append line "M$i"
        !           302: 	    append end "s$i)"
        !           303: 	}
        !           304:     }
        !           305:     append line $end
        !           306:     puts $fileid "$line"
        !           307:     puts $fileid "/LET it=tex(\"\\item\[\] \",\"\")"
        !           308:     puts $fileid "/DIS(tex(\"\\begin\{choicelist\}\",\"\"))"
        !           309:     for { set i 1 } { $i <= $problem(prob.$probnum.numleaf) } { incr i } {
        !           310: 	puts $fileid "/DIS(it) [string index $ALPHABET [expr $i - 1] ]) /DIS (M$i)"
        !           311:     }
        !           312:     puts $fileid "/DIS(tex(\"\\end\{choicelist\}\",\"\"))"
        !           313:     set line "/MAP(seed;"
        !           314:     set end ";"
        !           315:     for { set i 1 } { $i <= $problem(prob.$probnum.numleaf) } { incr i } {
        !           316: 	if { $i != $problem(prob.$probnum.numleaf) } {
        !           317: 	    append line "b$i,"
        !           318: 	    append end "a$i,"
        !           319: 	} else {
        !           320: 	    append line "b$i"
        !           321: 	    append end "a$i)"
        !           322: 	}
        !           323:     }
        !           324:     append line $end
        !           325:     puts $fileid "$line"
        !           326:     for { set i 1 } { $i <= $problem(prob.$probnum.numleaf) } { incr i } {
        !           327: 	puts $fileid "/LET NM$i=b$i*(b$i==1)+1"
        !           328:     }
        !           329:     for { set i 1 } { $i <= $problem(prob.$probnum.numleaf) } { incr i } {
        !           330: 	puts $fileid "/LET lett$i=choose(NM$i,\"\",\"[string index $ALPHABET [expr $i -1 ] ]\")"
        !           331:     }
        !           332:     set line "/LET Nof5right=lett1"
        !           333:     for { set i 2 } { $i <= $problem(prob.$probnum.numleaf) } { incr i } {
        !           334: 	append line "+lett$i"
        !           335:     }
        !           336:     puts $fileid "$line"
        !           337:     puts $fileid "//**************************"
        !           338:     puts $fileid "/DIS(stdline)"
        !           339:     puts $fileid "/ANS(Nof5right,wgt=prob_val,str=mc)"
        !           340:     puts $fileid "//**************************"
        !           341: }
        !           342: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>