/// <summary> /// Check if the specified move is valid. If the move is valid, a null /// string is returned, otherwise a string describing the problem is /// returned. /// </summary> public String MoveCheck(KwsBrowserNode srcNode, KwsBrowserFolderNode dstFolder, String dstName, int dstIndex) { String dstID = MakeIDForNodeName(srcNode, dstName); if ((srcNode is KwsBrowserFolderNode) && ((KwsBrowserFolderNode)srcNode).PermanentFlag) return "cannot move or rename this folder"; if (srcNode is KwsBrowserKwsNode && dstFolder.IsRoot()) return "workspaces must be in folders"; if (srcNode is KwsBrowserKwsNode && dstID != srcNode.ID) return "cannot change workspace ID"; if (srcNode is KwsBrowserFolderNode && !KwsBrowserFolderNode.IsValidFolderName(dstName)) return "invalid destination name"; if (srcNode == dstFolder || dstFolder.IsDescendantOf(srcNode)) return "invalid move"; bool reindexFlag = (dstFolder.GetNodeByID(dstID) == srcNode); if (!reindexFlag && dstFolder.GetNodeByID(dstID) != null) return "destination already exists"; if (!dstFolder.IsIndexValidForInsert(srcNode, dstIndex)) return "invalid destination index"; return null; }
/// <summary> /// Add a folder with the name specified at the end of the folder /// specified. Throw an exception on error. /// </summary> public KwsBrowserFolderNode AddFolder(KwsBrowserFolderNode dstFolder, String name) { if (!KwsBrowserFolderNode.IsValidFolderName(name)) throw new Exception("invalid folder name"); KwsBrowserFolderNode node = new KwsBrowserFolderNode(name); if (dstFolder.GetNodeByID(node.ID) != null) throw new Exception("destination already exists"); dstFolder.AddNode(node, dstFolder.FolderNodes.Count); return node; }
/// <summary> /// Move the node at the source specified to the destination specified /// with the index specified. Throw an exception on error. /// </summary> public void Move(KwsBrowserNode srcNode, KwsBrowserFolderNode dstFolder, String dstName, int dstIndex) { String MoveCheckRes = MoveCheck(srcNode, dstFolder, dstName, dstIndex); if (MoveCheckRes != null) throw new Exception(MoveCheckRes); // Adjust the destination index if we're moving the source node // to the last index of a different folder than its parent. if (dstFolder.GetNodeByID(srcNode.ID) == null && dstIndex + 1 == dstFolder.KwsNodes.Count) { dstIndex++; } srcNode.Parent.RemoveNode(srcNode); if (srcNode is KwsBrowserFolderNode) ((KwsBrowserFolderNode)srcNode).FolderName = dstName; dstFolder.AddNode(srcNode, dstIndex); // The workspace list has changed. m_wm.OutlookBroker.OnKwsListChanged(); }
/// <summary> /// Request the creation of a folder. Return the node of the created folder. /// Warning: UpdateTvWorkspacesList() must be called after a call to this /// method. /// </summary> public KwsBrowserFolderNode RequestCreateFolder(KwsBrowserFolderNode parent) { // We're changing the WM state. m_wm.SetDirty(); // Generate a default folder name. String baseName = "New folder"; String name = baseName; int count = 0; while (parent.GetNodeByID("f_" + name) != null) name = baseName + " (" + ++count + ")"; // Insert the node in the browser. return Browser.AddFolder(parent, name); }