Example #1
0
        private void ScriptRenamed(string oldScriptName, ProjectTreeItem renamedItem)
        {
            Script renamedScript = renamedItem.LabelTextDataSource as Script;

            if (renamedScript == null)
            {
                return;
            }
            if (renamedScript.FileName == oldScriptName)
            {
                // they didn't actually change the name
                RePopulateTreeView(GetNodeID(renamedScript));
                return;
            }

            if (!Validation.FilenameIsValid(renamedScript.FileName))
            {
                _guiController.ShowMessage("The file name '" + renamedScript.FileName + "' contains some invalid characters. You cannot use some characters like : and / in script file names.", MessageBoxIcon.Warning);
                renamedScript.FileName = oldScriptName;
                RePopulateTreeView(GetNodeID(renamedScript));
                return;
            }

            Script associatedScript = GetAssociatedScriptOrHeader(renamedScript, oldScriptName);

            if (associatedScript == null)
            {
                _guiController.ShowMessage("Internal error: Associated script or header could not be found", MessageBoxIcon.Error);
                return;
            }

            string newNameForAssociatedScript = renamedScript.NameForLabelEdit + Path.GetExtension(associatedScript.FileName);

            if (((File.Exists(renamedScript.FileName)) || (File.Exists(newNameForAssociatedScript))) &&
                (!FileNamesDifferOnlyByCase(renamedScript.FileName, oldScriptName)))
            {
                _guiController.ShowMessage("A file with the name '" + renamedScript.FileName + "' already exists.", MessageBoxIcon.Warning);
                renamedScript.FileName = oldScriptName;
            }
            else
            {
                _agsEditor.SourceControlProvider.RenameFileOnDiskAndInSourceControl(oldScriptName, renamedScript.FileName);
                _agsEditor.SourceControlProvider.RenameFileOnDiskAndInSourceControl(associatedScript.FileName, newNameForAssociatedScript);
                _agsEditor.CurrentGame.FilesAddedOrRemoved = true;
                associatedScript.FileName = newNameForAssociatedScript;
            }

            ContentDocument document;

            if (_editors.TryGetValue(renamedScript, out document))
            {
                UpdateScriptWindowTitle((ScriptEditor)document.Control);
            }
            if (_editors.TryGetValue(associatedScript, out document))
            {
                UpdateScriptWindowTitle((ScriptEditor)document.Control);
            }

            RePopulateTreeView(GetNodeID(renamedScript));
        }
Example #2
0
        protected override ProjectTreeItem CreateTreeItemForItem(ScriptAndHeader item)
        {
            ProjectTree     treeController = _guiController.ProjectTree;
            ProjectTreeItem newItem        = (ProjectTreeItem)treeController.AddTreeBranch(this, GetNodeID(item), item.Name, ICON_KEY);

            newItem.AllowDoubleClickWhenExpanding = true;

            const string editHeaderText = "Edit Header";
            const string editScriptText = "Edit Script";

            if (item.Name != Path.GetFileNameWithoutExtension(Script.GLOBAL_HEADER_FILE_NAME))
            {
                newItem.AllowLabelEdit      = true;
                newItem.LabelTextProperty   = item.Header.GetType().GetProperty("NameForLabelEdit");
                newItem.LabelTextDataSource = item.Header;
                treeController.AddTreeLeaf(this, GetNodeID(item.Header), editHeaderText, ICON_KEY);
                treeController.AddTreeLeaf(this, GetNodeID(item.Script), editScriptText, ICON_KEY);
            }
            else
            {
                treeController.AddTreeLeaf(this, GetNodeID(item.Header), editHeaderText, "MenuIconGlobalHeader");
                treeController.AddTreeLeaf(this, GetNodeID(item.Script), editScriptText, "MenuIconGlobalScript");
            }

            return(newItem);
        }
