protected void SetupTree(InventoryTree tree, ITreeModel model, bool expandRoot) { tree.NodeControls.Clear(); NodeCheckBox checkBox = tree.AddCheckBoxControl("Checked"); checkBox.IsVisibleValueNeeded += new EventHandler <NodeControlValueEventArgs>(IsCheckBoxVisible); checkBox.IsEditEnabledValueNeeded += new EventHandler <NodeControlValueEventArgs>(IsCheckBoxEnabled); checkBox.CheckStateChanged += new EventHandler <TreePathEventArgs>(CheckBoxStateChanged); tree.AddIconControl("Icon"); tree.AddTextBoxControl("Name"); tree.SetModel(model, expandRoot); }
protected void SetupTreeEvents(InventoryTree tree) { tree.NodeMouseDoubleClick += new EventHandler <TreeNodeAdvMouseEventArgs>(this._treeView_NodeMouseDoubleClick); tree.SelectionChangedEvent += new EventHandler <ObjectEventArgs>(this._treeView_SelectionChangedEvent); }
protected InventoryTree CopyFolder(UUID principalID, UUID folderID, UUID toNewFolder) { int folderIdx = 0; var folderList = new List <InventoryTree>(); var itemList = new List <InventoryItem>(); var treeDict = new Dictionary <UUID, InventoryTree>(); var copyFolder = new InventoryTree(Folder[principalID, folderID]); folderList.Add(copyFolder); treeDict[copyFolder.ID] = copyFolder; var mapparents = new Dictionary <UUID, UUID> { [copyFolder.ParentFolderID] = toNewFolder, [copyFolder.ID] = UUID.Random }; if (!IsParentFolderIdValid(principalID, toNewFolder)) { throw new InvalidParentFolderIdException(); } while (folderIdx < folderList.Count) { List <InventoryFolder> folders; UUID thisFolderID = folderList[folderIdx].ID; try { folders = Folder.GetFolders(principalID, thisFolderID); } catch { continue; } foreach (InventoryFolder folder in folders) { var childFolder = new InventoryTree(folder); treeDict[thisFolderID].Folders.Add(childFolder); treeDict[folder.ID] = childFolder; } ++folderIdx; } for (folderIdx = 0; folderIdx < folderList.Count; ++folderIdx) { List <InventoryItem> items; InventoryTree parentFolder = folderList[folderIdx]; try { items = Folder.GetItems(principalID, parentFolder.ID); } catch { continue; } foreach (InventoryItem item in items) { if (!item.CheckPermissions(item.Owner, UGI.Unknown, InventoryPermissionsMask.Copy)) { throw new InventoryItemNotCopiableException(item.ID); } item.ParentFolderID = mapparents[item.ParentFolderID]; parentFolder.Items.Add(item); } } foreach (InventoryTree folder in folderList) { folder.ParentFolderID = mapparents[folder.ParentFolderID]; UUID prevFolderID = UUID.Random; folder.ID = prevFolderID; Folder.Add(folder); mapparents[prevFolderID] = folder.ID; } foreach (InventoryItem item in itemList) { Item.Add(item); } return(copyFolder); }
InventoryTree IInventoryFolderServiceInterface.Copy(UUID principalID, UUID folderID, UUID toFolderID) { var headers = new Dictionary <string, string> { ["Destination"] = $"{m_CapabilityUri}category/{toFolderID}" }; Map res; HttpStatusCode statuscode; using (Stream s = new HttpClient.Copy($"{m_CapabilityUri}category/{folderID}") { TimeoutMs = TimeoutMs, Headers = headers, DisableExceptions = HttpClient.Request.DisableExceptionFlags.DisableForbidden | HttpClient.Request.DisableExceptionFlags.DisableGone }.ExecuteStreamRequest(out statuscode)) { switch (statuscode) { case HttpStatusCode.OK: break; case HttpStatusCode.Forbidden: throw new InventoryItemNotCopiableException(); case HttpStatusCode.Gone: throw new InventoryFolderNotFoundException(folderID); default: throw new InvalidParentFolderIdException(); } res = (Map)LlsdXml.Deserialize(s); } var copiedFolder = new InventoryTree { Name = res["name"].ToString(), DefaultType = (AssetType)res["type_default"].AsInt, ParentFolderID = res["parent_id"].AsUUID, Version = res["version"].AsInt, Owner = new UGUI(res["agent_id"].AsUUID), ID = res["category_id"].AsUUID }; var stack = new List <Map>(); var parentTree = new Dictionary <UUID, InventoryTree>(); parentTree.Add(copiedFolder.ID, copiedFolder); stack.Add(res); while (stack.Count > 0) { res = stack[0]; stack.RemoveAt(0); Map embmap; Map foldermap; InventoryTree parentFolder = parentTree[res["category_id"].AsUUID]; parentFolder.Items.AddRange(ExtractItems(res)); if (res.TryGetValue("_embedded", out embmap) && embmap.TryGetValue("categories", out foldermap)) { foreach (KeyValuePair <string, IValue> kvp in foldermap) { var folderdata = kvp.Value as Map; if (folderdata == null) { continue; } var folder = new InventoryTree(folderdata["category_id"].AsUUID) { Name = folderdata["name"].ToString(), DefaultType = (AssetType)folderdata["type_default"].AsInt, ParentFolderID = folderdata["parent_id"].AsUUID, Version = folderdata["version"].AsInt, Owner = new UGUI(folderdata["agent_id"].AsUUID) }; stack.Add(folderdata); parentFolder.Folders.Add(folder); } } } return(copiedFolder); }