private void scenarioSearchBy_SelectedValueChanged(object sender, EventArgs e) { ComboBox comboBox = (ComboBox)sender; if (comboBox == null) { return; } ScenarioSearchType type = (ScenarioSearchType)comboBox.SelectedItem; if (type == ScenarioSearchType.HasBonusObjective) { textBoxSearchScenarios.Enabled = false; buttonSearchScenarios.PerformClick(); } else { textBoxSearchScenarios.Enabled = true; } }
private void buttonSearchScenarios_Click(object sender, EventArgs e) { ScenarioSearchType searchType = (ScenarioSearchType)comboBoxScenariosSearchBy.SelectedItem; switch (searchType) { case ScenarioSearchType.ByScenarioName: listBoxScenarios.DataSource = Scenarios.Where( scenario => scenario.Value.Name?.ToLower(CultureInfo.InvariantCulture) .Contains(textBoxSearchScenarios.Text.ToLower(CultureInfo.InvariantCulture)) == true) .Select(scenario => scenario.Value) .ToList(); break; case ScenarioSearchType.ByScenarioId: int scenarioId; if (!int.TryParse(textBoxSearchScenarios.Text, out scenarioId)) { break; } listBoxScenarios.DataSource = Scenarios.Where( scenario => scenario.Value.Id == scenarioId).Select(scenario => scenario.Value).ToList(); break; case ScenarioSearchType.ByScenarioType: { int scenarioTypeId; if (!int.TryParse(textBoxSearchScenarios.Text, out scenarioTypeId)) { listBoxScenarios.DataSource = SearchByScenarioTypeDescription(textBoxSearchScenarios.Text); break; } ScenarioType type = (ScenarioType)scenarioTypeId; List <Scenario> scenarios = Scenarios.Where( scenario => scenario.Value.Type == type).Select(scenario => scenario.Value).ToList(); if (!scenarios.Any()) { listBoxScenarios.DataSource = SearchByScenarioTypeDescription(textBoxSearchScenarios.Text); break; } listBoxScenarios.DataSource = scenarios; break; } case ScenarioSearchType.ByScenarioStepName: listBoxScenarios.DataSource = Scenarios.Where( scenario => scenario.Value.Steps.Any( step => step.Name?.ToLower(CultureInfo.InvariantCulture) .Contains( textBoxSearchScenarios.Text.ToLower(CultureInfo.InvariantCulture)) == true)) .Select(scenario => scenario.Value) .ToList(); break; case ScenarioSearchType.ByScenarioStepDescription: listBoxScenarios.DataSource = Scenarios.Where( scenario => scenario.Value.Steps.Any( step => step.Description?.ToLower(CultureInfo.InvariantCulture) .Contains( textBoxSearchScenarios.Text.ToLower(CultureInfo.InvariantCulture)) == true)) .Select(scenario => scenario.Value) .ToList(); break; case ScenarioSearchType.UsesCriteriaTreeId: uint criteriaTreeId; if (!uint.TryParse(textBoxSearchScenarios.Text, out criteriaTreeId)) { break; } listBoxScenarios.DataSource = Scenarios.Where( scenario => scenario.Value.Steps.Where(step => step.CriteriaTree != null).Any( step => step.CriteriaTree.Id == criteriaTreeId || CriteriaTreeHasChildCriteriaTreeId(step.CriteriaTree, criteriaTreeId))) .Select(scenario => scenario.Value) .ToList(); break; case ScenarioSearchType.ByCriteriaTreeDescription: listBoxScenarios.DataSource = Scenarios.Where( scenario => scenario.Value.Steps.Where(step => step.CriteriaTree != null).Any( step => step.CriteriaTree.Description.ToLower().Contains(textBoxSearchScenarios.Text.ToLower()) || CriteriaTreeHasChildCriteriaTreeDescription(step.CriteriaTree, textBoxSearchScenarios.Text))) .Select(scenario => scenario.Value) .ToList(); break; case ScenarioSearchType.UsesCriteriaId: uint criteriaId; if (!uint.TryParse(textBoxSearchScenarios.Text, out criteriaId)) { break; } listBoxScenarios.DataSource = Scenarios.Where( scenario => scenario.Value.Steps.Where(step => step.CriteriaTree != null).Any( step => step.CriteriaTree.CriteriaId == criteriaId || CriteriaTreeHasChildCriteriaId(step.CriteriaTree, criteriaId))) .Select(scenario => scenario.Value) .ToList(); break; case ScenarioSearchType.UsesCriteriaType: { int criteriaTypeId; if (!int.TryParse(textBoxSearchScenarios.Text, out criteriaTypeId)) { listBoxScenarios.DataSource = SearchByCriteriaTypeDescription(textBoxSearchScenarios.Text); break; } CriteriaType type = (CriteriaType)criteriaTypeId; List <Scenario> scenarios = Scenarios.Where(scenario => scenario.Value.Steps.Where(step => step.CriteriaTree != null).Any(step => CriteriaTreeHasChildCriteriaType(step.CriteriaTree, type))).Select(scenario => scenario.Value).ToList(); if (!scenarios.Any()) { listBoxScenarios.DataSource = SearchByCriteriaTypeDescription(textBoxSearchScenarios.Text); break; } listBoxScenarios.DataSource = scenarios; break; } case ScenarioSearchType.HasBonusObjective: listBoxScenarios.DataSource = Scenarios.Where( scenario => scenario.Value.Steps.Any(step => (step.Flags & ScenarioStepFlag.BonusObjective) != 0)) .Select(scenario => scenario.Value) .ToList(); break; } }