Example #3
0
        protected override ProjectTreeItem CreateTreeItemForItem(Character item)
        {
            ProjectTreeItem treeItem = (ProjectTreeItem)_guiController.ProjectTree.AddTreeLeaf
                                           (this, GetNodeID(item), item.ID.ToString() + ": " + item.ScriptName, "CharacterIcon");

            return(treeItem);
        }
        private bool ProjectTreeItem_CanDropHere(ProjectTreeItem source, ProjectTreeItem target)
        {
            FolderType targetFolder;
            ItemType   targetItem;

            GetDropItemOrFolder(target, out targetFolder, out targetItem);

            FolderType sourceFolder;
            ItemType   sourceItem;

            GetDropItemOrFolder(source, out sourceFolder, out sourceItem);

            if (sourceFolder != null && targetFolder == null)
            {
                return(false);
            }
            if (sourceFolder != null && !IsValidFolderMove(sourceFolder, targetFolder))
            {
                return(false);
            }
            if (sourceItem != null && targetItem != null && sourceItem.Equals(targetItem))
            {
                return(false);
            }

            return(true);
        }
Example #5
0
        protected override ProjectTreeItem CreateTreeItemForItem(InventoryItem item)
        {
            ProjectTreeItem treeItem = (ProjectTreeItem)_guiController.ProjectTree.AddTreeLeaf
                                           (this, GetNodeID(item), item.ID.ToString() + ": " + item.Name, "InventoryIcon");

            return(treeItem);
        }
Example #6
0
        private void AddTreeLeafForTranslation(string key, Translation item)
        {
            ProjectTreeItem treeItem = (ProjectTreeItem)_guiController.ProjectTree.AddTreeLeaf(this, key, item.Name, "TranslationIcon");

            treeItem.AllowLabelEdit               = true;
            treeItem.LabelTextProperty            = item.GetType().GetProperty("Name");
            treeItem.LabelTextDescriptionProperty = item.GetType().GetProperty("FileName");
            treeItem.LabelTextDataSource          = item;
        }
Example #7
0
 private void ProjectTree_OnAfterLabelEdit(string commandID, ProjectTreeItem treeItem)
 {
     if (commandID.StartsWith("Scr"))
     {
         _timerActivateWindow = false;
         _rightClickedScript  = commandID.Substring(3);
         _renamedTreeItem     = treeItem;
         _timer.Start();
     }
 }
Example #8
0
 private void ProjectTree_OnAfterLabelEdit(string commandID, ProjectTreeItem treeItem)
 {
     if (commandID.StartsWith(ITEM_COMMAND_PREFIX))
     {
         _timerActivateWindow = false;
         _rightClickedScript  = commandID.Substring(ITEM_COMMAND_PREFIX.Length) + ".ash";
         _renamedTreeItem     = treeItem;
         _timer.Start();
     }
 }
        /// <summary>
        /// Adds a tree leaf for the item, and returns the Command ID
        /// </summary>
        protected string AddTreeNodeForItem(ItemType item)
        {
            ProjectTreeItem treeItem = CreateTreeItemForItem(item);

            treeItem.AllowDragging = true;
            treeItem.CanDropHere   = new ProjectTreeItem.CanDropHereDelegate(ProjectTreeItem_CanDropHere);
            treeItem.DropHere      = new ProjectTreeItem.DropHereDelegate(ProjectTreeItem_DropHere);
            _items.Add(treeItem.ID, item);
            return(treeItem.ID);
        }
Example #10
0
        protected override ProjectTreeItem CreateTreeItemForItem(AudioClip item)
        {
            string          nodeID   = GetNodeIDForAudioClip(item);
            ProjectTreeItem treeItem = (ProjectTreeItem)_guiController.ProjectTree.AddTreeLeaf(this, nodeID, item.ScriptName, GetIconKeyForAudioClip(item));

            treeItem.AllowLabelEdit               = true;
            treeItem.LabelTextProperty            = item.GetType().GetProperty("ScriptName");
            treeItem.LabelTextDescriptionProperty = item.GetType().GetProperty("ScriptName");
            treeItem.LabelTextDataSource          = item;
            return(treeItem);
        }
