private void LoadSurvey() { QuestionView v = vg.InitialQuestion(); InitializePropertyCallback(v); surveyContent.Children.Insert(0, v); }
public void OnNextClicked(object sender, EventArgs args) { QuestionView v = vg.NextQuestion(); if (v == null) { DisplayAlert("Done!", "Thank you for filling the survey", "Submit", "Change").ContinueWith(t => { if (t.Result == true) { IOController.WriteSurveyResult(vg.SurveyScheme, vg.CurrentViews); _tflp.Reschedule(); this.navigationContent.Navigation.PopAsync(); this.navigationContent.Navigation.PopAsync(); } }, TaskScheduler.FromCurrentSynchronizationContext()); } else { InitializePropertyCallback(v); surveyContent.Children.RemoveAt(0); surveyContent.Children.Insert(0, v); this.goToNextButton.IsEnabled = v.IsAnswered; this.goToPreviousButton.IsEnabled = true; } }
// when reading from a saved survey TODO // public ViewGenerator (List<QuestionView> aq, Survey s) : this(s) // { // generatedViews = aq; // } /// <summary> /// Moves to the next question /// </summary> /// <returns>The next question.</returns> public QuestionView NextQuestion() { QuestionView oldView = generatedViews [currentQuestion.Value]; // loop as long as we have a next question in the survey definition while (ProgressQuestion()) { QuestionView newView = null; if (generatedViews.ContainsKey(currentQuestion.Value)) { newView = generatedViews [currentQuestion.Value]; } else { newView = GetQuestionView(currentQuestion.Value); generatedViews.Add(currentQuestion.Value, newView); } LinkedList <QuestionView> preqViewList = new LinkedList <QuestionView> (); foreach (Prerequisite p in currentQuestion.Value.Prerequisites) { QuestionView q; if (generatedViews.TryGetValue(p.Question, out q)) { if (CurrentViews.Find(generatedViews [q.question]) != null) { preqViewList.AddLast(generatedViews [p.Question]); } } } if (PrerequisiteController.calculatePrerequisite(currentQuestion.Value, preqViewList)) { if (CurrentViews.Find(newView) == null) { CurrentViews.AddAfter(CurrentViews.Find(oldView), newView); } return(newView); } else { if (CurrentViews.Find(newView) != null) { CurrentViews.Remove(CurrentViews.Find(generatedViews [currentQuestion.Value])); } } } return(null); }
/// <summary> /// Gets initial question /// </summary> /// <returns>The initial question.</returns> public QuestionView InitialQuestion() { // empty initialization CurrentViews = new LinkedList <QuestionView> (); generatedViews = new Dictionary <QuestionReference, QuestionView> (); currentSurveyPart = SurveyScheme.SurveyParts.First; currentQuestion = currentSurveyPart.Value.Questions.First; QuestionView currentQuestionView = GetQuestionView(currentQuestion.Value); generatedViews.Add(currentQuestion.Value, currentQuestionView); CurrentViews.AddLast(currentQuestionView); return(currentQuestionView); }
private void InitializePropertyCallback(QuestionView v) { v.PropertyChanged += (object sender, PropertyChangedEventArgs e) => { switch (e.PropertyName) { case "IsAnswered": if (((QuestionView)sender).IsAnswered == true) { this.goToNextButton.IsEnabled = true; } else { this.goToNextButton.IsEnabled = false; } break; } }; }
public void OnPreviousClicked(object sender, EventArgs args) { QuestionView v = vg.PreviousQuestion(); if (v != null) { InitializePropertyCallback(v); this.goToNextButton.IsEnabled = v.IsAnswered; this.goToPreviousButton.IsEnabled = true; surveyContent.Children.RemoveAt(0); surveyContent.Children.Insert(0, v); } else { this.goToPreviousButton.IsEnabled = false; // TODO go to the main menu? But HW button available } }
/// <summary> /// Moves to the previous question. /// </summary> /// <returns>The previous question.</returns> public QuestionView PreviousQuestion() { QuestionView currentView = generatedViews [currentQuestion.Value]; LinkedListNode <QuestionView> currentViewNode = CurrentViews.Find(currentView); if (currentViewNode.Previous == null) { return(null); } QuestionView previousView = currentViewNode.Previous.Value; QuestionReference previousReference = previousView.question; while (currentQuestion.Value != previousReference) { if (!RegressQuestion()) { throw new ArgumentOutOfRangeException("Could not find the predecessor for the question"); } } return(previousView); }