public int FillTheQuestionSelectContent(int levelNumber)
    {
        m_questionManager.SetQuiz(levelNumber);
        m_numberOfLevelsInGroup = m_questionManager.GetNumberOfQuestions();
        Debug.Log("m_numberOfLevelsInGroup = " + m_numberOfLevelsInGroup);

        bool active      = true;
        int  activeCount = m_numberOfLevelsInGroup;
        List <LevelSelectButtonData> levelData = new List <LevelSelectButtonData>();

        for (int j = 0; j < m_numberOfLevelsInGroup; j++)
        {
            Debug.Log("question number " + j);
            Question q     = m_questionManager.GetQuestion(j);
            int      score = m_playerProgress.QuestionScore(levelNumber, j);
            LevelSelectButtonData datum = new LevelSelectButtonData(j, PressedQuestionButton, false, q.pictureFileName, active);
            datum.SetCompletion(score, 1);
            if (MUST_COMPLETE_QUESTIONS_WITHIN_QUIZ_IN_SEQUENCE && (score == 0) && active)
            {
                activeCount = j + 1;
                active      = false;
            }
            levelData.Add(datum);
        }

        m_levelSelectContent.Init(levelData);

        m_levelSelectContent.SetContentAlpha(0.3f, activeCount);

        return(activeCount);
    }
    void FillWithGroupsAndQuizzes()
    {
        ClearExistingGroups();
        List <string> groupNames          = GetGroupNames();
        int           groupCount          = 0;
        bool          allGroupsClearSoFar = true;

        foreach (string groupName in groupNames)
        {
            // create a group for the UI
            GameObject                   group = Instantiate(m_levelGroupPrefab, transform);
            LevelSelectContent           levelSelectContent = group.GetComponent <LevelSelectContent>();
            List <LevelSelectButtonData> levelData          = new List <LevelSelectButtonData>();

            levelSelectContent.SetHeaderText(groupName);

            // group 0 is always active. Others are active if all previous groups have been cleared.
            bool groupIsActive = allGroupsClearSoFar;
            allGroupsClearSoFar = allGroupsClearSoFar && GroupIsClear(groupName);

            bool quizIsActive = true;
            int  numberOfSelectableQuizzes = 0;
            int  quizCount = 0;
            for (int i = 0; i < m_numberOfQuizzes; i++)
            {
                m_questionManager.SetQuiz(i);
                if (string.Compare(m_questionManager.GetGroupName(), groupName) == 0)
                {
                    LevelSelectButtonData datum = new LevelSelectButtonData(i, PressedLevelButton, true, m_questionManager.GetQuizName(), groupIsActive && (quizIsActive || !MUST_COMPLETE_QUIZZES_IN_SEQUENCE));
                    int score    = m_playerProgress.QuizScore(i);
                    int maxScore = m_playerProgress.QuizNumQuestions(i);
                    datum.SetCompletion(score, m_questionManager.GetNumberOfQuestions());
                    quizCount++;
                    if (MUST_COMPLETE_QUIZZES_IN_SEQUENCE && (score < maxScore) && quizIsActive)
                    {
                        // found the first non-active quiz. All quizzes up to and including this one are selectable, others are not.
                        numberOfSelectableQuizzes = quizCount;
                        quizIsActive = false;
                    }
                    levelData.Add(datum);
                }
            }
            if (numberOfSelectableQuizzes == 0)
            {
                // didn't find a non-active quiz. They are all selectable.
                numberOfSelectableQuizzes = quizCount;
            }
            levelSelectContent.Init(levelData);

            Debug.Log("groupIsActive " + groupIsActive + ", activeQuizCount " + numberOfSelectableQuizzes);

            if (!groupIsActive)
            {
                numberOfSelectableQuizzes = 0;
            }

            levelSelectContent.SetContentAlpha(0.3f, numberOfSelectableQuizzes);

            groupCount++;
        }
    }