Example #11
0
        private string AddTreeNodeForAudioClipType(AudioClipType clipType)
        {
            string          newNodeID = NODE_ID_PREFIX_CLIP_TYPE + clipType.TypeID;
            ProjectTreeItem treeItem  = (ProjectTreeItem)_guiController.ProjectTree.AddTreeLeaf(this, newNodeID, clipType.Name, AUDIO_CLIP_TYPE_ICON);

            treeItem.AllowLabelEdit               = true;
            treeItem.LabelTextProperty            = clipType.GetType().GetProperty("Name");
            treeItem.LabelTextDescriptionProperty = clipType.GetType().GetProperty("Name");
            treeItem.LabelTextDataSource          = clipType;
            return(newNodeID);
        }
Example #12
0
        protected override ProjectTreeItem CreateTreeItemForItem(View item)
        {
            string          nodeID   = GetNodeIDForView(item);
            ProjectTreeItem treeItem = (ProjectTreeItem)_guiController.ProjectTree.AddTreeLeaf(this, nodeID, item.ID.ToString() + ": " + item.Name, "ViewIcon");

            treeItem.AllowLabelEdit               = true;
            treeItem.LabelTextProperty            = item.GetType().GetProperty("Name");
            treeItem.LabelTextDescriptionProperty = item.GetType().GetProperty("NameAndID");
            treeItem.LabelTextDataSource          = item;
            return(treeItem);
        }
Example #13
0
        private void ProjectTreeItem_DropHere(ProjectTreeItem source, ProjectTreeItem target)
        {
            FolderType targetFolder;

            if (target.ID == TOP_LEVEL_COMMAND_ID)
            {
                targetFolder = this.GetRootFolder();
            }
            else
            {
                targetFolder = _folders[target.ID];
            }

            if (_folders.ContainsKey(source.ID))
            {
                FolderType folderToMove = _folders[source.ID];
                if (!IsValidFolderMove(folderToMove, targetFolder))
                {
                    _guiController.ShowMessage("You cannot move a folder into itself or one of its children.", MessageBoxIconType.Warning);
                    return;
                }

                FolderType parentOfSource = FindParentFolder(this.GetRootFolder(), folderToMove);
                if (parentOfSource == null)
                {
                    throw new AGSEditorException("Folder being moved has no parent?");
                }

                if (parentOfSource == targetFolder)
                {
                    return;
                }

                parentOfSource.SubFolders.Remove(folderToMove);
                targetFolder.SubFolders.Add(folderToMove);
            }
            else
            {
                ItemType   viewToMove   = _items[source.ID];
                FolderType sourceFolder = FindFolderThatContainsItem(this.GetRootFolder(), viewToMove);
                if (sourceFolder == null)
                {
                    throw new AGSEditorException("Source view was not in a folder");
                }

                sourceFolder.Items.Remove(viewToMove);
                targetFolder.Items.Add(viewToMove);
            }

            RePopulateTreeView(target.ID);
            _guiController.ProjectTree.SelectNode(this, source.ID);
        }
