/// <summary>
        /// Load information from the map file
        /// </summary>
        /// <param name="filename"></param>
        protected void LoadModelFromFile(string filename)
        {
            // Create or load the model.
            model = new GameModel();
            ZRTSCompositeViewUIFactory.Initialize(this);

            FileStream mapFile = File.OpenRead(filename);
            ScenarioXMLReader reader = new ScenarioXMLReader(mapFile);
            ScenarioComponent scenario = reader.GenerateScenarioFromXML();

            model.AddChild(scenario);
            model.PlayerInContext = (PlayerComponent)model.GetScenario().GetGameWorld().GetPlayerList().GetChildren()[0];

            foreach (PlayerComponent p in scenario.GetGameWorld().GetPlayerList().GetChildren())
            {
                foreach (PlayerComponent po in scenario.GetGameWorld().GetPlayerList().GetChildren())
                {
                    if (p != po)
                    {
                        p.EnemyList.Add(po);
                    }
                }
            }

            Console.WriteLine(ZRTSModel.Factories.BuildingFactory.Instance.getBuildingTypes()[0]);

            // Create the controller, Remove the old one if it exists.
            if (this.controller != null)
            {
                Components.Remove(this.controller);
            }

            controller = new ZRTSController(this);
            Components.Add(controller);

            // Set the mouse visible
            this.IsMouseVisible = true;

            PlayerComponent player = model.PlayerInContext;

            foreach(PlayerComponent enemy in player.EnemyList)
            {
                WinWhenAllEnemyUnitsDead win = new WinWhenAllEnemyUnitsDead(enemy, scenario);
                scenario.triggers.Add(win);
            }
            LoseWhenAllPlayersUnitsAreDead lose = new LoseWhenAllPlayersUnitsAreDead(player, scenario);
            scenario.triggers.Add(lose);
        }
        /// <summary>
        /// Loads a scenario from disc by deserializing.  Generates empty observer lists for each model component.
        /// </summary>
        public void loadScenario()
        {
            if (model.GetScenario() != null)
            {
                // TODO: Ask if the user wants to discard the current scenario.
            }

            // Displays an OpenFileDialog so the user can select a Map.
            OpenFileDialog openMapDialog = new OpenFileDialog();
            openMapDialog.InitialDirectory = Application.StartupPath + "\\Maps\\";
            openMapDialog.Filter = "Map Files|*.map";
            openMapDialog.Title = "Select a Map File";

            if (openMapDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Stream mapFile = openMapDialog.OpenFile();
                ScenarioXMLReader reader = new ScenarioXMLReader(mapFile);
                ScenarioComponent scenario = reader.GenerateScenarioFromXML();
                mapFile.Close();
                model.AddChild(scenario);

                // Clear the stack because we now have a new scenario in context.
                model.GetCommandStack().EmptyStacks();
                // TODO: Update the SaveInfo state.
            }
        }