void CellGUI(Rect cellRect, AssetEntryTreeViewItem item, int column, ref RowGUIArgs args) { CenterRectUsingSingleLineHeight(ref cellRect); switch ((ColumnId)column) { case ColumnId.Id: { // The rect is assumed indented and sized after the content when pinging float indent = GetContentIndent(item) + extraSpaceBeforeIconAndLabel; cellRect.xMin += indent; if (Event.current.type == EventType.Repaint) m_LabelStyle.Draw(cellRect, item.entry.address, false, false, args.selected, args.focused); } break; case ColumnId.Path: if (Event.current.type == EventType.Repaint) { var path = item.entry.AssetPath; if (string.IsNullOrEmpty(path)) path = item.entry.ReadOnly ? "" : "Missing File"; m_LabelStyle.Draw(cellRect, path, false, false, args.selected, args.focused); } break; case ColumnId.Type: if (item.assetIcon != null) UnityEngine.GUI.DrawTexture(cellRect, item.assetIcon, ScaleMode.ScaleToFit, true); break; case ColumnId.Labels: if (EditorGUI.DropdownButton(cellRect, new GUIContent(m_Editor.settings.labelTable.GetString(item.entry.labels, cellRect.width)), FocusType.Passive)) { var selection = GetItemsForContext(args.item.id); Dictionary<string, int> labelCounts = new Dictionary<string, int>(); List<AddressableAssetEntry> entries = new List<AddressableAssetEntry>(); var newSelection = new List<int>(); foreach (var s in selection) { var aeItem = FindItem(s, rootItem) as AssetEntryTreeViewItem; if (aeItem == null || aeItem.entry == null) continue; entries.Add(aeItem.entry); newSelection.Add(s); foreach (var label in aeItem.entry.labels) { int count; labelCounts.TryGetValue(label, out count); count++; labelCounts[label] = count; } } SetSelection(newSelection); PopupWindow.Show(cellRect, new LabelMaskPopupContent(m_Editor.settings, entries, labelCounts)); } break; } }
void AddGroupChildrenBuild(AddressableAssetGroup group, TreeViewItem root) { var groupItem = new AssetEntryTreeViewItem(group, 0); root.AddChild(groupItem); if (group.entries.Count > 0) { foreach (var entry in group.entries) { AddAndRecurseEntriesBuild(entry, groupItem, 1); } } }
void AddAndRecurseEntriesBuild(AddressableAssetEntry entry, AssetEntryTreeViewItem parent, int depth) { var item = new AssetEntryTreeViewItem(entry, depth); parent.AddChild(item); var subAssets = new List<AddressableAssetEntry>(); entry.GatherAllAssets(subAssets, false, false, true); if (subAssets.Count > 0) { foreach (var e in subAssets) { AddAndRecurseEntriesBuild(e, item, depth + 1); } } }
protected bool DoesAeItemMatchSearch(AssetEntryTreeViewItem aeItem, string search) { if (aeItem == null || aeItem.entry == null) return false; //check if item matches. if (aeItem.displayName.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0) return true; if (aeItem.entry.AssetPath.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0) return true; if (m_Editor.settings.labelTable.GetString(aeItem.entry.labels, 200).IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0) return true; return false; }
DragAndDropVisualMode HandleDragAndDropPaths(AssetEntryTreeViewItem target, DragAndDropArgs args) { DragAndDropVisualMode visualMode = DragAndDropVisualMode.None; if (target == null) return DragAndDropVisualMode.Rejected; foreach (String path in DragAndDrop.paths) { if (!AddressableAssetUtility.IsPathValidForEntry(path)) return DragAndDropVisualMode.Rejected; } visualMode = DragAndDropVisualMode.Copy; if (args.performDrop && visualMode != DragAndDropVisualMode.Rejected) { AddressableAssetGroup parent = null; bool targetIsGroup = false; if (target.group != null) { parent = target.group; targetIsGroup = true; } else if (target.entry != null) parent = target.entry.parentGroup; if (parent != null) { var resourcePaths = new List<string>(); var nonResourcePaths = new List<string>(); foreach (var p in DragAndDrop.paths) { if (AddressableAssetUtility.IsInResources(p)) resourcePaths.Add(p); else nonResourcePaths.Add(p); } bool canMarkNonResources = true; if (resourcePaths.Count > 0) { canMarkNonResources = AddressableAssetUtility.SafeMoveResourcesToGroup(m_Editor.settings, parent, resourcePaths); } if (canMarkNonResources) { var entries = new List<AddressableAssetEntry>(); var modifiedGroups = new HashSet<AddressableAssetGroup>(); foreach (var p in nonResourcePaths) { var e = m_Editor.settings.CreateOrMoveEntry(AssetDatabase.AssetPathToGUID(p), parent, false, false); entries.Add(e); modifiedGroups.Add(e.parentGroup); } foreach (var g in modifiedGroups) g.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entries, false, true); m_Editor.settings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entries, true, false); if (targetIsGroup) { SetExpanded(target.id, true); } } } } return visualMode; }
DragAndDropVisualMode HandleDragAndDropItems(AssetEntryTreeViewItem target, DragAndDropArgs args) { DragAndDropVisualMode visualMode = DragAndDropVisualMode.None; var draggedNodes = DragAndDrop.GetGenericData("AssetEntryTreeViewItem") as List<AssetEntryTreeViewItem>; if (draggedNodes != null && draggedNodes.Count > 0) { visualMode = DragAndDropVisualMode.Copy; bool isDraggingGroup = draggedNodes.First().parent == rootItem; bool dropParentIsRoot = args.parentItem == rootItem || args.parentItem == null; if (isDraggingGroup && !dropParentIsRoot || !isDraggingGroup && dropParentIsRoot) visualMode = DragAndDropVisualMode.Rejected; if (args.performDrop) { if (args.parentItem == null || args.parentItem == rootItem && visualMode != DragAndDropVisualMode.Rejected) { AddressableAssetGroup group = draggedNodes.First().@group; int index = m_Editor.settings.groups.FindIndex(g => g == group); if (index < args.insertAtIndex) args.insertAtIndex--; m_Editor.settings.groups.RemoveAt(index); if(args.insertAtIndex < 0 || args.insertAtIndex > m_Editor.settings.groups.Count) m_Editor.settings.groups.Insert(m_Editor.settings.groups.Count, group); else m_Editor.settings.groups.Insert(args.insertAtIndex, group); m_Editor.settings.SetDirty(AddressableAssetSettings.ModificationEvent.GroupMoved, m_Editor.settings.groups, true, true); Reload(); } else { AddressableAssetGroup parent = null; if (target.group != null) parent = target.group; else if (target.entry != null) parent = target.entry.parentGroup; if (parent != null) { if (draggedNodes.First().entry.IsInResources) { SafeMoveResourcesToGroup(parent, draggedNodes); } else { var entries = new List<AddressableAssetEntry>(); var modifiedGroups = new HashSet<AddressableAssetGroup>(); foreach (var node in draggedNodes) { var e = m_Editor.settings.CreateOrMoveEntry(node.entry.guid, parent, false, false); entries.Add(e); modifiedGroups.Add(e.parentGroup); } foreach (var g in modifiedGroups) g.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entries, false, true); m_Editor.settings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entries, true, false); } } } } } return visualMode; }