private void ConditionsTextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            if (!ConditionsTextBox.IsReadOnly)
            {
                Grid ConstructorConditionGrid =
                    UIMethods.GetUIElementChildByNumberFromTemplatedListBox(Constructor, _indexOfConstructorTextBoxEdittedByTheMoment, 0) as Grid;

                TextBox ConstructorConditionTextBox = ConstructorConditionGrid.Children[1] as TextBox;

                ConstructorConditionTextBox.BorderBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString(defaultConditionTextBoxBorderBrush));

                if (ConstructorConditionTextBox.Text == "")
                {
                    ConstructorConditionTextBox.Text = constructorConditionText;
                }

                else
                {
                    var condition = ConstructorConditionTextBox.DataContext as Core.Models.Condition;

                    if (condition.Text != ConstructorConditionTextBox.Text)
                    {
                        condition.Text = ConstructorConditionTextBox.Text;

                        _wereThereAlreadySomeChangings = true;
                    }
                }

                _indexOfConstructorTextBoxEdittedByTheMoment = -1;

                DefaultConditionTextBoxState();
            }
        }
        private void ConditionsTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (_indexOfConstructorTextBoxEdittedByTheMoment != -1)
            {
                Grid ConstructorConditionGrid =
                    UIMethods.GetUIElementChildByNumberFromTemplatedListBox(Constructor, _indexOfConstructorTextBoxEdittedByTheMoment, 0) as Grid;

                TextBox ConstructorConditionTextBox = ConstructorConditionGrid.Children[1] as TextBox;

                ConstructorConditionTextBox.Text = ConditionsTextBox.Text;
            }
        }
