//////////////////////////////////////////////////////////////////////////
 public bool LoadFromFile(string fileName)
 {
     DefFile = new DefinitionFile();
     if (!DefFile.ParseFile(fileName))
     {
         DefFile = null;
         return false;
     }
     else
     {
         FileName = fileName;
         return true;
     }
 }
 //////////////////////////////////////////////////////////////////////////
 private void ScanDefinition(string DefFilename)
 {
     DefinitionFile DefFile = new DefinitionFile();
     if(!DefFile.ParseFile(DefFilename))
     {
         AddLog(LogSeverity.Error, "Error parsing file '" + DefFilename + "'");
         return;
     }
     ScanDefinition(DefFilename, DefFile);
 }
        //////////////////////////////////////////////////////////////////////////
        public DocumentOpenResult OpenDocument(WmeCanvas Canvas, string FileName)
        {
            if (FileName == null)
            {
                OpenFileDialog dlg = new OpenFileDialog();
                dlg.Filter = "Windows and definition files (*.window; *.def)|*.window;*.def|Windows (*.window)|*.window|Defintion files (*.def)|*.def|All files (*.*)|*.*";
                dlg.RestoreDirectory = true;
                dlg.CheckFileExists = true;

                if (dlg.ShowDialog() != DialogResult.OK) return DocumentOpenResult.Cancel;
                else FileName = dlg.FileName;
            }

            DefinitionFile DefFile = new DefinitionFile();
            string FileType = "";

            if(DefFile.ParseFile(FileName) && DefFile.Children.Count > 0)
                FileType = DefFile.Children[0].Name.ToUpper();

            if(FileType != "WINDOW" && FileType != "INVENTORY_BOX" && FileType != "RESPONSE_BOX")
            {
                MessageBox.Show("Unsupported file type.", Form.ActiveForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return DocumentOpenResult.Cancel;
            }

            bool Ret = false;

            if (InitEngine(FileName, Canvas))
            {
                Game.AbsolutePathWarning = false;
                switch(FileType)
                {
                    case "WINDOW":
                        Window = new WUIWindow(Game);
                        Ret = Window.LoadFromFile(FileName);
                        if(Ret)
                        {
                            Game.Windows.Add(Window);
                            Game.FocusedWindow = Window;
                        }
                        break;

                    case "INVENTORY_BOX":
                        InvBox = new WAdInventoryBox(Game);
                        Ret = InvBox.LoadFromFile(FileName);
                        if(Ret && InvBox.Window != null)
                        {
                            Game.Windows.Add(InvBox.Window);
                            Game.FocusedWindow = InvBox.Window;
                        }
                        break;

                    case "RESPONSE_BOX":
                        RespBox = new WAdResponseBox(Game);
                        Ret = RespBox.LoadFromFile(FileName);
                        if (Ret && RespBox.Window != null)
                        {
                            Game.Windows.Add(RespBox.Window);
                            Game.FocusedWindow = RespBox.Window;
                        }
                        break;

                }
                Game.AbsolutePathWarning = true;
                UpdateScrollSize();

                this.FileName = FileName;
            }
            else Ret = false;

            if (!Ret) DisposeNatives();

            if (Ret) return DocumentOpenResult.Ok;
            else return DocumentOpenResult.Error;
        }