private void HandleAddStateKeyframe(object sender, EventArgs e) { string whyIsntValid = GetWhyAddingTimedStateIsInvalid(); if (!string.IsNullOrEmpty(whyIsntValid)) { MessageBox.Show(whyIsntValid); } else { ListBoxMessageBox lbmb = new ListBoxMessageBox(); lbmb.RequiresSelection = true; lbmb.Message = "Select a state"; var element = SelectedState.Self.SelectedElement; foreach (var state in element.States) { lbmb.Items.Add(state.Name); } foreach (var category in element.Categories) { foreach (var state in category.States) { lbmb.Items.Add(category.Name + "/" + state.Name); } } var dialogResult = lbmb.ShowDialog(); if (dialogResult.HasValue && dialogResult.Value) { var item = lbmb.SelectedItem; var newVm = new AnimatedKeyframeViewModel() { StateName = (string)item, // User just selected the state, so it better be valid! HasValidState = true, InterpolationType = FlatRedBall.Glue.StateInterpolation.InterpolationType.Linear, Easing = FlatRedBall.Glue.StateInterpolation.Easing.Out }; newVm.AvailableStates = this.AvailableStates; newVm.PropertyChanged += HandleAnimatedKeyframePropertyChanged; if (mCurrentViewModel.SelectedAnimation.SelectedKeyframe != null) { // put this after the current animation newVm.Time = mCurrentViewModel.SelectedAnimation.SelectedKeyframe.Time + 1f; } else if (mCurrentViewModel.SelectedAnimation.Keyframes.Count != 0) { newVm.Time = mCurrentViewModel.SelectedAnimation.Keyframes.Last().Time + 1f; } mCurrentViewModel.SelectedAnimation.Keyframes.Add(newVm); mCurrentViewModel.SelectedAnimation.Keyframes.BubbleSort(); mCurrentViewModel.SelectedAnimation.SelectedKeyframe = newVm; } } }
public void DisplayReferencesTo(ElementSave element) { var elementName = element.Name; List <object> references = new List <object>(); foreach (var screen in ProjectState.Self.GumProjectSave.Screens) { foreach (var instanceInScreen in screen.Instances) { if (instanceInScreen.BaseType == elementName) { references.Add(instanceInScreen); } } foreach (var variable in screen.DefaultState.Variables.Where(item => item.GetRootName() == "Contained Type")) { if (variable.Value as string == elementName) { references.Add(variable); } } } foreach (var component in ProjectState.Self.GumProjectSave.Components) { if (component.BaseType == elementName) { references.Add(component); } foreach (var instanceInScreen in component.Instances) { if (instanceInScreen.BaseType == elementName) { references.Add(instanceInScreen); } } foreach (var variable in component.DefaultState.Variables.Where(item => item.GetRootName() == "Contained Type")) { if (variable.Value as string == elementName) { references.Add(variable); } } } if (references.Count > 0) { //var stringBuilder = new StringBuilder(); //stringBuilder.AppendLine($"The following objects reference {element}"); //foreach(var reference in references) //{ // stringBuilder.AppendLine(reference.ToString()); //} //GumCommands.Self.GuiCommands.ShowMessage(stringBuilder.ToString()); ListBoxMessageBox lbmb = new ListBoxMessageBox(); lbmb.RequiresSelection = true; lbmb.Message = $"The following objects reference {element}"; lbmb.ItemSelected += (not, used) => { var selectedItem = lbmb.SelectedItem; if (selectedItem is InstanceSave instance) { SelectedState.Self.SelectedInstance = instance; } else if (selectedItem is ElementSave selectedElement) { SelectedState.Self.SelectedElement = selectedElement; } else if (selectedItem is VariableSave variable) { ElementSave foundElement = ObjectFinder.Self.GumProjectSave.Screens .FirstOrDefault(item => item.DefaultState.Variables.Contains(variable)); if (foundElement == null) { foundElement = ObjectFinder.Self.GumProjectSave.Components .FirstOrDefault(item => item.DefaultState.Variables.Contains(variable)); } if (foundElement != null) { // what's the instance? var instanceWithVariable = foundElement.GetInstance(variable.SourceObject); if (instanceWithVariable != null) { SelectedState.Self.SelectedInstance = instanceWithVariable; } } } }; foreach (var reference in references) { lbmb.Items.Add(reference); } lbmb.HideCancelNoDialog(); lbmb.Show(); } else { GumCommands.Self.GuiCommands.ShowMessage($"{element} is not referenced by any other Screen/Component"); } }