Exemplo n.º 3
0
        private bool AreTheFieldsFilledDifferently()
        {
            var questionsBodies = _questions.Select(qu => qu.Body.ToUpperInvariant());

            if (GeneralMethods.AreThereSameElementsInTheStringCollection(questionsBodies, out string questionElement))
            {
                UIMethods.FindCurrentTextInTextBoxesOfTheTemplatedListBox(QuestionsListBox, 1, questionElement, "По крайней мере два Ваших вопроса совпадают. Так нельзя — как же игроки будут их различать?");

                return(false);
            }

            foreach (var question in _questions)
            {
                int questionIndex = _questions.IndexOf(question);

                var answerBodies = question.Answers.Select(an => an.Body.ToUpperInvariant());

                ListBox AnswerListBox = UIMethods.GetUIElementChildByNumberFromTemplatedListBox(QuestionsListBox, questionIndex, 4) as ListBox;

                if (GeneralMethods.AreThereSameElementsInTheStringCollection(answerBodies, out string answerElement))
                {
                    UIMethods.FindCurrentTextInTextBoxesOfTheTemplatedListBox(AnswerListBox, 0, answerElement, $"В вопросе {(questionIndex + 1).ToString()} есть одинаковые ответы. Измените их либо удалите ненужные.");

                    return(false);
                }

                foreach (var answer in question.Answers)
                {
                    int answerIndex = question.Answers.IndexOf(answer);

                    var reactionBodies = answer.Effects.Select(re => re.Body.ToUpperInvariant());

                    if (GeneralMethods.AreThereSameElementsInTheStringCollection(reactionBodies, out string reactionElement))
                    {
                        ListBox ReactionListBox = UIMethods.GetUIElementChildByNumberFromTemplatedListBox(AnswerListBox, answerIndex, 3) as ListBox;

                        UIMethods.FindCurrentTextInTextBoxesOfTheTemplatedListBox(ReactionListBox, 0, reactionElement, $"В вопросе {(questionIndex + 1).ToString()} есть реакции с совпадающим текстом. Измените их либо удалите ненужные.");

                        return(false);
                    }
                }
            }

            return(true);
        }
        private bool NonNullTextResultsForConditions()
        {
            for (int i = 0; i < _conditions.Count; i++)
            {
                Grid ConditionGrid = UIMethods.GetUIElementChildByNumberFromTemplatedListBox(Constructor, i, 1) as Grid;

                ComboBox TextResultNumberComboBox = ConditionGrid.Children[1] as ComboBox;

                if (TextResultNumberComboBox.SelectedIndex == 0)
                {
                    MessageBox.Show("Каждое условие в конструкторе должно быть связано с одним текстовым результатом. Настройте все ссылки либо измените сетку условий, удалив ненужные.", "Ошибка!");

                    TextResultNumberComboBox.Focus();

                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 5
0
        private bool AreTheObligatoryFieldsFilled()
        {
            if (UIMethods.FindCurrentTextInTextBoxesOfTheTemplatedListBox(QuestionsListBox, 1, defaultQuestionText, "Текст вопроса — обязательный аттрибут. Заполните все пустые поля либо удалите ненужные вопросы."))
            {
                return(false);
            }

            else
            {
                foreach (var question in _questions)
                {
                    int questionIndex = _questions.IndexOf(question);

                    ListBox AnswerListBox = UIMethods.GetUIElementChildByNumberFromTemplatedListBox(QuestionsListBox, questionIndex, 4) as ListBox;

                    if (UIMethods.FindCurrentTextInTextBoxesOfTheTemplatedListBox(AnswerListBox, 0, defaultAnswerText, "Текст ответа — обязательный аттрибут. Заполните все пустые поля либо удалите ненужные ответы."))
                    {
                        return(false);
                    }

                    else
                    {
                        foreach (var answer in question.Answers)
                        {
                            int answerIndex = question.Answers.IndexOf(answer);

                            ListBox ReactionListBox = UIMethods.GetUIElementChildByNumberFromTemplatedListBox(AnswerListBox, answerIndex, 3) as ListBox;

                            if (UIMethods.FindCurrentTextInTextBoxesOfTheTemplatedListBox(ReactionListBox, 0, defaultEffectText, "Текст возможной реакции — обязательный аттрибут. Заполните все пустые поля либо удалите ненужные реакции."))
                            {
                                return(false);
                            }
                        }
                    }
                }
            }

            return(true);
        }
        private void DeleteButton_Click(object sender, RoutedEventArgs e)
        {
            Button DeleteButton = sender as Button;

            Result result = DeleteButton.DataContext as Result;

            for (int i = 0; i < _conditions.Count; i++)
            {
                Grid ConditionResultGrid = UIMethods.GetUIElementChildByNumberFromTemplatedListBox(Constructor, i, 1) as Grid;

                ComboBox ConditionTextResultComboBox = ConditionResultGrid.Children[1] as ComboBox;

                ConditionTextResultComboBox.SelectedIndex = 0;
            }

            _textResults.Remove(result);
            _storage.RemoveResult(result);

            DefaultPossibleTextResultsItemsSource();
            DefaultConstructorItemsSource();

            _wereThereAlreadySomeChangings = true;
        }
        private bool AllTextConditionsAreValid()
        {
            for (int i = 0; i < _conditions.Count; i++)
            {
                Grid ConditionGrid = UIMethods.GetUIElementChildByNumberFromTemplatedListBox(Constructor, i, 0) as Grid;

                TextBox TextConditionTextBox = ConditionGrid.Children[1] as TextBox;

                var condition = TextConditionTextBox.DataContext as Core.Models.Condition;

                int index = _conditions.IndexOf(condition);

                if (!(index == _conditions.Count - 1 && _lastConstructorConditionContinuingIsElse))
                {
                    if (TextConditionTextBox.Text == constructorConditionText)
                    {
                        MessageBox.Show("Поле с условием не может оставаться пустым. Заполните его или переформатируйте конструктор, чтобы избавиться от ненужных карточек.", "Ошибка!");

                        TextConditionTextBox.Focus();

                        return(false);
                    }

                    else
                    {
                        TextConditionTextBox.Text = (GeneralMethods.MathConditionWithValidSpaces(TextConditionTextBox.Text)).ToUpperInvariant();
                        condition.Text            = TextConditionTextBox.Text;

                        var stringCopyWithoutBrackets = TextConditionTextBox.Text
                                                        .Replace("(", "")
                                                        .Replace(")", "");

                        var elements = stringCopyWithoutBrackets.Split(' ');

                        if (elements.Count() % 4 != 3)
                        {
                            MessageBox.Show(conditionEnterpretationError, "Ошибка!");

                            TextConditionTextBox.Focus();

                            return(false);
                        }

                        else
                        {
                            for (int j = 1; j < elements.Length; j += 4)
                            {
                                if (GeneralMethods.MathOperatorsContains(elements[j]) == false)
                                {
                                    MessageBox.Show(conditionEnterpretationError, "Ошибка!");

                                    TextConditionTextBox.Focus();

                                    return(false);
                                }
                            }

                            for (int j = 3; j < elements.Length; j += 4)
                            {
                                if (GeneralMethods.LogicalOperatorsContains(elements[j]) == false)
                                {
                                    MessageBox.Show(conditionEnterpretationError, "Ошибка!");

                                    TextConditionTextBox.Focus();

                                    return(false);
                                }
                            }

                            for (int j = 0; j < elements.Length; j += 4)
                            {
                                if (int.TryParse(elements[j], out int t) && int.TryParse(elements[j + 2], out t))
                                {
                                    MessageBox.Show("Оператор не может связывать два числа. Пожалуйста, внесите параметры характеристик во все условия, в которых они отсутствуют.", "Ошибка!");

                                    TextConditionTextBox.Focus();

                                    return(false);
                                }
                            }

                            for (int j = 0; j < elements.Length; j += 4)
                            {
                                for (int k = 0; k <= 2; k += 2)
                                {
                                    if (!int.TryParse(elements[j + k], out int t) && !_characteristicDictionary.Values.Contains(elements[j + k].ToUpperInvariant()))
                                    {
                                        MessageBox.Show($"Название переменной '{elements[j + k]}' в выражении — невалидное. Пожалуйста, проверьте, что это и все другие названия переменных согласуются с приведенными в верхней части окна программными сокращениями и вслед за этим повторите попытку.", "Ошибка!");

                                        TextConditionTextBox.Focus();

                                        return(false);
                                    }
                                }
                            }

                            for (int j = 0; j < elements.Length; j += 4)
                            {
                                if (elements[j] == elements[j + 2])
                                {
                                    MessageBox.Show($"Переменная '{elements[j]}' сравнивается сама с собой. Подобные сравнения не несут смысловой нагрузки, поскольку возвращают всегда одно и то же значение (либо true, либо false — зависит от оператора). Пожалуйста, избегайте таких конструкций.", "Ошибка!");

                                    TextConditionTextBox.Focus();

                                    return(false);
                                }
                            }
                        }
                    }
                }
            }

            return(true);
        }