/// <summary> /// Gets data from the scan item field and shows it. /// </summary> private void PopulateForm() { // load scan scanPictureBox.Image = ImageHandling.GetBitmap(scanItem.Image); // load the answers List <KlokanTestDBExpectedAnswer> expectedValues = new List <KlokanTestDBExpectedAnswer>(scanItem.ExpectedValues); TableArrayHandling.DbSetToAnswers(expectedValues, out expectedValuesStudentTable, out expectedValuesAnswerTable); FormTableHandling.DrawAnswers(studentTablePictureBox, expectedValuesStudentTable, 0, FormTableHandling.DrawCross, Color.Black); FormTableHandling.DrawAnswers(answerTable1PictureBox, expectedValuesAnswerTable, 0, FormTableHandling.DrawCross, Color.Black); FormTableHandling.DrawAnswers(answerTable2PictureBox, expectedValuesAnswerTable, 1, FormTableHandling.DrawCross, Color.Black); FormTableHandling.DrawAnswers(answerTable3PictureBox, expectedValuesAnswerTable, 2, FormTableHandling.DrawCross, Color.Black); bool[,,] computedValuesStudentTable; bool[,,] computedValuesAnswerTable; List <KlokanTestDBComputedAnswer> computedValues = new List <KlokanTestDBComputedAnswer>(scanItem.ComputedValues); TableArrayHandling.DbSetToAnswers(computedValues, out computedValuesStudentTable, out computedValuesAnswerTable); FormTableHandling.DrawAnswers(studentTablePictureBox, computedValuesStudentTable, 0, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(answerTable1PictureBox, computedValuesAnswerTable, 0, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(answerTable2PictureBox, computedValuesAnswerTable, 1, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(answerTable3PictureBox, computedValuesAnswerTable, 2, FormTableHandling.DrawCircle, Color.Red); }
private void discardButton_Click(object sender, EventArgs e) { ResetTableImages(); // draw the original answers FormTableHandling.DrawAnswers(studentTablePictureBox, expectedValuesStudentTable, 0, FormTableHandling.DrawCross, Color.Black); FormTableHandling.DrawAnswers(answerTable1PictureBox, expectedValuesAnswerTable, 0, FormTableHandling.DrawCross, Color.Black); FormTableHandling.DrawAnswers(answerTable2PictureBox, expectedValuesAnswerTable, 1, FormTableHandling.DrawCross, Color.Black); FormTableHandling.DrawAnswers(answerTable3PictureBox, expectedValuesAnswerTable, 2, FormTableHandling.DrawCross, Color.Black); bool[,,] computedValuesStudentTable; bool[,,] computedValuesAnswerTable; List <KlokanTestDBComputedAnswer> computedValues = new List <KlokanTestDBComputedAnswer>(scanItem.ComputedValues); TableArrayHandling.DbSetToAnswers(computedValues, out computedValuesStudentTable, out computedValuesAnswerTable); FormTableHandling.DrawAnswers(studentTablePictureBox, computedValuesStudentTable, 0, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(answerTable1PictureBox, computedValuesAnswerTable, 0, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(answerTable2PictureBox, computedValuesAnswerTable, 1, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(answerTable3PictureBox, computedValuesAnswerTable, 2, FormTableHandling.DrawCircle, Color.Red); editButton.Enabled = true; applyButton.Enabled = false; discardButton.Enabled = false; viewMode = true; }
private void applyButton_Click(object sender, EventArgs e) { if (addMode && (scanFilePath == null || scanFilePath == "")) { MessageBox.Show(Properties.Resources.ErrorTextNoFileSelected, Properties.Resources.ErrorCaptionGeneral, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (!TableArrayHandling.CheckAnswers(expectedValuesStudentTableTemp, 0)) { MessageBox.Show(Properties.Resources.ErrorTextStudentNumberNotSelected, Properties.Resources.ErrorCaptionGeneral, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } for (int i = 0; i < 3; i++) { if (!TableArrayHandling.CheckAnswers(expectedValuesAnswerTableTemp, i)) { MessageBox.Show(Properties.Resources.ErrorTextExpectedAnswersNotSelected, Properties.Resources.ErrorCaptionGeneral, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } // apply the changes expectedValuesStudentTable = expectedValuesStudentTableTemp; expectedValuesAnswerTable = expectedValuesAnswerTableTemp; // draw the computed answers for comparison (if there are any) bool[,,] computedValuesStudentTable; bool[,,] computedValuesAnswerTable; List <KlokanTestDBComputedAnswer> computedValues = new List <KlokanTestDBComputedAnswer>(scanItem.ComputedValues); TableArrayHandling.DbSetToAnswers(computedValues, out computedValuesStudentTable, out computedValuesAnswerTable); FormTableHandling.DrawAnswers(studentTablePictureBox, computedValuesStudentTable, 0, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(answerTable1PictureBox, computedValuesAnswerTable, 0, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(answerTable2PictureBox, computedValuesAnswerTable, 1, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(answerTable3PictureBox, computedValuesAnswerTable, 2, FormTableHandling.DrawCircle, Color.Red); updateButton.Enabled = true; editButton.Enabled = true; applyButton.Enabled = false; discardButton.Enabled = false; viewMode = true; }
/// <summary> /// Extract answer sheet data from the database and display it in the form. /// Returns false if data could not be loaded. /// </summary> private bool PopulateForm() { using (var db = new KlokanDBContext()) { // load sheet data var sheetQuery = from sheet in db.AnswerSheets where sheet.AnswerSheetId == answerSheetId select sheet; KlokanDBAnswerSheet answerSheet = sheetQuery.FirstOrDefault(); if (answerSheet == null) { MessageBox.Show(Properties.Resources.ErrorTextSheetNotFoundInDatabase, Properties.Resources.ErrorCaptionGeneral, MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } var instanceQuery = from instance in db.Instances where instance.InstanceId == answerSheet.InstanceId select instance; KlokanDBInstance currentInstance = instanceQuery.FirstOrDefault(); if (answerSheet == null) { MessageBox.Show(Properties.Resources.ErrorTextSheetNotFoundInDatabase, Properties.Resources.ErrorCaptionGeneral, MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } studentNumber = answerSheet.StudentNumber; // show sheet data studentNumberValueLabel.Text = answerSheet.StudentNumber.ToString(); idValueLabel.Text = answerSheet.AnswerSheetId.ToString(); yearValueLabel.Text = currentInstance.Year.ToString(); categoryValueLabel.Text = currentInstance.Category.ToString(); pointsValueLabel.Text = answerSheet.Points.ToString(); // load scan scanPictureBox.Image = ImageHandling.GetBitmap(answerSheet.Scan); // load answers and draw them var chosenAnswersQuery = from chosenAnswer in db.ChosenAnswers where chosenAnswer.AnswerSheetId == answerSheetId select chosenAnswer; var chosenAnswersList = chosenAnswersQuery.ToList(); if (chosenAnswersList.Count == 0) { MessageBox.Show(Properties.Resources.ErrorTextSheetNotFoundInDatabase, Properties.Resources.ErrorCaptionGeneral, MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } TableArrayHandling.DbSetToAnswers(chosenAnswersList, out chosenAnswers); FormTableHandling.DrawAnswers(table1PictureBox, chosenAnswers, 0, FormTableHandling.DrawCross, Color.Black); FormTableHandling.DrawAnswers(table2PictureBox, chosenAnswers, 1, FormTableHandling.DrawCross, Color.Black); FormTableHandling.DrawAnswers(table3PictureBox, chosenAnswers, 2, FormTableHandling.DrawCross, Color.Black); var correctAnswersQuery = from correctAnswer in db.CorrectAnswers where correctAnswer.InstanceId == answerSheet.InstanceId select correctAnswer; var correctAnswersList = correctAnswersQuery.ToList(); if (correctAnswersList.Count == 0) { MessageBox.Show(Properties.Resources.ErrorTextSheetNotFoundInDatabase, Properties.Resources.ErrorCaptionGeneral, MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } TableArrayHandling.DbSetToAnswers(correctAnswersQuery.ToList(), out correctAnswers); FormTableHandling.DrawAnswers(table1PictureBox, correctAnswers, 0, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(table2PictureBox, correctAnswers, 1, FormTableHandling.DrawCircle, Color.Red); FormTableHandling.DrawAnswers(table3PictureBox, correctAnswers, 2, FormTableHandling.DrawCircle, Color.Red); } return(true); }
private void evaluateButton_Click(object sender, EventArgs e) { if (MessageBox.Show(Properties.Resources.PromptTextEvaluationStart, Properties.Resources.PromptCaptionEvaluationStart, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } List <TestKlokanInstance> testInstances = new List <TestKlokanInstance>(); // get all available test instances using (var testDB = new KlokanTestDBContext()) { var allScansQuery = from scan in testDB.Scans select scan; foreach (var scan in allScansQuery) { bool[,,] studentExpectedValues; bool[,,] answerExpectedValues; TableArrayHandling.DbSetToAnswers(new List <KlokanTestDBExpectedAnswer>(scan.ExpectedValues), out studentExpectedValues, out answerExpectedValues); TestKlokanInstance testInstance = new TestKlokanInstance { ScanId = scan.ScanId, Image = scan.Image, StudentExpectedValues = studentExpectedValues, AnswerExpectedValues = answerExpectedValues }; testInstances.Add(testInstance); } } if (testInstances.Count == 0) { MessageBox.Show(Properties.Resources.InfoTextNoTestItems, Properties.Resources.InfoCaptionNoTestItems, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } TestKlokanBatch testBatch = new TestKlokanBatch { Parameters = chosenParameters, TestInstances = testInstances }; ProgressDialog progressDialog = new ProgressDialog(new CancellationTokenSource()); progressDialog.SetProgressLabel(ProgressBarState.Evaluating); var jobScheduler = new JobScheduler(testBatch, progressDialog); // new thread created, so that all tasks in it are planned in the threadpool and not in the WinForms synchronization context Thread thread = new Thread(jobScheduler.Run); thread.IsBackground = true; thread.Start(); progressDialog.StartPosition = FormStartPosition.CenterScreen; progressDialog.ShowDialog(); PopulateDataView(); ShowAverageCorrectness(); }