Exemple #1
0
        private void LoadSurvey()
        {
            QuestionView v = vg.InitialQuestion();

            InitializePropertyCallback(v);
            surveyContent.Children.Insert(0, v);
        }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        // 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);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
 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;
         }
     };
 }
Exemple #6
0
        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
            }
        }
Exemple #7
0
        /// <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);
        }