Example #14
0
 private void ProjectTree_OnAfterLabelEdit(string commandID, ProjectTreeItem treeItem)
 {
     if (commandID.StartsWith("Trl"))
     {
         Translation translation = (Translation)treeItem.LabelTextDataSource;
         _oldNameBeforeRename = treeItem.LabelTextBeforeLabelEdit;
         if (translation.Name != _oldNameBeforeRename)
         {
             _itemRightClicked = translation;
             _timer.Start();
         }
     }
 }
        private bool MoveDirToDir(ProjectTreeItem sourceItem, ProjectTreeItem targetItem)
        {
            var srcPath = sourceItem.Path;
            var dstPath = targetItem.Path;

            var dstPathCombine = System.IO.Path.Combine(dstPath, sourceItem.Name);

            if (System.IO.Directory.Exists(dstPathCombine))
            {
                MessageBox.Show(App.Current.MainWindow, "目标目录有重名目录,无法移动目录", "警告", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            else
            {
                System.IO.Directory.Move(srcPath, dstPathCombine);



                //遍历目录所有文件
                foreach (var file in System.IO.Directory.GetFiles(dstPathCombine, "*.*"))
                {
                    var relativeFile = Common.MakeRelativePath(dstPathCombine, file);
                    var srcFile      = System.IO.Path.Combine(srcPath, relativeFile);

                    foreach (var doc in ViewModelLocator.Instance.Dock.Documents)
                    {
                        if (doc.XamlPath.EqualsIgnoreCase(srcFile))
                        {
                            doc.XamlPath = file;
                            break;
                        }
                    }
                }


                //刷新工程树视图

                ViewModelLocator.Instance.Project.RefreshCommand.Execute(null);

                return(true);
            }



            return(false);
        }
        private void GetDropItemOrFolder(ProjectTreeItem treeItem, out FolderType folder, out ItemType item)
        {
            folder = null;
            item   = default(ItemType);

            if (!IsFolderNode(treeItem.ID))
            {
                item = _items[treeItem.ID];
            }
            else if (treeItem.ID == TOP_LEVEL_COMMAND_ID)
            {
                folder = this.GetRootFolder();
            }
            else
            {
                folder = _folders[treeItem.ID];
            }
        }
Example #17
0
        private void RePopulateTreeView(Script scriptToSelect)
        {
            _guiController.ProjectTree.RemoveAllChildNodes(this, ROOT_COMMAND);
            _guiController.ProjectTree.StartFromNode(this, ROOT_COMMAND);
            foreach (Script item in _agsEditor.CurrentGame.Scripts)
            {
                string iconKey        = "ScriptIcon";
                bool   allowLabelEdit = true;

                if (item.FileName == Script.GLOBAL_HEADER_FILE_NAME)
                {
                    iconKey        = "MenuIconGlobalHeader";
                    allowLabelEdit = false;
                }
                else if (item.FileName == Script.GLOBAL_SCRIPT_FILE_NAME)
                {
                    iconKey        = "MenuIconGlobalScript";
                    allowLabelEdit = false;
                }

                ProjectTreeItem newItem = (ProjectTreeItem)_guiController.ProjectTree.AddTreeLeaf(this, "Scr" + item.FileName, item.FileName, iconKey);

                if (allowLabelEdit)
                {
                    newItem.AllowLabelEdit      = true;
                    newItem.LabelTextProperty   = item.GetType().GetProperty("NameForLabelEdit");
                    newItem.LabelTextDataSource = item;
                }
            }

            if (scriptToSelect != null)
            {
                _guiController.ProjectTree.SelectNode(this, "Scr" + scriptToSelect.FileName);
            }
            else if (_editors.ContainsValue(_guiController.ActivePane))
            {
                ScriptEditor editor = (ScriptEditor)_guiController.ActivePane.Control;
                _guiController.ProjectTree.SelectNode(this, "Scr" + editor.Script.FileName);
            }
            else if (_agsEditor.CurrentGame.Scripts.Count > 0)
            {
                _guiController.ProjectTree.SelectNode(this, "Scr" + _agsEditor.CurrentGame.Scripts[0].FileName);
            }
        }
Example #18
0
        private void ProjectTree_OnAfterLabelEdit(string commandID, ProjectTreeItem treeItem)
        {
            if (commandID.StartsWith(ITEM_COMMAND_PREFIX))
            {
                if (!commandID.StartsWith(NODE_ID_PREFIX_FOLDER))
                {
                    View itemBeingEdited = (View)treeItem.LabelTextDataSource;

                    if (_agsEditor.CurrentGame.IsScriptNameAlreadyUsed(itemBeingEdited.Name.ToUpper(), itemBeingEdited))
                    {
                        _guiController.ShowMessage("This script name is already used by another item.", MessageBoxIconType.Warning);
                        itemBeingEdited.Name   = treeItem.LabelTextBeforeLabelEdit;
                        treeItem.TreeNode.Text = itemBeingEdited.NameAndID;
                        return;
                    }
                }
                UpdateOpenWindowTitles();
                _guiController.DocumentTitlesChanged();
            }
        }
Example #19
0
        private string AddNodeForFolder(FolderType folder)
        {
            string nodeID = NODE_ID_PREFIX_FOLDER + folder.Name;

            while (_folders.ContainsKey(nodeID))
            {
                nodeID = nodeID + "A";
            }
            _folders.Add(nodeID, folder);

            ProjectTreeItem newItem = _guiController.ProjectTree.AddTreeBranch(this, nodeID, folder.Name, "GenericFolderIcon");

            newItem.AllowLabelEdit      = true;
            newItem.LabelTextProperty   = folder.GetType().GetProperty("Name");
            newItem.LabelTextDataSource = folder;
            newItem.AllowDragging       = true;
            newItem.CanDropHere         = new ProjectTreeItem.CanDropHereDelegate(ProjectTreeItem_CanDropHere);
            newItem.DropHere            = new ProjectTreeItem.DropHereDelegate(ProjectTreeItem_DropHere);

            return(nodeID);
        }
        private void ProjectTreeItem_DropHere(ProjectTreeItem source, ProjectTreeItem target)
        {
            FolderType targetFolder;
            ItemType   targetItem;

            GetDropItemOrFolder(target, out targetFolder, out targetItem);

            FolderType sourceFolder;
            ItemType   sourceItem;

            GetDropItemOrFolder(source, out sourceFolder, out sourceItem);

            if (sourceFolder != null)
            {
                if (targetFolder == null)
                {
                    _guiController.ShowMessage("You cannot move a folder to be before a file.", MessageBoxIconType.Warning);
                    return;
                }
                if (!DropFolderToFolder(sourceFolder, targetFolder))
                {
                    return;
                }
            }
            else
            {
                if (targetFolder == null)
                {
                    DragItemToBeBeforeItem(sourceItem, targetItem);
                }
                else
                {
                    DragItemToFolder(sourceItem, targetFolder);
                }
            }

            RePopulateTreeView(target.ID);
            _guiController.ProjectTree.SelectNode(this, source.ID);
        }
Example #21
0
        private void ProjectTree_OnAfterLabelEdit(string commandID, ProjectTreeItem treeItem)
        {
            if (commandID.StartsWith(NODE_ID_PREFIX_CLIP_TYPE))
            {
                // this must be first because the AudioClipType prefix
                // is also the AudioClip prefix if we don't check this!
                AudioClipTypeTypeConverter.RefreshAudioClipTypeList();
            }
            else if ((commandID.StartsWith(ITEM_COMMAND_PREFIX)) &&
                     (!commandID.StartsWith(NODE_ID_PREFIX_FOLDER)))
            {
                AudioClip itemBeingEdited = (AudioClip)treeItem.LabelTextDataSource;

                if (_agsEditor.CurrentGame.IsScriptNameAlreadyUsed(itemBeingEdited.ScriptName, itemBeingEdited))
                {
                    _guiController.ShowMessage("This script name is already used by another item.", MessageBoxIconType.Warning);
                    itemBeingEdited.ScriptName = treeItem.LabelTextBeforeLabelEdit;
                    treeItem.TreeNode.Text     = itemBeingEdited.ScriptName;
                }

                AudioClipTypeConverter.RefreshAudioClipList();
            }
        }
Example #22
0
        private bool MoveFileToDir(ProjectTreeItem sourceItem, ProjectTreeItem targetItem)
        {
            var srcFile = sourceItem.Path;
            var dstPath = targetItem.Path;

            //拷贝源文件到目录路径中去,若源文件所对应的旧有路径已经在设计器中打开,则需要更新设计器中对应的路径
            var dstFile = System.IO.Path.Combine(dstPath, sourceItem.Name);

            if (System.IO.File.Exists(dstFile))
            {
                // 目标目录有重名文件,无法移动文件
                MessageBox.Show(App.Current.MainWindow, ResxIF.GetString("msgFileAlredyExists"), ResxIF.GetString("msgWarning"), MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            else
            {
                System.IO.File.Move(srcFile, dstFile);
                sourceItem.Path = dstFile;//更新VM
                foreach (var doc in ViewModelLocator.Instance.Dock.Documents)
                {
                    if (doc.XamlPath.EqualsIgnoreCase(srcFile))
                    {
                        doc.XamlPath = dstFile;
                        break;
                    }
                }

                if (sourceItem.IsMain)
                {
                    //如果是主文件,则移动过去后还是主文件
                    sourceItem.SetAsMainCommand.Execute(null);
                }

                return(true);
            }

            return(false);
        }
Example #23
0
 private bool ProjectTreeItem_CanDropHere(ProjectTreeItem source, ProjectTreeItem target)
 {
     return(IsFolderNode(target.ID));
 }
Example #24
0
 private void ProjectTree_OnAfterLabelEdit(string commandID, ProjectTreeItem treeItem)
 {
     if (commandID.StartsWith("Scr"))
     {
         _timerActivateWindow = false;
         _rightClickedScript = commandID.Substring(3);
         _renamedTreeItem = treeItem;
         _timer.Start();
     }
 }
Example #25
0
        private void ScriptRenamed(string oldScriptName, ProjectTreeItem renamedItem)
        {
            Script renamedScript = (Script)renamedItem.LabelTextDataSource;
            if (renamedScript.FileName == oldScriptName)
            {
                // they didn't actually change the name
                RePopulateTreeView(renamedScript);
                return;
            }

            Script associatedScript = GetAssociatedScriptOrHeader(renamedScript, oldScriptName);
            if (associatedScript == null)
            {
                _guiController.ShowMessage("Internal error: Associated script or header could not be found", MessageBoxIcon.Error);
                return;
            }

            string newNameForAssociatedScript = renamedScript.NameForLabelEdit + Path.GetExtension(associatedScript.FileName);

            if (!Utilities.DoesFileNameContainOnlyValidCharacters(renamedScript.FileName))
            {
                _guiController.ShowMessage("The file name '" + renamedScript.FileName + "' contains some invalid characters. You cannot use some characters like : and / in script file names.", MessageBoxIcon.Warning);
                renamedScript.FileName = oldScriptName;
            }
            else if (((File.Exists(renamedScript.FileName)) || (File.Exists(newNameForAssociatedScript))) &&
                    (!FileNamesDifferOnlyByCase(renamedScript.FileName, oldScriptName)))
            {
                _guiController.ShowMessage("A file with the name '" + renamedScript.FileName + "' already exists.", MessageBoxIcon.Warning);
                renamedScript.FileName = oldScriptName;
            }
            else
            {
                _agsEditor.SourceControlProvider.RenameFileOnDiskAndInSourceControl(oldScriptName, renamedScript.FileName);
                _agsEditor.SourceControlProvider.RenameFileOnDiskAndInSourceControl(associatedScript.FileName, newNameForAssociatedScript);
                _agsEditor.CurrentGame.FilesAddedOrRemoved = true;
                associatedScript.FileName = newNameForAssociatedScript;
            }

            if (_editors.ContainsKey(renamedScript))
            {
                UpdateScriptWindowTitle((ScriptEditor)_editors[renamedScript].Control);
            }
            if (_editors.ContainsKey(associatedScript))
            {
                UpdateScriptWindowTitle((ScriptEditor)_editors[associatedScript].Control);
            }

            RePopulateTreeView(renamedScript);
        }
Example #26
0
 private void ProjectTree_OnAfterLabelEdit(string commandID, ProjectTreeItem treeItem)
 {
     if (commandID.StartsWith("Trl"))
     {
         Translation translation = (Translation)treeItem.LabelTextDataSource;
         _oldNameBeforeRename = treeItem.LabelTextBeforeLabelEdit;
         if (translation.Name != _oldNameBeforeRename)
         {
             _itemRightClicked = translation;
             _timer.Start();
         }
     }
 }