/// <summary> /// Dialog to open a user object /// </summary> /// <param name="objType">Type of object to open</param> /// <param name="prompt"></param> /// <param name="defaultName"></param> /// <returns></returns> public static UserObject ShowDialog( UserObjectType objType, string title, UserObject defaultUo) { MetaTreeNode mtn = null; MetaTreeNodeType mtnFilter; string response, objectTypeName; int i1; GetInstance(); objectTypeName = UserObject.GetTypeLabel(objType); string defaultName = ""; string defaultFolder = SS.I.PreferredProjectId; if (defaultUo != null) { defaultName = defaultUo.Name; defaultFolder = defaultUo.ParentFolder; } Instance.UoType = objType; Instance.Text = title; Instance.Prompt.Text = "Select a " + objectTypeName + " from the choices shown below"; mtnFilter = MetaTreeNodeType.Project; // show project folders and above mtnFilter |= UserObjectTree.UserObjectTypeToMetaTreeNodeType(objType); // user objects of specified type mtnFilter |= MetaTreeNodeType.UserFolder; // and any user folders string expandNodeTarget = "", expandNodeTarget2 = ""; if (objType != UserObjectType.UserDatabase) { mtn = UserObjectTree.FindObjectTypeSubfolder(SS.I.PreferredProjectId, objType, SS.I.UserName); if (mtn == null) { MetaTreeNode defProjNode = UserObjectTree.FindFolderNode(SS.I.PreferredProjectId); if (defProjNode == null) { defProjNode = UserObjectTree.AddSystemFolderNode(SS.I.PreferredProjectId); } mtn = UserObjectTree.FindObjectTypeSubfolder(defProjNode.Name, objType, SS.I.UserName); if (mtn == null) { mtn = UserObjectTree.CreateUserFolderObjectAndNode(defProjNode, UserObject.GetTypeLabelPlural(objType), SS.I.UserName); } } } else { if (UserObjectTree.FolderNodes.ContainsKey(defaultFolder)) { mtn = UserObjectTree.FolderNodes[defaultFolder]; } else { DebugLog.Message("Couldn't find default folder in tree: " + defaultFolder); // just log & ignore } } if (mtn?.Target != null) { expandNodeTarget = mtn.Target; if (mtn.Parent != null) { expandNodeTarget2 = mtn.Parent.Target; } } Instance.ContentsTreeWithSearch.ContentsTreeCtl.FillTree("root", mtnFilter, null, expandNodeTarget, expandNodeTarget2, false, false); Instance.ContentsTreeWithSearch.ContentsTreeCtl.SelectNode(expandNodeTarget); Instance.ContentsTreeWithSearch.CommandLineControl.Text = ""; Instance.ObjectName.Text = defaultName; Instance.SelectedNode = null; // node selected from tree QbUtil.SetProcessTreeItemOperationMethod(TreeItemOperation); DialogResult dr = Instance.ShowDialog(SessionManager.ActiveForm); QbUtil.RestoreProcessTreeItemOperationMethod(); if (dr == DialogResult.Cancel) { return(null); } return(Instance.OpenUoInfo); }
/// <summary> /// Validate the selection /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OK_Click(object sender, EventArgs e) { UserObjectType type; int id; if (ObjectName.Text == "") { MessageBoxMx.Show("A name must be supplied", UmlautMobius.String, MessageBoxButtons.OK); return; } if (SelectedNode != null) // selected from tree { UserObject.ParseObjectTypeAndIdFromInternalName(SelectedNode.Target, out type, out id); OpenUoInfo = UserObjectDao.ReadHeader(id); DialogResult = DialogResult.OK; return; } else // name typed in, determine the location { MetaTreeNode folderNode = ContentsTreeWithSearch.ContentsTreeCtl.FocusedMetaTreeNode; bool foundFolder = false; while (folderNode != null) { if (folderNode.IsFolderType) { foundFolder = true; break; } folderNode = folderNode.Parent; // move up in tree } if (!foundFolder) { // could not determine where to look for the object MessageBoxMx.Show("You must select the folder in which " + ObjectName.Text + " is to be found!", "Which Folder?", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); DialogResult = DialogResult.None; return; } else { // have a folder, look for entered name string folderTarget = folderNode.Target; if (!UserObjectTree.FolderNodes.ContainsKey(folderTarget)) { MessageBoxMx.ShowError("Unexpected error - Failed to find folder: " + folderTarget); return; } MetaTreeNode mtn = UserObjectTree.FolderNodes[folderTarget]; MetaTreeNodeType mtnType = UserObjectTree.UserObjectTypeToMetaTreeNodeType(UoType); mtn = UserObjectTree.GetNodeByLabel(mtn, mtnType, ObjectName.Text); if (mtn != null) { UserObject.ParseObjectTypeAndIdFromInternalName(mtn.Target, out type, out id); OpenUoInfo = UserObjectDao.ReadHeader(id); DialogResult = DialogResult.OK; } else { string msg = ObjectName.Text + "\n" + "File not found.\n" + "Please verify that the correct name was given."; MessageBoxMx.Show(msg, Instance.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); DialogResult = DialogResult.None; return; } } } }