public void OpenFile(DialogItem file, TreeNode nodePressed)
        {
            //If it is already open, focus it
            if (file.OpenFileData != null)
            {
                if (nodePressed == file.OpenFileData.GUINode)
                {
                    tabStrip.SelectedItem = file.OpenFileData.TabPage;
                    file.OpenFileData.DialogControl.Focus();
                    return;
                }
                if (nodePressed == file.OpenFileData.CodeGUINode)
                {
                    tabStrip.SelectedItem = file.OpenFileData.CodeTabPage;
                    file.OpenFileData.CodeEditor.Focus();
                    return;
                }
                if (nodePressed == file.OpenFileData.DesignerGUINode)
                {
                    tabStrip.SelectedItem = file.OpenFileData.DesignerTabPage;
                    file.OpenFileData.DesignerEditor.Focus();
                    return;
                }
            }
            else
            {

                file.OpenFileData = DialogData.Load(file.FullName);
                file.OpenFileData.DialogItem = file;
            }

            //Otherwise make a new tab
            if (file.GUINode == nodePressed)
            {
                //Show graphical designer

                file.OpenFileData.DialogControl = new DialogCreatorControl(file.OpenFileData);
                file.OpenFileData.DialogControl.Dock = DockStyle.Fill;

                file.OpenFileData.DialogControl.Tag = file.OpenFileData;

                file.OpenFileData.TabPage = new FATabStripItem(file.Text, null);
                file.OpenFileData.TabPage.Margin = new Padding(0);
                file.OpenFileData.TabPage.Padding = new Padding(0);
                file.OpenFileData.TabPage.Tag = file.OpenFileData;
                file.OpenFileData.GUINode = nodePressed;

                file.OpenFileData.TabPage.Controls.Add(file.OpenFileData.DialogControl);
                tabStrip.AddTab(file.OpenFileData.TabPage);
                //openFiles.Add(file.OpenFileData);

                //file.OpenFile.Editor.OnTextEdited += MyEditor_TextEdited;

                tabStrip.SelectedItem = file.OpenFileData.TabPage;
                tabStrip_TabStripItemSelectionChanged(null);
                file.OpenFileData.DialogControl.Focus();
            }
            else if (file.CodeGUINode == nodePressed)
            {
                bool editorReadOnly = Options.Editor.ReadOnlyOutput &&
                                  file.IsDecendantOf(ProjectProperties.CurrentProjectPropperties.OutputFolder);
                //Otherwise make a new tab
                file.OpenFileData.CodeEditor = new MyEditor(this, editorReadOnly);
                //If we have another editor, get font styles from that (to save memmory)
                if (openFiles.Count > 0)
                    file.OpenFileData.CodeEditor.SetFontScheme(openFiles[0].Editor.GetFontScheme());
                else
                {
                    file.OpenFileData.CodeEditor.AddFontStyle(GalaxyKeywords.InMethodKeywords.mod, GalaxyKeywords.InMethodKeywords.words);
                    file.OpenFileData.CodeEditor.AddFontStyle(GalaxyKeywords.OutMethodKeywords.mod, GalaxyKeywords.OutMethodKeywords.words);
                    file.OpenFileData.CodeEditor.AddFontStyle(GalaxyKeywords.SystemExpressions.mod, GalaxyKeywords.SystemExpressions.words);
                    file.OpenFileData.CodeEditor.AddFontStyle(GalaxyKeywords.InitializerKeywords.mod, GalaxyKeywords.InitializerKeywords.words);
                    //file.OpenFile.Editor.AddFontStyle(GalaxyKeywords.TriggerKeywords.mod, GalaxyKeywords.TriggerKeywords.words);
                    file.OpenFileData.CodeEditor.AddFontStyle(GalaxyKeywords.Primitives.mod, GalaxyKeywords.Primitives.words);
                }
                file.OpenFileData.CodeEditor.Dock = DockStyle.Fill;

                file.OpenFileData.CodeEditor.Tag = file.OpenFileData;

                file.OpenFileData.CodeTabPage = new FATabStripItem(file.Text.Substring(0, file.Text.LastIndexOf(".Dialog")) + ".galaxy++", null);
                file.OpenFileData.CodeTabPage.Margin = new Padding(0);
                file.OpenFileData.CodeTabPage.Padding = new Padding(0);
                file.OpenFileData.CodeTabPage.Tag = file.OpenFileData;
                file.OpenFileData.CodeGUINode = nodePressed;

                file.OpenFileData.CodeEditor.Text = file.OpenFileData.Code;
                //file.OpenFile.Editor.SetHiddenBlocks(file.ClosedBlocks);

                file.OpenFileData.CodeTabPage.Controls.Add(file.OpenFileData.CodeEditor);
                tabStrip.AddTab(file.OpenFileData.CodeTabPage);
                //openFiles.Add(file.OpenFileData);

                file.OpenFileData.CodeEditor.OnTextEdited += MyEditor_TextEdited;

                tabStrip.SelectedItem = file.OpenFileData.CodeTabPage;
                tabStrip_TabStripItemSelectionChanged(null);
                file.OpenFileData.CodeEditor.Focus();
            }
            else if (file.DesignerGUINode == nodePressed)
            {
                //Otherwise make a new tab
                file.OpenFileData.DesignerEditor = new MyEditor(this, true);
                //If we have another editor, get font styles from that (to save memmory)
                if (openFiles.Count > 0)
                    file.OpenFileData.DesignerEditor.SetFontScheme(openFiles[0].Editor.GetFontScheme());
                else
                {
                    file.OpenFileData.DesignerEditor.AddFontStyle(GalaxyKeywords.InMethodKeywords.mod, GalaxyKeywords.InMethodKeywords.words);
                    file.OpenFileData.DesignerEditor.AddFontStyle(GalaxyKeywords.OutMethodKeywords.mod, GalaxyKeywords.OutMethodKeywords.words);
                    file.OpenFileData.DesignerEditor.AddFontStyle(GalaxyKeywords.SystemExpressions.mod, GalaxyKeywords.SystemExpressions.words);
                    file.OpenFileData.DesignerEditor.AddFontStyle(GalaxyKeywords.InitializerKeywords.mod, GalaxyKeywords.InitializerKeywords.words);
                    //file.OpenFile.Editor.AddFontStyle(GalaxyKeywords.TriggerKeywords.mod, GalaxyKeywords.TriggerKeywords.words);
                    file.OpenFileData.DesignerEditor.AddFontStyle(GalaxyKeywords.Primitives.mod, GalaxyKeywords.Primitives.words);
                }
                file.OpenFileData.DesignerEditor.Dock = DockStyle.Fill;

                file.OpenFileData.DesignerEditor.Tag = file.OpenFileData;

                file.OpenFileData.DesignerTabPage = new FATabStripItem(file.Text.Substring(0, file.Text.LastIndexOf(".Dialog")) + ".Designer.galaxy++", null);
                file.OpenFileData.DesignerTabPage.Margin = new Padding(0);
                file.OpenFileData.DesignerTabPage.Padding = new Padding(0);
                file.OpenFileData.DesignerTabPage.Tag = file.OpenFileData;
                file.OpenFileData.DesignerGUINode = nodePressed;

                file.OpenFileData.DesignerEditor.Text = file.OpenFileData.DesignerCode;
                //file.OpenFile.Editor.SetHiddenBlocks(file.ClosedBlocks);

                file.OpenFileData.DesignerTabPage.Controls.Add(file.OpenFileData.DesignerEditor);
                tabStrip.AddTab(file.OpenFileData.DesignerTabPage);
                //openFiles.Add(file.OpenFileData);

                //file.OpenFileData.DesignerEditor.OnTextEdited += MyEditor_TextEdited;

                tabStrip.SelectedItem = file.OpenFileData.DesignerTabPage;
                tabStrip_TabStripItemSelectionChanged(null);
                file.OpenFileData.DesignerEditor.Focus();
            }
        }
        public override bool FixConflicts(params string[] reqPrefixes)
        {
            /*Dir = new DirectoryInfo(Dir.FullName);
            foreach (DirItem child in Children)
            {
                if (child is FolderItem)
                {
                    FolderItem folder = (FolderItem) child;
                    folder.Dir = new DirectoryInfo(folder.Dir.FullName);
                }
                if (child is FileItem)
                {
                    FileItem folder = (FileItem)child;
                    folder.File = new FileInfo(folder.File.FullName);
                }
            }
            */
            //If this item does not exist on the hdd, remove it.
            if (!Dir.Exists)
            {
                if (Parent == null)
                    Dir.Create();
                else
                {
                    Parent.Children.Remove(this);
                    return true;
                }
            }

            /*if (watcher == null)
            {
                watcher = new FileSystemWatcher(Dir.FullName, "*.galaxy++");
                watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
                watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
                watcher.EnableRaisingEvents = true;
            }*/

            //If this dir contains any dirs or files that is not on the list, add them
            foreach (FileSystemInfo info in Dir.GetFileSystemInfos())
            {
                if (info is FileInfo)
                {
                    FileInfo fileInfo = (FileInfo) info;

                    if (!reqPrefixes.Any(prefix => fileInfo.Name.EndsWith(prefix)))
                        continue;

                    if (!Children.Any(child => child.FullName == fileInfo.FullName))
                    {
                        if (fileInfo.Name.EndsWith(".Dialog"))
                        {
                            DialogItem item = new DialogItem(this);
                            item.Name = fileInfo.Name;
                            Children.Add(item);
                        }
                        else
                        {

                            Children.Add(new FileItem(this, fileInfo.Name));
                        }
                    }
                }
                if (info is DirectoryInfo)
                {
                    DirectoryInfo dirInfo = (DirectoryInfo)info;

                    if (!Children.Any(child => (child is FolderItem) && ((FolderItem)child).Dir.FullName.TrimEnd('\\', '/') == dirInfo.FullName.TrimEnd('\\', '/')))
                        Children.Add(new FolderItem(this, dirInfo.Name));
                }
            }

            bool changes = false;
            //Visit children
            for (int i = Children.Count - 1; i >= 0; i--)
            {
                changes |= Children[i].FixConflicts(reqPrefixes);
            }

            return changes;
        }
        private void MakeNewDialog()
        {
            if (openProjectDir == null)
            {
            //Open an unsaved file

            }
            else
            {
            //Make file, and open it
                //Find it's position in the gui tree
                TreeNode folderNode = projectView.SelectedNode ??
                                        ProjectProperties.CurrentProjectPropperties.SrcFolder.GUINode;

                DirItem markedChild = (DirItem) folderNode.Tag;
                FolderItem parentFolder = (FolderItem) (markedChild.Parent ?? markedChild);
                if (markedChild is FolderItem)
                    parentFolder = (FolderItem) markedChild;

                //Find a default unique name
                string name = "New dialog.Dialog";
                int i = 1;
                while (parentFolder.Children.Any(child => child.Text == name))
                {
                    i++;
                    name = "New dialog" + i + ".Dialog";
                }
                DialogItem item = new DialogItem(parentFolder);
                item.Name = name;

                //Create the file
                DialogData dialogData = new DialogData();
                Dialog mainDialog = new Dialog(null, new Rectangle(0, 0, 500, 400), dialogData);
                mainDialog.Anchor = Dialog_Creator.Enums.Anchor.TopLeft;
                dialogData.Dialogs.Add(mainDialog);
                dialogData.Save(item.FullName);

                //Todo: Add to compiler

                item.GUINode = new TreeNode(name);
                item.GUINode.SelectedImageIndex = item.GUINode.ImageIndex = 5;
                item.GUINode.Tag = item;
                //Image index

                //Insert into tree
                int insertAt = parentFolder.Children.IndexOf(markedChild) + 1;
                if (insertAt == 0 || insertAt == parentFolder.Children.Count)
                {
                    parentFolder.Children.Add(item);
                    parentFolder.GUINode.Nodes.Add(item.GUINode);
                }
                else
                {
                    parentFolder.Children.Insert(insertAt, item);
                    parentFolder.GUINode.Nodes.Insert(insertAt, item.GUINode);
                }

                item.CodeGUINode = new TreeNode(name.Substring(0, name.LastIndexOf(".Dialog")) + ".galaxy++");
                item.CodeGUINode.SelectedImageIndex = item.CodeGUINode.ImageIndex = 2;
                item.CodeGUINode.Tag = item;
                item.GUINode.Nodes.Add(item.CodeGUINode);

                item.DesignerGUINode =
                    new TreeNode(name.Substring(0, name.LastIndexOf(".Dialog")) + ".Designer.galaxy++");
                item.DesignerGUINode.SelectedImageIndex = item.DesignerGUINode.ImageIndex = 2;
                item.DesignerGUINode.Tag = item;
                item.GUINode.Nodes.Add(item.DesignerGUINode);

                compiler.AddDialogFile(item);

                ProjectProperties.CurrentProjectPropperties.Save();
                UploadedChangesToMap = false;
                UploadToMap();

                projectView.SelectedNode = item.GUINode;
                item.GUINode.EnsureVisible();
                BeginRename(item.GUINode);
            }
        }
