public void LoadFromFile(string fileName) { if (mProjectFileName == null || ObjectFinder.Self.GumProjectSave == null) { throw new Exception("The GumIDB must be initialized with a project file before loading any components/screens. Make sure you have a .gumx project file in your global content, or call StaticInitialize in code first."); } string oldDir = ToolsUtilities.FileManager.RelativeDirectory; string oldFrbDir = FlatRedBall.IO.FileManager.RelativeDirectory; ToolsUtilities.FileManager.RelativeDirectory = ToolsUtilities.FileManager.GetDirectory(mProjectFileName); ElementSave elementSave = null; string extension = ToolsUtilities.FileManager.GetExtension(fileName); if (extension == GumProjectSave.ComponentExtension) { elementSave = FlatRedBall.IO.FileManager.XmlDeserialize <ComponentSave>(fileName); } else if (extension == GumProjectSave.ScreenExtension) { elementSave = FlatRedBall.IO.FileManager.XmlDeserialize <ScreenSave>(fileName); } else if (extension == GumProjectSave.StandardExtension) { elementSave = FlatRedBall.IO.FileManager.XmlDeserialize <StandardElementSave>(fileName); } // Set this *after* the deserialization happens. The fileName is relative to FRB's relative directory but // contained file references won't be. FlatRedBall.IO.FileManager.RelativeDirectory = ToolsUtilities.FileManager.GetDirectory(mProjectFileName); foreach (var state in elementSave.States) { state.Initialize(); state.ParentContainer = elementSave; } foreach (var instance in elementSave.Instances) { instance.ParentContainer = elementSave; } element = elementSave.ToGraphicalUiElement(mManagers, false); element.ExplicitIVisibleParent = this; //Set the relative directory back once we are done ToolsUtilities.FileManager.RelativeDirectory = oldDir; FlatRedBall.IO.FileManager.RelativeDirectory = oldFrbDir; }
public void LoadFromFile(string fileName) { var section = FlatRedBall.Performance.Measurement.Section.GetAndStartContextAndTime("LoadFromFile " + fileName); { var sectionA = FlatRedBall.Performance.Measurement.Section.GetAndStartContextAndTime("GetElement"); if (mProjectFileName == null || ObjectFinder.Self.GumProjectSave == null) { throw new Exception("The GumIDB must be initialized with a project file before loading any components/screens. Make sure you have a .gumx project file in your global content, or call StaticInitialize in code first."); } string oldDir = ToolsUtilities.FileManager.RelativeDirectory; string oldFrbDir = FlatRedBall.IO.FileManager.RelativeDirectory; ToolsUtilities.FileManager.RelativeDirectory = ToolsUtilities.FileManager.GetDirectory(mProjectFileName); ElementSave elementSave = null; string extension = ToolsUtilities.FileManager.GetExtension(fileName); string strippedName = FlatRedBall.IO.FileManager.RemoveExtension(FlatRedBall.IO.FileManager.RemovePath(fileName)); if (extension == GumProjectSave.ComponentExtension) { elementSave = ObjectFinder.Self.GumProjectSave.Components.FirstOrDefault(item => item.Name.Equals(strippedName, StringComparison.OrdinalIgnoreCase)); } else if (extension == GumProjectSave.ScreenExtension) { elementSave = ObjectFinder.Self.GumProjectSave.Screens.FirstOrDefault(item => item.Name.Equals(strippedName, StringComparison.OrdinalIgnoreCase)); } else if (extension == GumProjectSave.StandardExtension) { elementSave = ObjectFinder.Self.GumProjectSave.StandardElements.FirstOrDefault(item => item.Name.Equals(strippedName, StringComparison.OrdinalIgnoreCase)); } // Set this *after* the deserialization happens. The fileName is relative to FRB's relative directory but // contained file references won't be. FlatRedBall.IO.FileManager.RelativeDirectory = ToolsUtilities.FileManager.GetDirectory(mProjectFileName); sectionA.EndTimeAndContext(); var sectionB = FlatRedBall.Performance.Measurement.Section.GetAndStartContextAndTime("Set ParentContainer"); // We used to only init the uncategorized states // but every state should be initialized //foreach (var state in elementSave.States) foreach (var state in elementSave.AllStates) { state.Initialize(); state.ParentContainer = elementSave; } foreach (var instance in elementSave.Instances) { instance.ParentContainer = elementSave; } sectionB.EndTimeAndContext(); var sectionC = FlatRedBall.Performance.Measurement.Section.GetAndStartContextAndTime("ToGraphicalUiElement"); element = elementSave.ToGraphicalUiElement(mManagers, false); sectionC.EndTimeAndContext(); var sectionD = FlatRedBall.Performance.Measurement.Section.GetAndStartContextAndTime("Wrap up"); element.ExplicitIVisibleParent = this; //Set the relative directory back once we are done ToolsUtilities.FileManager.RelativeDirectory = oldDir; FlatRedBall.IO.FileManager.RelativeDirectory = oldFrbDir; sectionD.EndTimeAndContext(); } section.EndTimeAndContext(); }