Esempio n. 1
0
        public void BuildMarkingQuestion(List <MarkingQuestion> list)
        {
            MarkingQuestion mq = new MarkingQuestion(Name);

            if (HasSubQuestions)
            {
                foreach (var q in SubQuestions)
                {
                    q.BuildMarkingQuestion(mq.SubMarkingQuestions);
                }
            }
            list.Add(mq);
        }
Esempio n. 2
0
 public MarkingQuestionNode(MarkingQuestion mq)
 {
     markingQuestion = mq;
     Name            = mq.QuestionName;
     Text            = Name;
 }
Esempio n. 3
0
        private void DrawQuestion(MarkingQuestion mq, Document doc)
        {
            //Get the question
            Question question = smd.Scripts.First().Script.FindQuestion(mq.QuestionName);

            Paragraph mainPara = new Paragraph();

            mainPara.SpacingBefore   = 20f;
            mainPara.IndentationLeft = GetIndent(mq.QuestionName);

            //Question header text
            Phrase questionHeader = new Phrase(mq.QuestionName, QuestionHeaderFont);

            mainPara.Add(questionHeader);
            if (question.AnswerType != AnswerType.None)
            {
                //Marks
                mainPara.Add(new Chunk(new VerticalPositionMark()));
                mainPara.Add(new Chunk($"Marks: {mq.AssignedMarks.ToString("0.#")} / {question.Marks}", MarksHeaderFont));
            }
            mainPara.Add("\n");

            //Question text
            Paragraph questionTextPara = new Paragraph(question.QuestionTextRaw, QuestionTextFont);

            questionTextPara.FirstLineIndent = 15f;
            mainPara.Add(questionTextPara);
            mainPara.Add("\n");

            //Question image
            if (question.Image != null)
            {
                try
                {
                    Image i = Image.GetInstance(question.Image, System.Drawing.Imaging.ImageFormat.Jpeg);
                    i.ScaleToFit(doc.PageSize.Width - 70f, i.Height);
                    mainPara.Add(i);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"An error occured adding image from {question.Name}\n\n {ex.Message}", "Error adding image", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            //Multi Choice options if applicable
            if (question.AnswerType == AnswerType.Multi)
            {
                Phrase    optA        = new Phrase($"A) {question.OptionA}\n", QuestionTextFont);
                Phrase    optB        = new Phrase($"B) {question.OptionB}\n", QuestionTextFont);
                Phrase    optC        = new Phrase($"C) {question.OptionC}\n", QuestionTextFont);
                Phrase    optD        = new Phrase($"D) {question.OptionD}\n", QuestionTextFont);
                Paragraph optionsPara = new Paragraph();
                optionsPara.Add(optA);
                optionsPara.Add(optB);
                optionsPara.Add(optC);
                optionsPara.Add(optD);
                mainPara.Add(optionsPara);
            }

            //Model answer
            if (question.AnswerType != AnswerType.None)
            {
                if (includeModelAnswers && !question.ModelAnswer.NullOrEmpty())
                {
                    mainPara.Add(new Phrase("Model answer: \n", ModelAnswerHeaderFont));
                    if (question.AnswerType == AnswerType.Multi)
                    {
                        Paragraph multiAnswerPara = new Paragraph($"The correct option was: ({question.CorrectOption}) {question.GetOptionText(question.CorrectOption)}", QuestionTextFont);
                        mainPara.Add(multiAnswerPara);
                    }
                    else
                    {
                        Paragraph longAnswerPara = new Paragraph(question.ModelAnswer, QuestionTextFont);
                        mainPara.Add(longAnswerPara);
                    }
                    mainPara.Add("\n");
                }

                //Student response
                mainPara.Add(new Phrase("Student answer: \n", ModelAnswerHeaderFont));
                Answer answer = smd.Scripts.First().Script.Answers[mq.QuestionName];
                if (answer.Attempted)
                {
                    if (question.AnswerType == AnswerType.Multi)
                    {
                        MultiChoiceOption opt = answer.SelectedOption;
                        mainPara.Add(new Paragraph($"Student answered option ({opt}) {question.GetOptionText(opt)}", QuestionTextFont));
                    }
                    else
                    {
                        string sAnswer = question.AnswerType == AnswerType.Open ? answer.LongAnswer : answer.ShortAnswer;
                        mainPara.Add(new Paragraph(sAnswer, QuestionTextFont));
                    }
                }
                else
                {
                    mainPara.Add(new Paragraph("Student did not answer", QuestionTextFont));
                }
                mainPara.Add("\n");

                //Marker response
                if (!mq.MarkerResponse.NullOrEmpty())
                {
                    mainPara.Add(new Phrase("Marker response: \n", ModelAnswerHeaderFont));
                    mainPara.Add(new Paragraph(mq.MarkerResponse, QuestionTextFont));
                    mainPara.Add("\n");
                }
            }

            doc.Add(mainPara);
        }