public void Init() { List <string> ids = controlConstructScheme.Sequence.ControlConstructIds; foreach (string id in ids) { QuestionConstruct questionConstructModel = controlConstructScheme.FindQuestionConstruct(id); if (questionConstructModel != null) { QuestionVM question = StudyUnit.FindQuestion(questionConstructModel.QuestionId); Debug.Assert(question != null, "Question not found id=" + questionConstructModel.QuestionId); QuestionConstructVM questionConstruct = new QuestionConstructVM(questionConstructModel, question); InitConstruct(questionConstruct); constructModels.Add(questionConstructModel); constructs.Add(questionConstruct); continue; } QuestionGroupConstruct questionGroupConstructModel = controlConstructScheme.FindQuestionGroupConstruct(id); if (questionGroupConstructModel != null) { QuestionGroupVM questionGroup = StudyUnit.FindQuestionGroup(questionGroupConstructModel.QuestionGroupId); QuestionGroupConstructVM questionGroupConstruct = new QuestionGroupConstructVM(questionGroupConstructModel, questionGroup); InitConstruct(questionGroupConstruct); constructModels.Add(questionGroupConstructModel); constructs.Add(questionGroupConstruct); continue; } Statement statementModel = controlConstructScheme.FindStatement(id); if (statementModel != null) { StatementVM statement = new StatementVM(statementModel); InitConstruct(statement); constructModels.Add(statementModel); constructs.Add(statement); continue; } IfThenElse ifThenElseModel = controlConstructScheme.FindIfThenElse(id); if (ifThenElseModel != null) { IfThenElseVM ifThenElse = new IfThenElseVM(ifThenElseModel); InitConstruct(ifThenElse); constructModels.Add(ifThenElseModel); constructs.Add(ifThenElse); } } List <QuestionConstructVM> questionConstructs = QuestionConstructs; foreach (ConstructVM construct in constructs) { if (construct is IfThenElseVM) { IfThenElseVM ifThenElse = (IfThenElseVM)construct; ifThenElse.ThenConstructs = ThenConstructs; } } modelSyncher = new ModelSyncher <ConstructVM, IConstruct>(this, constructs, constructModels); InitTitle(); }
private void AddQuestionGroup() { ObservableCollection <QuestionGroupVM> questionGroups = StudyUnit.QuestionGroups; SelectObjectWindowVM <QuestionGroupVM> vm = new SelectObjectWindowVM <QuestionGroupVM>(questionGroups); QuestionGroupVM questionGroup = SelectObjectWindow.Select(Resources.SelectQuestionGroup, vm) as QuestionGroupVM;//Select Question Group if (questionGroup != null) { InsertQuestionGroupConstruct(questionGroup, true); } }
public void InsertQuestionGroupConstruct(QuestionGroupVM questionGroup, bool manualOperation) { ConstructVM construct = ConstructVM.FindByQuestionGroupId(constructs, questionGroup.Id); if (construct != null) { if (manualOperation) { MessageBox.Show(Resources.AlreadySelectedQuestionGroup); //This question group is already selected } return; } QuestionGroupConstruct questionGroupConstructModel = new QuestionGroupConstruct(); questionGroupConstructModel.QuestionGroupId = questionGroup.Id; questionGroupConstructModel.No = ControlConstructScheme.QUESTION_GROUP_NO_PREFIX + (ConstructUtils.QuestionGroupConstructCount(constructs) + 1); QuestionGroupConstructVM questionGroupConstruct = new QuestionGroupConstructVM(questionGroupConstructModel, questionGroup); InsertConstruct(questionGroupConstruct, manualOperation); }
public QuestionGroupConstructVM(QuestionGroupConstruct questionGroupConstruct, QuestionGroupVM questionGroup) : base(questionGroupConstruct) { Debug.Assert(questionGroupConstruct != null); Debug.Assert(questionGroup != null); this.questionGroupConstruct = questionGroupConstruct; this.questionGroup = questionGroup; }
protected override void WriteBody(Body body) { ObservableCollection <ConstructVM> constructs = controlConstructScheme.Constructs; foreach (ConstructVM construct in constructs) { if (construct is QuestionConstructVM) { //Export Question QuestionConstructVM questionConstruct = (QuestionConstructVM)construct; //Title string text = questionConstruct.No + ". " + questionConstruct.Text; Paragraph paragraph = CreateMidashi1Paragraph(text); body.Append(paragraph); paragraph = CreateEmptyParagraph(); body.Append(paragraph); //Layout QuestionVM question = questionConstruct.Question; if (question.IsResponseTypeChoices) { WriteChoicesResponse(body, question); } else if (question.IsResponseTypeFree) { WriteFreeResponse(body, question); } else if (question.IsResponseTypeDateTime) { WriteDateTimeResponse(body, question); } else if (question.IsResponseTypeNumber) { WriteNumerResponse(body, question); } paragraph = CreateEmptyParagraph(); body.Append(paragraph); } else if (construct is StatementVM) { //Export description StatementVM statement = (StatementVM)construct; Paragraph paragraph = CreateParagraph(statement.Text); body.Append(paragraph); paragraph = CreateEmptyParagraph(); body.Append(paragraph); } else if (construct is QuestionGroupConstructVM) { //Export Question Group QuestionGroupConstructVM questionGroupConstruct = (QuestionGroupConstructVM)construct; QuestionGroupVM questionGroup = questionGroupConstruct.QuestionGroup; string text = questionGroupConstruct.No + ". " + questionGroupConstruct.Title; Paragraph paragraph = CreateParagraph(text); body.Append(paragraph); paragraph = CreateEmptyParagraph(); body.Append(paragraph); WriteQuestionGroupResponse(body, questionGroup); paragraph = CreateEmptyParagraph(); body.Append(paragraph); } } }
private void WriteQuestionGroupResponse(Body body, QuestionGroupVM questionGroup) { ICollection <QuestionVM> questions = questionGroup.Questions; if (questions.Count == 0) { return; } Table table = CreateFilledTable(true, true); if (questionGroup.Orientation == QuestionGroupOrientation.Row) { //If horizontal (Categories are horizontally arranged) QuestionVM firstQuestion = questions.First(); List <CodeVM> codes = GetValidCodes(firstQuestion.Response.Codes); int firstQuestionCount = codes.Count; TableRow tableRow = null; if (questionGroup.Sentence == QuestionGroupSentence.Top) { //header rows tableRow = new TableRow(); table.Append(tableRow); tableRow.Append(CreateBorderCell(0)); foreach (CodeVM code in codes) { tableRow.Append(CreateBorderCell(code.Label)); } } foreach (QuestionVM question in questions) { tableRow = new TableRow(); table.Append(tableRow); //Question first tableRow.Append(CreateBorderCell(question.Title)); //cell after codes = GetValidCodes(question.Response.Codes); foreach (CodeVM code in codes) { List <string> contents = new List <string>(); contents.Add(code.Value); if (questionGroup.Sentence == QuestionGroupSentence.EachCell) { contents.Add(code.Label); } tableRow.Append(CreateCenterCell(contents)); } int diff = firstQuestionCount - codes.Count; if (diff > 0) { for (int i = 0; i < diff; i++) { tableRow.Append(CreateBorderCell(0)); } } } } else { //In the case of column-wise //header rows TableRow tableRow = new TableRow(); table.Append(tableRow); if (questionGroup.Sentence == QuestionGroupSentence.Top) { tableRow.Append(CreateBorderCell(0)); } //Questin Text foreach (QuestionVM question in questions) { tableRow.Append(CreateBorderCell(question.Title)); } QuestionVM firstQuestion = questions.First(); List <CodeVM> codes = GetValidCodes(firstQuestion.Response.Codes); int firstQuestionCount = codes.Count; int codeIndex = 0; foreach (CodeVM code in codes) { tableRow = new TableRow(); table.Append(tableRow); //Category if (questionGroup.Sentence == QuestionGroupSentence.Top) { tableRow.Append(CreateBorderCell(code.Label)); } foreach (QuestionVM question in questions) { List <CodeVM> questionCodes = GetValidCodes(question.Response.Codes); if (codeIndex < questionCodes.Count) { List <string> contents = new List <string>(); contents.Add(questionCodes[codeIndex].Value); if (questionGroup.Sentence == QuestionGroupSentence.EachCell) { contents.Add(questionCodes[codeIndex].Label); } tableRow.Append(CreateCenterCell(contents)); } else { tableRow.Append(CreateBorderCell(0)); } } codeIndex++; } } body.Append(table); }