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>