Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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();
        }