Beispiel #4
0
        public override bool FixConflicts(params string[] reqPrefixes)
        {
            /*Dir = new DirectoryInfo(Dir.FullName);
             * foreach (DirItem child in Children)
             * {
             *  if (child is FolderItem)
             *  {
             *      FolderItem folder = (FolderItem) child;
             *      folder.Dir = new DirectoryInfo(folder.Dir.FullName);
             *  }
             *  if (child is FileItem)
             *  {
             *      FileItem folder = (FileItem)child;
             *      folder.File = new FileInfo(folder.File.FullName);
             *  }
             * }
             */
            //If this item does not exist on the hdd, remove it.
            if (!Dir.Exists)
            {
                if (Parent == null)
                {
                    Dir.Create();
                }
                else
                {
                    Parent.Children.Remove(this);
                    return(true);
                }
            }

            /*if (watcher == null)
             * {
             *  watcher = new FileSystemWatcher(Dir.FullName, "*.galaxy++");
             *  watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
             *  watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
             *  watcher.EnableRaisingEvents = true;
             * }*/

            //If this dir contains any dirs or files that is not on the list, add them
            foreach (FileSystemInfo info in Dir.GetFileSystemInfos())
            {
                if (info is FileInfo)
                {
                    FileInfo fileInfo = (FileInfo)info;

                    if (!reqPrefixes.Any(prefix => fileInfo.Name.EndsWith(prefix)))
                    {
                        continue;
                    }



                    if (!Children.Any(child => child.FullName == fileInfo.FullName))
                    {
                        if (fileInfo.Name.EndsWith(".Dialog"))
                        {
                            DialogItem item = new DialogItem(this);
                            item.Name = fileInfo.Name;
                            Children.Add(item);
                        }
                        else
                        {
                            Children.Add(new FileItem(this, fileInfo.Name));
                        }
                    }
                }
                if (info is DirectoryInfo)
                {
                    DirectoryInfo dirInfo = (DirectoryInfo)info;

                    if (!Children.Any(child => (child is FolderItem) && ((FolderItem)child).Dir.FullName.TrimEnd('\\', '/') == dirInfo.FullName.TrimEnd('\\', '/')))
                    {
                        Children.Add(new FolderItem(this, dirInfo.Name));
                    }
                }
            }



            bool changes = false;

            //Visit children
            for (int i = Children.Count - 1; i >= 0; i--)
            {
                changes |= Children[i].FixConflicts(reqPrefixes);
            }

            return(changes);
        }