private void dataBindDetails() { _currentlyDataBinding = true; if (_currentlySelectedConstraint == null) { //gridPrecondDetails.Visibility = Visibility.Hidden; gridPrecondDetails.IsEnabled = false; return; } else { //gridPrecondDetails.Visibility = Visibility.Visible; gridPrecondDetails.IsEnabled = true; } //Top combobox List <string> attributeOptions = new List <string>(); attributeOptions.Add("Trait"); //Only add relationship editors if there relationships that can be edited if ((_editingMode == 0) && (Utilities.getGlobalCharacterList(_currentStoryData)[0].Relationships.Count > 0)) { attributeOptions.Add("Relationship Target Name"); attributeOptions.Add("Relationship Strength"); } else if ((_editingMode == 1) && (Utilities.getGlobalEnvironmentList(_currentStoryData)[0].Relationships.Count > 0)) { attributeOptions.Add("Relationship Target Name"); attributeOptions.Add("Relationship Strength"); } comboBoxTraitRelationship.ClearValue(ComboBox.ItemsSourceProperty); comboBoxTraitRelationship.Items.Clear(); comboBoxTraitRelationship.ItemsSource = attributeOptions; if (_currentlySelectedConstraint is TraitConstraint) { comboBoxTraitRelationship.SelectedIndex = 0; } else if ((_currentlySelectedConstraint is RelationshipConstraint) && ((RelationshipConstraint)_currentlySelectedConstraint).TargetNameMode) { comboBoxTraitRelationship.SelectedIndex = 1; } else { comboBoxTraitRelationship.SelectedIndex = 2; } //Left combobox if (comboBoxTraitRelationship.SelectedIndex == 0) //Trait { if (_editingMode == 0) { comboBoxSelectTraitRel.ItemsSource = Utilities.getGlobalCharacterList(_currentStoryData)[0].Traits; } else if (_editingMode == 1) { comboBoxSelectTraitRel.ItemsSource = Utilities.getGlobalEnvironmentList(_currentStoryData)[0].Traits; } else if (_editingMode == 2) { comboBoxSelectTraitRel.ItemsSource = _ppType.Traits; } } else if (comboBoxTraitRelationship.SelectedIndex > 0) //relationship target name or strength { if (_editingMode == 0) { // Using get GLOBAL list (includes not just static characters, but ones //created within plot fragments. This way the user doesn't need to //have created any static character lists to make plot fragment actions //that edit dynamically generated objects comboBoxSelectTraitRel.ItemsSource = Utilities.getGlobalCharacterList(_currentStoryData)[0].Relationships; } else if (_editingMode == 1) { comboBoxSelectTraitRel.ItemsSource = Utilities.getGlobalEnvironmentList(_currentStoryData)[0].Relationships; } } //comparison operation dropdown list List <string> allowedOperations = new List <string>(); allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.Equals)); allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.NotEquals)); if (_currentlySelectedConstraint.ComparisonValue.Type == TraitDataType.Number) { allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.GreaterThan)); allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.LessThan)); allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.GreaterThanEqualTo)); allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.LessThanEqualTo)); } if (_currentlySelectedConstraint.AllowedToSave) { allowedOperations.Add(Constraint.ConstraintComparisonTypeToString(ConstraintComparisonType.None)); } comboBoxComparisonOp.ItemsSource = allowedOperations; checkBoxAlwaysTrue.IsChecked = (bool)_currentlySelectedConstraint.MustAlwaysBeTrue; switch (_currentlySelectedConstraint.ConstraintType) { case ConstraintComparisonType.Equals: comboBoxComparisonOp.SelectedIndex = 0; break; case ConstraintComparisonType.NotEquals: comboBoxComparisonOp.SelectedIndex = 1; break; case ConstraintComparisonType.GreaterThan: comboBoxComparisonOp.SelectedIndex = 2; break; case ConstraintComparisonType.LessThan: comboBoxComparisonOp.SelectedIndex = 3; break; case ConstraintComparisonType.GreaterThanEqualTo: comboBoxComparisonOp.SelectedIndex = 4; break; case ConstraintComparisonType.LessThanEqualTo: comboBoxComparisonOp.SelectedIndex = 5; break; case ConstraintComparisonType.None: if (_currentlySelectedConstraint.ComparisonValue.Type == TraitDataType.Number) { comboBoxComparisonOp.SelectedIndex = 6; } else { comboBoxComparisonOp.SelectedIndex = 2; } break; } if (_currentlySelectedConstraint.ConstraintType == ConstraintComparisonType.None) { //check box and values are irrelevant for this comparison checkBoxUseVariable.IsEnabled = false; textBoxTextInput.IsEnabled = false; txtBoxNumberInput.IsEnabled = false; comboBoxTrueFalse.IsEnabled = false; comboChoiceVariables.IsEnabled = false; checkBoxUseVariable.IsChecked = false; checkBoxAlwaysTrue.IsEnabled = false; checkBoxAlwaysTrue.IsChecked = false; } else { checkBoxUseVariable.IsEnabled = true; textBoxTextInput.IsEnabled = true; txtBoxNumberInput.IsEnabled = true; comboBoxTrueFalse.IsEnabled = true; comboChoiceVariables.IsEnabled = true; checkBoxAlwaysTrue.IsEnabled = true; //checkbox checkBoxUseVariable.IsChecked = _currentlySelectedConstraint.ComparisonValue.ValueIsBoundToVariable; //value boxes if (_currentlySelectedConstraint.ComparisonValue.ValueIsBoundToVariable) { textBoxTextInput.Visibility = Visibility.Hidden; txtBoxNumberInput.Visibility = Visibility.Hidden; comboBoxTrueFalse.Visibility = Visibility.Hidden; comboChoiceVariables.Visibility = Visibility.Visible; checkBoxUseVariable.Visibility = Visibility.Visible; //Data bind variable list comboChoiceVariables.ItemsSource = _currentEntity.getPreviouslyBoundPrimitiveVariables(_currentlySelectedConstraint.ComparisonValue.Type, false, _currentlySelectedConstraint); comboChoiceVariables.ItemTemplate = this.FindResource("comboBoxDataTemplate") as DataTemplate; } else { TraitDataType type = _currentlySelectedConstraint.ComparisonValue.Type; if (type == TraitDataType.Number) { textBoxTextInput.Visibility = Visibility.Hidden; txtBoxNumberInput.Visibility = Visibility.Visible; comboBoxTrueFalse.Visibility = Visibility.Hidden; comboChoiceVariables.Visibility = Visibility.Hidden; //Only show checkbox if there are actual variables to select List <Trait> varList = _currentEntity.getPreviouslyBoundPrimitiveVariables(type, false, _currentlySelectedConstraint); if (varList.Count > 0) { checkBoxUseVariable.Visibility = Visibility.Visible; } else { checkBoxUseVariable.Visibility = Visibility.Hidden; } //Data bind Number txtBoxNumberInput.Value = (double)_currentlySelectedConstraint.ComparisonValue.LiteralValueOrBoundVarName; } else if (type == TraitDataType.Text) { textBoxTextInput.Visibility = Visibility.Visible; txtBoxNumberInput.Visibility = Visibility.Hidden; comboBoxTrueFalse.Visibility = Visibility.Hidden; comboChoiceVariables.Visibility = Visibility.Hidden; //Only show checkbox if there are actual variables to select List <Trait> varList = _currentEntity.getPreviouslyBoundPrimitiveVariables(type, false, _currentlySelectedConstraint); if (varList.Count > 0) { checkBoxUseVariable.Visibility = Visibility.Visible; } else { checkBoxUseVariable.Visibility = Visibility.Hidden; } //Data bind text textBoxTextInput.Text = (string)_currentlySelectedConstraint.ComparisonValue.LiteralValueOrBoundVarName; } else if (type == TraitDataType.TrueFalse) { textBoxTextInput.Visibility = Visibility.Hidden; txtBoxNumberInput.Visibility = Visibility.Hidden; comboBoxTrueFalse.Visibility = Visibility.Visible; comboChoiceVariables.Visibility = Visibility.Hidden; //Only show checkbox if there are actual variables to select List <Trait> varList = _currentEntity.getPreviouslyBoundPrimitiveVariables(type, false, _currentlySelectedConstraint); if (varList.Count > 0) { checkBoxUseVariable.Visibility = Visibility.Visible; } else { checkBoxUseVariable.Visibility = Visibility.Hidden; } //Data bind true/false comboBoxTrueFalse.SelectedIndex = ((bool)_currentlySelectedConstraint.ComparisonValue.LiteralValueOrBoundVarName) ? 0 : 1; } } } if (_currentlySelectedConstraint.AllowedToSave) { //bottom text and button if (_currentlySelectedConstraint.ContainsSavedVariable) { textBlockSavedStatus.Visibility = Visibility.Visible; textBlockSavedStatus.Text = "Value saved as: " + _currentlySelectedConstraint.SavedVariable.Name; btSaveValButton.Content = "Edit this Variable ..."; btSaveValButton.Visibility = Visibility.Visible; } else { textBlockSavedStatus.Visibility = Visibility.Hidden; btSaveValButton.Content = "Save this Value ..."; btSaveValButton.Visibility = Visibility.Visible; } } else { textBlockSavedStatus.Visibility = Visibility.Hidden; btSaveValButton.Visibility = Visibility.Hidden; } syncDataBoundComboBoxes(); _currentlyDataBinding = false; }