public RelationshipConstraint(TraitConstraint cons, StoryData world) :
     base(cons.ParentPlotFragmentId, cons.ParentPreconditionStatementId, cons.AllowedToSave, cons.MatchingEntityTypeId, world)
 {
     _constraintType  = cons.ConstraintType;
     _comparisonValue = (Parameter)cons.ComparisonValue.Clone();
     _saveAttribute   = cons.ContainsSavedVariable;
     _savedVariable   = (Trait)cons.SavedVariable.Clone();
 }
 public RelationshipConstraint(TraitConstraint cons, StoryData world)
     : base(cons.ParentPlotFragmentId, cons.ParentPreconditionStatementId, cons.AllowedToSave, cons.MatchingEntityTypeId, world)
 {
     _constraintType = cons.ConstraintType;
     _comparisonValue = (Parameter)cons.ComparisonValue.Clone();
     _saveAttribute = cons.ContainsSavedVariable;
     _savedVariable = (Trait)cons.SavedVariable.Clone();
 }
        private void btNew_Click(object sender, RoutedEventArgs e)
        {
            TraitConstraint newCons = null;

            saveData();

            if (_editingMode == 0) //characters
            {
                newCons = new TraitConstraint(_currentEntity.ParentPlotFragmentId,
                                              _currentEntity.Id,
                                              _currentEntity.ObjectExists,
                                              _currentStoryData.CharTypeId,
                                              _currentStoryData);

                List <Character> globalChars = Utilities.getGlobalCharacterList(_currentStoryData);
                newCons.ComparisonValue.Name = globalChars[0].Traits[0].Name;
                newCons.ComparisonValue.Type = globalChars[0].Traits[0].Type;
                newCons.SavedVariable.Type   = globalChars[0].Traits[0].Type;
            }
            else if (_editingMode == 1) //environments
            {
                newCons = new TraitConstraint(_currentEntity.ParentPlotFragmentId,
                                              _currentEntity.Id,
                                              _currentEntity.ObjectExists,
                                              _currentStoryData.EnvTypeId,
                                              _currentStoryData);
                List <Environment> globalEnv = Utilities.getGlobalEnvironmentList(_currentStoryData);
                newCons.ComparisonValue.Name = globalEnv[0].Traits[0].Name;
                newCons.ComparisonValue.Type = globalEnv[0].Traits[0].Type;
                newCons.SavedVariable.Type   = globalEnv[0].Traits[0].Type;
            }
            else
            {
                newCons = new TraitConstraint(_currentEntity.ParentPlotFragmentId,
                                              _currentEntity.Id,
                                              _currentEntity.ObjectExists,
                                              _ppType.Id,
                                              _currentStoryData);

                newCons.ComparisonValue.Name = _ppType.Traits[0].Name;
                newCons.ComparisonValue.Type = _ppType.Traits[0].Type;
                newCons.SavedVariable.Type   = _ppType.Traits[0].Type;
            }


            _currentEntity.Constraints.Add(newCons);



            clearHeaderElements();
            dataBindHeaderItems();

            constraintDataGrid.SelectedItem = _currentEntity.Constraints[_currentEntity.Constraints.Count - 1];
            constraintDataGrid_MouseUp(null, null);
        }
        private void comboBoxTraitRelationship_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (_currentlyDataBinding) return;

            if (comboBoxTraitRelationship.SelectedIndex < 0) { return; }

            //First check for no changes

            if (
                (_currentlySelectedConstraint is TraitConstraint) &&
                (comboBoxTraitRelationship.SelectedIndex == 0)
                )
            {
                return;
            }
            else if (
                (_currentlySelectedConstraint is RelationshipConstraint) &&
                (((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode == true) &&
                (comboBoxTraitRelationship.SelectedIndex == 1)
                )
            {
                return;
            }
            else if (
                (_currentlySelectedConstraint is RelationshipConstraint) &&
                (((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode == false) &&
                (comboBoxTraitRelationship.SelectedIndex == 2)
                )
            {
                return;
            }

               if(comboBoxTraitRelationship.SelectedIndex == 0) //Trait type constraint
               {
                if (_currentlySelectedConstraint is RelationshipConstraint)
                {
                    //convert relationship constraint to trait constraint
                    TraitConstraint newCons = new TraitConstraint((RelationshipConstraint)_currentlySelectedConstraint, _currentStoryData);
                    newCons.ComparisonValue.ValueIsBoundToVariable = false;

                    if(_editingMode == 0) //characters
                    {
                        List<Character> globalChars = Utilities.getGlobalCharacterList(_currentStoryData);
                        newCons.ComparisonValue.Name = globalChars[0].Traits[0].Name;
                        newCons.ComparisonValue.Type = globalChars[0].Traits[0].Type;
                        newCons.SavedVariable.Type = globalChars[0].Traits[0].Type;
                    }
                    else if(_editingMode == 1) //environments
                    {
                        List<Environment> globalEnv = Utilities.getGlobalEnvironmentList(_currentStoryData);
                        newCons.ComparisonValue.Name = globalEnv[0].Traits[0].Name;
                        newCons.ComparisonValue.Type = globalEnv[0].Traits[0].Type;
                        newCons.SavedVariable.Type = globalEnv[0].Traits[0].Type;
                    }
                    else
                    {
                        newCons.ComparisonValue.Name = _ppType.Traits[0].Name;
                        newCons.ComparisonValue.Type = _ppType.Traits[0].Type;
                        newCons.SavedVariable.Type = _ppType.Traits[0].Type;
                    }

                    // Replace constraint in the constraint list
                    _currentEntity.Constraints[
                        _currentEntity.Constraints.IndexOf(_currentlySelectedConstraint)]
                         = newCons;
                    clearDataElements();
                    dataBind();
                    constraintDataGrid.SelectedItem = newCons;
                    constraintDataGrid_MouseUp(null, null);

                }
               }
               else if ((comboBoxTraitRelationship.SelectedIndex == 1) || (comboBoxTraitRelationship.SelectedIndex == 2)) //Relationship type constraint
               {
               if (_currentlySelectedConstraint is TraitConstraint)
               {
                   //convert trait constraint to rel constraint
                    RelationshipConstraint newCons = new RelationshipConstraint((TraitConstraint)_currentlySelectedConstraint, _currentStoryData);
                    if(_editingMode == 0) //characters
                    {
                        List<Character> globalChars = Utilities.getGlobalCharacterList(_currentStoryData);
                        newCons.ComparisonValue.Name = globalChars[0].Relationships[0].Name;
                        newCons.ComparisonValue.ValueIsBoundToVariable = false;
                        if(comboBoxTraitRelationship.SelectedIndex == 1)
                        {
                            newCons.ComparisonValue.Type = TraitDataType.Text;
                            newCons.SavedVariable.Type = TraitDataType.Text;
                            newCons.TargetNameMode = true; // relationship target name

                        }
                        else
                        {
                            newCons.ComparisonValue.Type = TraitDataType.Number;
                            newCons.SavedVariable.Type = TraitDataType.Number;
                            newCons.TargetNameMode = false; // relationship strength
                        }
                    }
                    else if(_editingMode == 1) //environments
                    {
                        List<Environment> globalEnv = Utilities.getGlobalEnvironmentList(_currentStoryData);
                        newCons.ComparisonValue.Name = globalEnv[0].Relationships[0].Name;
                        newCons.ComparisonValue.ValueIsBoundToVariable = false;
                        if(comboBoxTraitRelationship.SelectedIndex == 1)
                        {
                            newCons.ComparisonValue.Type = TraitDataType.Text;
                            newCons.SavedVariable.Type = TraitDataType.Text;
                            newCons.TargetNameMode = true; // relationship target name

                        }
                        else
                        {

                            newCons.ComparisonValue.Type = TraitDataType.Number;
                            newCons.SavedVariable.Type = TraitDataType.Number;
                            newCons.TargetNameMode = false; // relationship strength
                        }
                    }

                    // Replace constraint in the constraint list
                    _currentEntity.Constraints[
                        _currentEntity.Constraints.IndexOf(_currentlySelectedConstraint)]
                         = newCons;
                    clearDataElements();
                    dataBind();
                    constraintDataGrid.SelectedItem = newCons;
                    constraintDataGrid_MouseUp(null, null);

               }
               else if (
                        ((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode &&
                        (comboBoxTraitRelationship.SelectedIndex == 2)
                        )
               {
                   //Convert relationship target name constraint to strength constraint
                   ((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode = false;
                   ((RelationshipConstraint)_currentlySelectedConstraint).ComparisonValue.Type = TraitDataType.Number;
                   ((RelationshipConstraint)_currentlySelectedConstraint).SavedVariable.Type = TraitDataType.Number;
                   ((RelationshipConstraint)_currentlySelectedConstraint).ComparisonValue.ValueIsBoundToVariable = false;
                   //((RelationshipConstraint)_currentlySelectedConstraint).ContainsSavedVariable = false;
                   //((RelationshipConstraint)_currentlySelectedConstraint).ConstraintType = ConstraintComparisonType.Equals;
                   //((RelationshipConstraint)_currentlySelectedConstraint).SavedVariable.Name = "";
                   clearDataElements();
                   dataBind();
                   constraintDataGrid.SelectedItem = _currentlySelectedConstraint;
                   constraintDataGrid_MouseUp(null, null);
               }
               else if (
                        ((!(((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode) )) &&
                        (comboBoxTraitRelationship.SelectedIndex == 1)
                        )
               {
                   //Convert relationship strength constraint to target name constraint
                   ((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode = true;
                   ((RelationshipConstraint)_currentlySelectedConstraint).ComparisonValue.Type = TraitDataType.Text;
                   ((RelationshipConstraint)_currentlySelectedConstraint).SavedVariable.Type = TraitDataType.Text;
                   //((RelationshipConstraint)_currentlySelectedConstraint).ContainsSavedVariable = false;
                   ((RelationshipConstraint)_currentlySelectedConstraint).ComparisonValue.ValueIsBoundToVariable = false;
                   //((RelationshipConstraint)_currentlySelectedConstraint).ConstraintType = ConstraintComparisonType.Equals;
                   //((RelationshipConstraint)_currentlySelectedConstraint).SavedVariable.Name = "";
                   clearDataElements();
                   dataBind();
                   constraintDataGrid.SelectedItem = _currentlySelectedConstraint;
                   constraintDataGrid_MouseUp(null, null);
               }

               }
        }
        private void btNew_Click(object sender, RoutedEventArgs e)
        {
            TraitConstraint newCons = null;

            saveData();

            if(_editingMode == 0) //characters
            {
                newCons = new TraitConstraint(_currentEntity.ParentPlotFragmentId,
                    _currentEntity.Id,
                    _currentEntity.ObjectExists,
                    _currentStoryData.CharTypeId,
                    _currentStoryData);

                List<Character> globalChars = Utilities.getGlobalCharacterList(_currentStoryData);
                newCons.ComparisonValue.Name = globalChars[0].Traits[0].Name;
                newCons.ComparisonValue.Type = globalChars[0].Traits[0].Type;
                newCons.SavedVariable.Type = globalChars[0].Traits[0].Type;
            }
            else if(_editingMode == 1) //environments
            {
                newCons = new TraitConstraint(_currentEntity.ParentPlotFragmentId,
                    _currentEntity.Id,
                    _currentEntity.ObjectExists,
                    _currentStoryData.EnvTypeId,
                    _currentStoryData);
                List<Environment> globalEnv = Utilities.getGlobalEnvironmentList(_currentStoryData);
                newCons.ComparisonValue.Name = globalEnv[0].Traits[0].Name;
                newCons.ComparisonValue.Type = globalEnv[0].Traits[0].Type;
                newCons.SavedVariable.Type = globalEnv[0].Traits[0].Type;
            }
            else
            {

                newCons = new TraitConstraint(_currentEntity.ParentPlotFragmentId,
                    _currentEntity.Id,
                    _currentEntity.ObjectExists,
                    _ppType.Id,
                    _currentStoryData);

                newCons.ComparisonValue.Name = _ppType.Traits[0].Name;
                newCons.ComparisonValue.Type = _ppType.Traits[0].Type;
                newCons.SavedVariable.Type = _ppType.Traits[0].Type;
            }

            _currentEntity.Constraints.Add(newCons);

            clearHeaderElements();
            dataBindHeaderItems();

            constraintDataGrid.SelectedItem = _currentEntity.Constraints[_currentEntity.Constraints.Count - 1];
            constraintDataGrid_MouseUp(null, null);
        }
        private void comboBoxTraitRelationship_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (_currentlyDataBinding)
            {
                return;
            }

            if (comboBoxTraitRelationship.SelectedIndex < 0)
            {
                return;
            }


            //First check for no changes

            if (
                (_currentlySelectedConstraint is TraitConstraint) &&
                (comboBoxTraitRelationship.SelectedIndex == 0)
                )
            {
                return;
            }
            else if (
                (_currentlySelectedConstraint is RelationshipConstraint) &&
                (((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode == true) &&
                (comboBoxTraitRelationship.SelectedIndex == 1)
                )
            {
                return;
            }
            else if (
                (_currentlySelectedConstraint is RelationshipConstraint) &&
                (((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode == false) &&
                (comboBoxTraitRelationship.SelectedIndex == 2)
                )
            {
                return;
            }



            if (comboBoxTraitRelationship.SelectedIndex == 0) //Trait type constraint
            {
                if (_currentlySelectedConstraint is RelationshipConstraint)
                {
                    //convert relationship constraint to trait constraint
                    TraitConstraint newCons = new TraitConstraint((RelationshipConstraint)_currentlySelectedConstraint, _currentStoryData);
                    newCons.ComparisonValue.ValueIsBoundToVariable = false;

                    if (_editingMode == 0) //characters
                    {
                        List <Character> globalChars = Utilities.getGlobalCharacterList(_currentStoryData);
                        newCons.ComparisonValue.Name = globalChars[0].Traits[0].Name;
                        newCons.ComparisonValue.Type = globalChars[0].Traits[0].Type;
                        newCons.SavedVariable.Type   = globalChars[0].Traits[0].Type;
                    }
                    else if (_editingMode == 1) //environments
                    {
                        List <Environment> globalEnv = Utilities.getGlobalEnvironmentList(_currentStoryData);
                        newCons.ComparisonValue.Name = globalEnv[0].Traits[0].Name;
                        newCons.ComparisonValue.Type = globalEnv[0].Traits[0].Type;
                        newCons.SavedVariable.Type   = globalEnv[0].Traits[0].Type;
                    }
                    else
                    {
                        newCons.ComparisonValue.Name = _ppType.Traits[0].Name;
                        newCons.ComparisonValue.Type = _ppType.Traits[0].Type;
                        newCons.SavedVariable.Type   = _ppType.Traits[0].Type;
                    }

                    // Replace constraint in the constraint list
                    _currentEntity.Constraints[
                        _currentEntity.Constraints.IndexOf(_currentlySelectedConstraint)]
                        = newCons;
                    clearDataElements();
                    dataBind();
                    constraintDataGrid.SelectedItem = newCons;
                    constraintDataGrid_MouseUp(null, null);
                }
            }
            else if ((comboBoxTraitRelationship.SelectedIndex == 1) || (comboBoxTraitRelationship.SelectedIndex == 2)) //Relationship type constraint
            {
                if (_currentlySelectedConstraint is TraitConstraint)
                {
                    //convert trait constraint to rel constraint
                    RelationshipConstraint newCons = new RelationshipConstraint((TraitConstraint)_currentlySelectedConstraint, _currentStoryData);
                    if (_editingMode == 0) //characters
                    {
                        List <Character> globalChars = Utilities.getGlobalCharacterList(_currentStoryData);
                        newCons.ComparisonValue.Name = globalChars[0].Relationships[0].Name;
                        newCons.ComparisonValue.ValueIsBoundToVariable = false;
                        if (comboBoxTraitRelationship.SelectedIndex == 1)
                        {
                            newCons.ComparisonValue.Type = TraitDataType.Text;
                            newCons.SavedVariable.Type   = TraitDataType.Text;
                            newCons.TargetNameMode       = true; // relationship target name
                        }
                        else
                        {
                            newCons.ComparisonValue.Type = TraitDataType.Number;
                            newCons.SavedVariable.Type   = TraitDataType.Number;
                            newCons.TargetNameMode       = false; // relationship strength
                        }
                    }
                    else if (_editingMode == 1) //environments
                    {
                        List <Environment> globalEnv = Utilities.getGlobalEnvironmentList(_currentStoryData);
                        newCons.ComparisonValue.Name = globalEnv[0].Relationships[0].Name;
                        newCons.ComparisonValue.ValueIsBoundToVariable = false;
                        if (comboBoxTraitRelationship.SelectedIndex == 1)
                        {
                            newCons.ComparisonValue.Type = TraitDataType.Text;
                            newCons.SavedVariable.Type   = TraitDataType.Text;
                            newCons.TargetNameMode       = true; // relationship target name
                        }
                        else
                        {
                            newCons.ComparisonValue.Type = TraitDataType.Number;
                            newCons.SavedVariable.Type   = TraitDataType.Number;
                            newCons.TargetNameMode       = false; // relationship strength
                        }
                    }


                    // Replace constraint in the constraint list
                    _currentEntity.Constraints[
                        _currentEntity.Constraints.IndexOf(_currentlySelectedConstraint)]
                        = newCons;
                    clearDataElements();
                    dataBind();
                    constraintDataGrid.SelectedItem = newCons;
                    constraintDataGrid_MouseUp(null, null);
                }
                else if (
                    ((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode &&
                    (comboBoxTraitRelationship.SelectedIndex == 2)
                    )
                {
                    //Convert relationship target name constraint to strength constraint
                    ((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode       = false;
                    ((RelationshipConstraint)_currentlySelectedConstraint).ComparisonValue.Type = TraitDataType.Number;
                    ((RelationshipConstraint)_currentlySelectedConstraint).SavedVariable.Type   = TraitDataType.Number;
                    ((RelationshipConstraint)_currentlySelectedConstraint).ComparisonValue.ValueIsBoundToVariable = false;
                    //((RelationshipConstraint)_currentlySelectedConstraint).ContainsSavedVariable = false;
                    //((RelationshipConstraint)_currentlySelectedConstraint).ConstraintType = ConstraintComparisonType.Equals;
                    //((RelationshipConstraint)_currentlySelectedConstraint).SavedVariable.Name = "";
                    clearDataElements();
                    dataBind();
                    constraintDataGrid.SelectedItem = _currentlySelectedConstraint;
                    constraintDataGrid_MouseUp(null, null);
                }
                else if (
                    ((!(((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode))) &&
                    (comboBoxTraitRelationship.SelectedIndex == 1)
                    )
                {
                    //Convert relationship strength constraint to target name constraint
                    ((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode       = true;
                    ((RelationshipConstraint)_currentlySelectedConstraint).ComparisonValue.Type = TraitDataType.Text;
                    ((RelationshipConstraint)_currentlySelectedConstraint).SavedVariable.Type   = TraitDataType.Text;
                    //((RelationshipConstraint)_currentlySelectedConstraint).ContainsSavedVariable = false;
                    ((RelationshipConstraint)_currentlySelectedConstraint).ComparisonValue.ValueIsBoundToVariable = false;
                    //((RelationshipConstraint)_currentlySelectedConstraint).ConstraintType = ConstraintComparisonType.Equals;
                    //((RelationshipConstraint)_currentlySelectedConstraint).SavedVariable.Name = "";
                    clearDataElements();
                    dataBind();
                    constraintDataGrid.SelectedItem = _currentlySelectedConstraint;
                    constraintDataGrid_MouseUp(null, null);
                }
            }
        }