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)); }
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); }
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); }
protected override ProjectTreeItem CreateTreeItemForItem(InventoryItem item) { ProjectTreeItem treeItem = (ProjectTreeItem)_guiController.ProjectTree.AddTreeLeaf (this, GetNodeID(item), item.ID.ToString() + ": " + item.Name, "InventoryIcon"); return(treeItem); }
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; }
private void ProjectTree_OnAfterLabelEdit(string commandID, ProjectTreeItem treeItem) { if (commandID.StartsWith("Scr")) { _timerActivateWindow = false; _rightClickedScript = commandID.Substring(3); _renamedTreeItem = treeItem; _timer.Start(); } }
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); }
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); }
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); }
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); }
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); }
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]; } }
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); } }
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(); } }
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); }
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(); } }
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); }
private bool ProjectTreeItem_CanDropHere(ProjectTreeItem source, ProjectTreeItem target) { return(IsFolderNode(target.ID)); }
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); }