private GraphicalUiElement CreateRepresentationForInstance(InstanceSave instance, InstanceSave parentInstance, List <ElementWithState> elementStack, GraphicalUiElement container) { IPositionedSizedObject newIpso = null; GraphicalUiElement graphicalElement = newIpso as GraphicalUiElement; var baseElement = ObjectFinder.Self.GetElementSave(instance.BaseType); string type = instance.BaseType; var renderable = PluginManager.Self.CreateRenderableForType(type); if (renderable != null) { graphicalElement = new GraphicalUiElement(null, container); ElementSave instanceBase = ObjectFinder.Self.GetElementSave(instance.BaseType); graphicalElement.SetContainedObject(renderable); graphicalElement.Tag = instance; graphicalElement.Component.Name = instance.Name; graphicalElement.Component.Tag = instance; } else if (type == "Sprite" || type == "ColoredRectangle" || type == "NineSlice" || type == "Text" || type == "Circle" || type == "Rectangle") { graphicalElement = new GraphicalUiElement(null, container); ElementSave instanceBase = ObjectFinder.Self.GetElementSave(type); graphicalElement.CreateGraphicalComponent(instanceBase, null); graphicalElement.Tag = instance; graphicalElement.Component.Name = instance.Name; graphicalElement.Component.Tag = instance; if (type == "Text") { (graphicalElement.RenderableComponent as Text).RenderBoundary = ProjectManager.Self.GeneralSettingsFile.ShowTextOutlines; if (SelectedState.Self.SelectedStateSave != null) { FontManager.Self.ReactToFontValueSet(instance); } } } else if (instance.IsComponent()) { newIpso = CreateRepresentationsForInstanceFromComponent(instance, elementStack, parentInstance, container, ObjectFinder.Self.GetComponent(instance.BaseType)); } else { // Make sure the base type is valid. // This could be null if a base type changed // its name but the derived wasn't updated, or // if someone screwed with the XML files. Who knows... if (baseElement != null) { graphicalElement = new GraphicalUiElement(null, container); CreateRectangleFor(instance, elementStack, graphicalElement); } } if (newIpso != null && (newIpso is GraphicalUiElement) == false) { graphicalElement = new GraphicalUiElement(newIpso as IRenderable, container); } else if (newIpso is GraphicalUiElement) { graphicalElement = newIpso as GraphicalUiElement; } if (graphicalElement != null) { if (baseElement != null) { graphicalElement.ElementSave = baseElement; foreach (var exposedVariable in baseElement.DefaultState.Variables.Where(item => !string.IsNullOrEmpty(item.ExposedAsName))) { graphicalElement.AddExposedVariable(exposedVariable.ExposedAsName, exposedVariable.Name); } } var selectedState = SelectedState.Self.SelectedStateSave; if (selectedState == null) { selectedState = SelectedState.Self.SelectedElement.DefaultState; } RecursiveVariableFinder rvf = new DataTypes.RecursiveVariableFinder(selectedState); string guide = rvf.GetValue <string>("Guide"); string parent = rvf.GetValue <string>(instance.Name + ".Parent"); SetGuideParent(container, graphicalElement, guide); if (baseElement != null) { graphicalElement.SetStatesAndCategoriesRecursively(baseElement); // for performance reasons, we'll suspend the layout here: graphicalElement.SuspendLayout(); { graphicalElement.SetVariablesRecursively(baseElement, baseElement.DefaultState); } graphicalElement.ResumeLayout(); } } return(graphicalElement); }