/* * Starts the test set with the given information. * If the files are read successfully, starts the test. * Otherwise, displays an error dialog. */ private void startTestSet(Info.CategoryInfo categoryInfo, Info.TestSetInfo testSetInfo, int numRounds, int numQuestionsPerRound) { // Read the test set TestSet testSet = TestFileReader.readTestSet(categoryInfo, testSetInfo); // If the test set files were read successfully if (testSet != null) { // Remove the bad questions testSet.removeIncompleteOrInvalidQuestions(); // Randomize the questions testSet.randomizeQuestions(); // Calculate the total number of questions int numQuestions = numRounds * numQuestionsPerRound; // If there are enough questions in the test set if (numQuestions <= testSet.numQuestionsAvailable()) { // Set the number of rounds and questions testSet.numRounds = numRounds; testSet.numQuestionsPerRound = numQuestionsPerRound; // Go to the test start page contentWindow.Content = new TestStartPage(contentWindow, testSet); } // If there are not enough questions in the test set else { MessageBox.Show( "Only " + testSet.numQuestionsAvailable() + " questions are available for \"" + testSetInfo.testSetStringLong + "\"." + " You have selected " + numQuestions + " questions.", "Not Enough Questions Available", MessageBoxButton.OK, MessageBoxImage.Warning ); updatePage(); setDefaults(categoryInfo, testSetInfo); } } // If the test set files were not read else { MessageBox.Show( "The test files for \"" + testSetInfo.testSetStringLong + "\" could not be found." + "\n\nMake sure that the test files are located in the Tests folder." + " If this error persists, redownload the application.", "Test Files Not Found", MessageBoxButton.OK, MessageBoxImage.Error ); updatePage(); setDefaults(categoryInfo); } }
/* * Returns a test set, as read and combined from the files for the tests in the set. * May return null if none of the test files are opened correctly. */ public static TestSet readTestSet(Info.CategoryInfo categoryInfo, Info.TestSetInfo testSetInfo) { List <Test> tests = new List <Test>(); // Go through each of the tests in the test set foreach (Info.TestName testName in testSetInfo.testNames) { // Read the test Test test = readTest(testName); // If the test was read successfully, add it to the list if (test != null) { tests.Add(test); } } // If any tests were read successfully, create the test set if (tests.Count > 0) { return(new TestSet(categoryInfo, testSetInfo, tests, 0, 0)); } else { return(null); } }
/* * Start button event handler. */ private void startButton_Click(object sender, RoutedEventArgs e) { // Hide the warning label hideWarning(); // If a category is selected if (isACategorySelected()) { // If a test is selected if (isATestSelected()) { // If a number of rounds is selected if (areRoundsSelected()) { // If a number of questions is selected if (areQuestionsSelected()) { Info.CategoryInfo categoryInfo = getSelectedCategory(); Info.TestSetInfo testSetInfo = getSelectedTest(); int numRounds = getSelectedRounds(); int numQuestions = getSelectedQuestions(); startTestSet(categoryInfo, testSetInfo, numRounds, numQuestions); } // If a number of questions is not selected else { warningLabel.Content = "You must select the questions per round."; warningLabel.Visibility = Visibility.Visible; } } // If a number of rounds is not selected else { warningLabel.Content = "You must select the rounds."; warningLabel.Visibility = Visibility.Visible; } } // If a test is not selected else { warningLabel.Content = "You must select a test."; warningLabel.Visibility = Visibility.Visible; } } // If a category is not selected else { warningLabel.Content = "You must select a category."; warningLabel.Visibility = Visibility.Visible; } }
/* * Sets a default category and test set. */ private void setDefaults(Info.CategoryInfo defaultCategoryInfo, Info.TestSetInfo defaultTestSetInfo) { updatePage(); enableCategoryComboBox(); categoryComboBox.SelectedIndex = availableCategories.IndexOf(defaultCategoryInfo); enableTestComboBox(defaultCategoryInfo); testComboBox.SelectedIndex = availableTestSets.IndexOf(defaultTestSetInfo); enableRoundsComboBox(); }
/* * Constructor */ public TestSet(Info.CategoryInfo categoryInfo, Info.TestSetInfo testSetInfo, List <Test> tests, int numRounds, int numQuestionsPerRound) { this.categoryInfo = categoryInfo; this.testSetInfo = testSetInfo; this.questions = new List <TestQuestion>(); foreach (Test test in tests) { this.questions.AddRange(test.questions); } this.numRounds = numRounds; this.numQuestionsPerRound = numQuestionsPerRound; this.currentRoundIndex = 0; this.currentRoundQuestionIndex = 0; }
/* * Constructor with default category and test. */ public SelectionPage(Window contentWindow, Info.CategoryInfo defaultCategoryInfo, Info.TestSetInfo defaultTestSetInfo) { InitializeComponent(); this.contentWindow = contentWindow; this.availableCategories = Info.availableCategories; this.availableTestSets = new List <Info.TestSetInfo>(); this.availableRounds = AVAILABLE_ROUNDS; this.availableQuestions = AVAILABLE_QUESTIONS; updatePage(); setDefaults(defaultCategoryInfo, defaultTestSetInfo); }