private void FillItem(VisualElement element, int index) { var item = m_TreeViewController.GetTreeViewItemDataForIndex(index); element.Clear(); var target = item.data; element.userData = target; var labelCont = new VisualElement(); labelCont.AddToClassList("unity-debugger-tree-item-label-cont"); element.Add(labelCont); var label = new Label(target.typeName); label.AddToClassList("unity-debugger-tree-item-label"); label.AddToClassList("unity-debugger-tree-item-type"); labelCont.Add(label); if (!string.IsNullOrEmpty(target.name)) { var nameLabelCont = new VisualElement(); nameLabelCont.AddToClassList("unity-debugger-tree-item-label-cont"); element.Add(nameLabelCont); var nameLabel = new Label("#" + target.name); nameLabel.AddToClassList("unity-debugger-tree-item-label"); nameLabel.AddToClassList("unity-debugger-tree-item-name"); nameLabel.AddToClassList("unity-debugger-tree-item-name-label"); nameLabelCont.Add(nameLabel); } foreach (var ussClass in target.GetClasses()) { var classLabelCont = new VisualElement(); classLabelCont.AddToClassList("unity-debugger-tree-item-label-cont"); element.Add(classLabelCont); var classLabel = new Label("." + ussClass); classLabel.AddToClassList("unity-debugger-tree-item-label"); classLabel.AddToClassList("unity-debugger-tree-item-classlist"); classLabel.AddToClassList("unity-debugger-tree-item-classlist-label"); classLabelCont.Add(classLabel); } }
private void FillItem(VisualElement element, int index) { var item = m_TreeViewController.GetTreeViewItemDataForIndex(index); element.Clear(); var target = item.data; element.userData = target; var labelCont = new VisualElement(); labelCont.AddToClassList(labelContainerUssClassName); element.Add(labelCont); var label = new Label(target.typeName); label.AddToClassList(itemLabelUssClassName); label.AddToClassList(itemTypeUssClassName); labelCont.Add(label); if (!string.IsNullOrEmpty(target.name)) { var nameLabelCont = new VisualElement(); nameLabelCont.AddToClassList(labelContainerUssClassName); element.Add(nameLabelCont); var nameLabel = new Label("#" + target.name); nameLabel.AddToClassList(itemLabelUssClassName); nameLabel.AddToClassList(itemNameUssClassName); nameLabel.AddToClassList(itemNameLabelUssClassName); nameLabelCont.Add(nameLabel); } foreach (var ussClass in target.GetClasses()) { var classLabelCont = new VisualElement(); classLabelCont.AddToClassList(labelContainerUssClassName); element.Add(classLabelCont); var classLabel = new Label("." + ussClass); classLabel.AddToClassList(itemLabelUssClassName); classLabel.AddToClassList(itemClassListUssClassName); classLabel.AddToClassList(itemClassListLabelUssClassName); classLabelCont.Add(classLabel); } }
void FillItem(VisualElement element, int index) { var item = m_TreeViewController.GetTreeViewItemDataForIndex(index); var explorerItem = element as BuilderExplorerItem; explorerItem.Clear(); // Pre-emptive cleanup. var row = explorerItem.parent.parent; row.RemoveFromClassList(BuilderConstants.ExplorerHeaderRowClassName); row.RemoveFromClassList(BuilderConstants.ExplorerItemHiddenClassName); row.RemoveFromClassList(BuilderConstants.ExplorerActiveStyleSheetClassName); // Get target element (in the document). var documentElement = item.data; documentElement.SetProperty(BuilderConstants.ElementLinkedExplorerItemVEPropertyName, explorerItem); explorerItem.SetProperty(BuilderConstants.ElementLinkedDocumentVisualElementVEPropertyName, documentElement); row.userData = documentElement; // If we have a FillItem callback (override), we call it and stop creating the rest of the item. var fillItemCallback = documentElement.GetProperty(BuilderConstants.ExplorerItemFillItemCallbackVEPropertyName) as Action <VisualElement, TreeViewItem, BuilderSelection>; if (fillItemCallback != null) { fillItemCallback(explorerItem, item, m_Selection); return; } // Create main label container. var labelCont = new VisualElement(); labelCont.AddToClassList(BuilderConstants.ExplorerItemLabelContClassName); explorerItem.Add(labelCont); if (BuilderSharedStyles.IsStyleSheetElement(documentElement)) { var owningUxmlPath = documentElement.GetProperty(BuilderConstants.ExplorerItemLinkedUXMLFileName) as string; var isPartOfParentDocument = !string.IsNullOrEmpty(owningUxmlPath); var styleSheetAsset = documentElement.GetStyleSheet(); var styleSheetFileName = AssetDatabase.GetAssetPath(styleSheetAsset); var styleSheetAssetName = BuilderAssetUtilities.GetStyleSheetAssetName(styleSheetAsset, hasUnsavedChanges && !isPartOfParentDocument); var ssLabel = new Label(styleSheetAssetName); ssLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); ssLabel.AddToClassList("unity-debugger-tree-item-type"); row.AddToClassList(BuilderConstants.ExplorerHeaderRowClassName); labelCont.Add(ssLabel); // Register right-click events for context menu actions. m_ContextMenuManipulator.RegisterCallbacksOnTarget(explorerItem); // Register drag-and-drop events for reparenting. m_ExplorerDragger.RegisterCallbacksOnTarget(explorerItem); // Allow reparenting. explorerItem.SetProperty(BuilderConstants.ExplorerItemElementLinkVEPropertyName, documentElement); var assetIsActiveStyleSheet = styleSheetAsset == m_PaneWindow.document.activeStyleSheet; if (assetIsActiveStyleSheet) { row.AddToClassList(BuilderConstants.ExplorerActiveStyleSheetClassName); } if (isPartOfParentDocument) { row.AddToClassList(BuilderConstants.ExplorerItemHiddenClassName); } // Show name of UXML file that USS file 'belongs' to. if (!string.IsNullOrEmpty(owningUxmlPath)) { var pathStr = Path.GetFileName(owningUxmlPath); var label = new Label(BuilderConstants.TripleSpace + pathStr); label.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); label.AddToClassList(BuilderConstants.ElementTypeClassName); label.AddToClassList("unity-builder-explorer-tree-item-template-path"); // Just make it look a bit shaded. labelCont.Add(label); } return; } else if (BuilderSharedStyles.IsSelectorElement(documentElement)) { var selectorParts = BuilderSharedStyles.GetSelectorParts(documentElement); var selectorLabelCont = new VisualElement(); selectorLabelCont.AddToClassList(BuilderConstants.ExplorerItemSelectorLabelContClassName); labelCont.Add(selectorLabelCont); // Register right-click events for context menu actions. m_ContextMenuManipulator.RegisterCallbacksOnTarget(explorerItem); // Register drag-and-drop events for reparenting. m_ExplorerDragger.RegisterCallbacksOnTarget(explorerItem); foreach (var partStr in selectorParts) { if (partStr.StartsWith(BuilderConstants.UssSelectorClassNameSymbol)) { m_ClassPillTemplate.CloneTree(selectorLabelCont); var pill = selectorLabelCont.contentContainer.ElementAt(selectorLabelCont.childCount - 1); var pillLabel = pill.Q <Label>("class-name-label"); pill.name = k_PillName; pill.AddToClassList("unity-debugger-tree-item-pill"); pill.SetProperty(BuilderConstants.ExplorerStyleClassPillClassNameVEPropertyName, partStr); pill.userData = documentElement; // Add ellipsis if the class name is too long. var partStrShortened = BuilderNameUtilities.CapStringLengthAndAddEllipsis(partStr, BuilderConstants.ClassNameInPillMaxLength); if (partStrShortened != partStr) { pillLabel.tooltip = partStr; } pillLabel.text = partStrShortened; // We want class dragger first because it has priority on the pill label when drag starts. m_ClassDragger.RegisterCallbacksOnTarget(pill); m_ExplorerDragger.RegisterCallbacksOnTarget(pill); } else if (partStr.StartsWith(BuilderConstants.UssSelectorNameSymbol)) { var selectorPartLabel = new Label(partStr); selectorPartLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); selectorPartLabel.AddToClassList(BuilderConstants.ElementNameClassName); selectorLabelCont.Add(selectorPartLabel); } else if (partStr.StartsWith(BuilderConstants.UssSelectorPseudoStateSymbol)) { var selectorPartLabel = new Label(partStr); selectorPartLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); selectorPartLabel.AddToClassList(BuilderConstants.ElementPseudoStateClassName); selectorLabelCont.Add(selectorPartLabel); } else if (partStr == BuilderConstants.SingleSpace) { var selectorPartLabel = new Label(BuilderConstants.TripleSpace); selectorPartLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); selectorPartLabel.AddToClassList(BuilderConstants.ElementTypeClassName); selectorLabelCont.Add(selectorPartLabel); } else { var selectorPartLabel = new Label(partStr); selectorPartLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); selectorPartLabel.AddToClassList(BuilderConstants.ElementTypeClassName); selectorLabelCont.Add(selectorPartLabel); } } // Textfield to rename element in hierarchy. var renameField = explorerItem.CreateRenamingTextField(documentElement, null, m_Selection); labelCont.Add(renameField); // Allow reparenting. explorerItem.SetProperty(BuilderConstants.ExplorerItemElementLinkVEPropertyName, documentElement); // Check if selector element is inside current open StyleSheets if (documentElement.IsParentSelector()) { row.AddToClassList(BuilderConstants.ExplorerItemHiddenClassName); } return; } if (BuilderSharedStyles.IsDocumentElement(documentElement)) { var uxmlAsset = documentElement.GetVisualTreeAsset(); var ssLabel = new Label(BuilderAssetUtilities.GetVisualTreeAssetAssetName(uxmlAsset, hasUnsavedChanges)); ssLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); ssLabel.AddToClassList("unity-debugger-tree-item-type"); row.AddToClassList(BuilderConstants.ExplorerHeaderRowClassName); labelCont.Add(ssLabel); // Allow reparenting. explorerItem.SetProperty(BuilderConstants.ExplorerItemElementLinkVEPropertyName, documentElement); // Register right-click events for context menu actions. m_ContextMenuManipulator.RegisterCallbacksOnTarget(explorerItem); return; } // Check if element is inside current document. if (!documentElement.IsPartOfActiveVisualTreeAsset(m_PaneWindow.document)) { row.AddToClassList(BuilderConstants.ExplorerItemHiddenClassName); } // Register drag-and-drop events for reparenting. m_ExplorerDragger.RegisterCallbacksOnTarget(explorerItem); // Allow reparenting. explorerItem.SetProperty(BuilderConstants.ExplorerItemElementLinkVEPropertyName, documentElement); // Element type label. if (string.IsNullOrEmpty(documentElement.name) || elementInfoVisibilityState.HasFlag(BuilderExplorer.BuilderElementInfoVisibilityState.TypeName)) { var typeLabel = new Label(documentElement.typeName); typeLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); typeLabel.AddToClassList(BuilderConstants.ElementTypeClassName); labelCont.Add(typeLabel); } // Element name label. var nameLabel = new Label(); nameLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); nameLabel.AddToClassList("unity-debugger-tree-item-name-label"); nameLabel.AddToClassList(BuilderConstants.ExplorerItemNameLabelClassName); nameLabel.AddToClassList(BuilderConstants.ElementNameClassName); if (!string.IsNullOrEmpty(documentElement.name)) { nameLabel.text = BuilderConstants.UssSelectorNameSymbol + documentElement.name; } labelCont.Add(nameLabel); // Textfield to rename element in hierarchy. var renameTextfield = explorerItem.CreateRenamingTextField(documentElement, nameLabel, m_Selection); labelCont.Add(renameTextfield); // Add class list. if (documentElement.classList.Count > 0 && elementInfoVisibilityState.HasFlag(BuilderExplorer.BuilderElementInfoVisibilityState.ClassList)) { foreach (var ussClass in documentElement.GetClasses()) { var classLabelCont = new VisualElement(); classLabelCont.AddToClassList(BuilderConstants.ExplorerItemLabelContClassName); explorerItem.Add(classLabelCont); var classLabel = new Label(BuilderConstants.UssSelectorClassNameSymbol + ussClass); classLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); classLabel.AddToClassList(BuilderConstants.ElementClassNameClassName); classLabel.AddToClassList("unity-debugger-tree-item-classlist-label"); classLabelCont.Add(classLabel); } } // Add stylesheets. if (elementInfoVisibilityState.HasFlag(BuilderExplorer.BuilderElementInfoVisibilityState.StyleSheets)) { var vea = documentElement.GetVisualElementAsset(); if (vea != null) { foreach (var ussPath in vea.GetStyleSheetPaths()) { if (string.IsNullOrEmpty(ussPath)) { continue; } var classLabelCont = new VisualElement(); classLabelCont.AddToClassList(BuilderConstants.ExplorerItemLabelContClassName); explorerItem.Add(classLabelCont); var classLabel = new Label(Path.GetFileName(ussPath)); classLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); classLabel.AddToClassList(BuilderConstants.ElementAttachedStyleSheetClassName); classLabel.AddToClassList("unity-debugger-tree-item-classlist-label"); classLabelCont.Add(classLabel); } } else { for (int i = 0; i < documentElement.styleSheets.count; ++i) { var attachedStyleSheet = documentElement.styleSheets[i]; if (attachedStyleSheet == null) { continue; } var classLabelCont = new VisualElement(); classLabelCont.AddToClassList(BuilderConstants.ExplorerItemLabelContClassName); explorerItem.Add(classLabelCont); var classLabel = new Label(attachedStyleSheet.name + BuilderConstants.UssExtension); classLabel.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); classLabel.AddToClassList(BuilderConstants.ElementAttachedStyleSheetClassName); classLabel.AddToClassList("unity-debugger-tree-item-classlist-label"); classLabelCont.Add(classLabel); } } } // Show name of uxml file if this element is a TemplateContainer. var path = documentElement.GetProperty(BuilderConstants.LibraryItemLinkedTemplateContainerPathVEPropertyName) as string; Texture2D itemIcon; if (documentElement is TemplateContainer && !string.IsNullOrEmpty(path)) { var pathStr = Path.GetFileName(path); var label = new Label(pathStr); label.AddToClassList(BuilderConstants.ExplorerItemLabelClassName); label.AddToClassList(BuilderConstants.ElementTypeClassName); label.AddToClassList("unity-builder-explorer-tree-item-template-path"); // Just make it look a bit shaded. labelCont.Add(label); itemIcon = BuilderLibraryContent.GetUXMLAssetIcon(path); } else { itemIcon = BuilderLibraryContent.GetTypeLibraryIcon(documentElement.GetType()); } // Element icon. var icon = new VisualElement(); icon.AddToClassList(BuilderConstants.ExplorerItemIconClassName); var styleBackgroundImage = icon.style.backgroundImage; styleBackgroundImage.value = new Background { texture = itemIcon }; icon.style.backgroundImage = styleBackgroundImage; labelCont.Insert(0, icon); // Register right-click events for context menu actions. m_ContextMenuManipulator.RegisterCallbacksOnTarget(explorerItem); }