public JointField(Asset asset, SerializedProperty property, Asset.Metric metric) { m_Asset = asset; m_Property = property; m_Metric = metric; Foldout foldout = new Foldout { text = "Joints" }; foldout.AddToClassList("jointToggle"); foldout.value = property.isExpanded; Add(foldout); foldout.RegisterValueChangedCallback(evt => ToggleListVisibility()); Add(m_ListView); m_ListView.AddToClassList("jointsListView"); m_ListView.style.display = property.isExpanded ? DisplayStyle.Flex : DisplayStyle.None; Rebuild(); RegisterCallback <AttachToPanelEvent>(OnAttachToPanel); RegisterCallback <DetachFromPanelEvent>(OnDetachFromPanel); focusable = true; m_ForceDisabled = false; }
/// <summary> Draws the left column from the avaliable types. </summary> private void DrawLeftColumnItems() { // Clears out old visual elements. leftColumnItems.Clear(); DataManagerDataTypeFinder.CheckForNewDataTypes(); #region Sets up ListView. visibleEntries = new List <DataManagerSettingsEntry>(); foreach (DataManagerSettingsEntry entry in DataManagerSettingsAccessor.Settings.EntriesArray) { if (entry.visiblity == VisiblityToManager.Visible) { visibleEntries.Add(entry); } } Func <VisualElement> makeItem = () => new Label(); Action <VisualElement, int> bindItem = (e, i) => (e as Label).text = visibleEntries.ToArray()[i].typeAsString; bindItem += (e, i) => (e as Label).AddToClassList("item_list"); // Adds the class but does not use styling for some reason. const int itemHeight = 20; leftList = new ListView(visibleEntries, itemHeight, makeItem, bindItem); leftList.AddToClassList("list"); leftList.selectionType = SelectionType.Single; leftList.onSelectionChanged += CheckForSelectedType; leftColumnItems.Add(leftList); #endregion }
public PrivilegeSection(string label, Privilege.Category category) { m_Category = category; AddToClassList(ussClassName); AddToClassList(emptyVariantUssClassName); m_Header = new Label { text = label }; m_Header.AddToClassList(headerUssClassName); hierarchy.Add(m_Header); m_Body = new VisualElement(); m_Body.AddToClassList(bodyUssClassName); hierarchy.Add(m_Body); m_BodyContainer = new VisualElement(); m_BodyContainer.AddToClassList(containerUssClassName); m_Body.hierarchy.Add(m_BodyContainer); m_BodyListView = new ListView(null, kItemSize, MakeToggle, BindToggle); m_BodyListView.AddToClassList(listViewUssClassName); m_BodyContainer.hierarchy.Add(m_BodyListView); m_BodyEmptyLabel = new Label { text = "This section contains no privileges" }; m_BodyEmptyLabel.AddToClassList(emptyLabelUssClassName); m_Body.hierarchy.Add(m_BodyEmptyLabel); }
private ListView GetOrCreateList(LokiSearchTree tree, int pageIndex) { if (pageIndex < pageStack.Count) { var existingList = pageStack[pageIndex]; if (tree != null) { BindList(existingList, tree); } return(existingList); } var listView = new ListView(null, ITEM_HEIGHT, MakeEntryElement, BindEntryElement); listView.AddToClassList("search-list"); listView.showBorder = false; listView.style.width = size.x; listView.style.minWidth = size.x; listView.style.maxWidth = size.x; pageContainer.Add(listView); pageStack.Add(listView); BindList(listView, tree); return(listView); }
public AdapterListView() { AddToClassList(UssClassName); m_ListView = new ListView(); m_ListView.style.flexGrow = new StyleFloat(1); m_ListView.AddToClassList(ListViewUssClassName); Add(m_ListView); }
//[SettingsProvider] public static SettingsProvider CreateDataManagerSettings() { DataManagerDataTypeFinder.CheckForNewDataTypes(); currentTarget = null; SettingsProvider provider = new SettingsProvider("ACTools/Data Manager", SettingsScope.User) { activateHandler = (searchContext, rootElement) => { SerializedObject serializedSettings = DataManagerSettingsAccessor.GetSerializedSettings(); #region UXML and USS set-up // Import UXML and USS VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/_ACTools/_Data Manager/Editor/DataManagerSettingsProvider.uxml"); StyleSheet styleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/_ACTools/_Data Manager/Editor/DataManagerSettingsProvider.uss"); // Adds style sheet to root. rootElement.styleSheets.Add(styleSheet); // Clones the visual tree and adds it to the root. VisualElement tree = visualTree.CloneTree(); rootElement.Add(tree); #endregion #region Sets up button. if (button == null) { button = (Button)tree.hierarchy.ElementAt(1); } button.SetEnabled(false); button.clickable.clicked += SwitchTargetEnabledStatus; #endregion #region Sets up ListView. Func <VisualElement> makeItem = () => new Label(); Action <VisualElement, int> bindItem = (e, i) => (e as Label).text = DataManagerSettingsAccessor.Settings.EntriesArray[i].typeAsString; const int itemHeight = 16; listView = new ListView(DataManagerSettingsAccessor.Settings.EntriesArray, itemHeight, makeItem, bindItem); listView.AddToClassList("list"); listView.selectionType = SelectionType.Single; listView.onSelectionChanged += UpdateButton; rootElement.Add(listView); #endregion }, // Populate the search keywords to enable smart search filtering and label highlighting. keywords = new HashSet <string>(new[] { "ACTools", "Data", "Manager", "Data Manager" }) }; return(provider); }
void ApplyCollapseState() { if (m_Collapsed) { m_CollapseToggle.AddToClassList("collapsed-toggle-state"); m_LabelsListView.AddToClassList("collapsed"); } else { m_CollapseToggle.RemoveFromClassList("collapsed-toggle-state"); m_LabelsListView.RemoveFromClassList("collapsed"); } }
// CreateTopStatListView() creates a set of Labels containing high stats private void CreateTopStatListView() { int maximumAmountOfTopStats; // set the maximumAmountOfTopStats to 5 or less if (topStats.Count > 4) { maximumAmountOfTopStats = 5; } else { maximumAmountOfTopStats = topStats.Count; } var topStatsListItems = new List <string>(); topStatsListItems.Add("Your top points: " + GetRealmPlayerTopStat()); for (int i = 0; i < maximumAmountOfTopStats; i++) { // only display the top stats if they are greater than 0, and show // no top stats if there are none greater than 0 if (topStats[i].Score > 1) { topStatsListItems.Add($"{topStats[i].StatOwner.Name}: {topStats[i].Score} points"); } } ; // Create a new label for each top score var label = new Label(); label.AddToClassList("list-item-game-name-label"); Func <VisualElement> makeItem = () => new Label(); // Bind Stats to the UI Action <VisualElement, int> bindItem = (e, i) => { (e as Label).text = topStatsListItems[i]; (e as Label).AddToClassList("list-item-game-name-label"); }; // Provide the list view with an explict height for every row // so it can calculate how many items to actually display const int itemHeight = 5; listView = new ListView(topStatsListItems, itemHeight, makeItem, bindItem); listView.AddToClassList("list-view"); }
private void OnEnable() { rootVisualElement.styleSheets.Add(AssetDatabase.LoadAssetAtPath <StyleSheet>(StyleSheetPath)); var container = new ListView(); container.AddToClassList("slab-container"); for (var i = 0; i < Scores.Length; i++) { var score = Scores[i]; var scoreElement = new Score(i, score); container.Add(scoreElement); } rootVisualElement.Add(container); }
/// <summary> Draws the right column based on the currently selected type. </summary> private void DrawRightColumnItems() { // Clears out old visual elements. rightColumnItems.Clear(); if (DataTypeSelected) { #region Sets up List. selectedDataEntry = visibleEntries.ToArray()[leftList.selectedIndex]; Type stringToType = Type.GetType(selectedDataEntry.assemblyName); List <UnityEngine.Object> objectArray = FolderUtility.FindAssetsByType(stringToType); selectedDataObjects = new List <DataType>(); foreach (UnityEngine.Object obj in objectArray) { selectedDataObjects.Add((DataType)obj); } #endregion #region Sets up ListView. Label itemLabel = new Label(); itemLabel.AddToClassList("list_item"); Func <VisualElement> makeItem = () => new Label(); // Using the itemLabel cause the list to not add the first result for some reason. Action <VisualElement, int> bindItem = (e, i) => (e as Label).text = selectedDataObjects.ToArray()[i].name; const int itemHeight = 20; rightList = new ListView(selectedDataObjects, itemHeight, makeItem, bindItem); rightList.AddToClassList("list"); rightList.selectionType = SelectionType.Single; rightList.onSelectionChanged += CheckForSelectedObject; rightColumnItems.Add(rightList); #endregion } }
void OnEnable() { rootVisualElement.AddStyleSheet(Configuration.ElementsPath, Stylesheet); rootVisualElement.AddToClassList(UssClassName); var header = new VisualElement(); header.AddToClassList(HeaderUssClassName); _back = new Button(HistoryList.MoveBack) { text = "Back" }; _back.AddToClassList(HeaderButtonUssClassName); _forward = new Button(HistoryList.MoveForward) { text = "Forward" }; _forward.AddToClassList(HeaderButtonUssClassName); _listView = new ListView(); _listView.AddToClassList(ListUssClassName); _listView.selectionType = SelectionType.Single; _listView.itemsSource = HistoryList.History; _listView.makeItem = MakeItem; _listView.bindItem = BindItem; _listView.onItemChosen += item => Select(); _listView.onSelectionChanged += selection => Highlight(); header.Add(_back); header.Add(_forward); rootVisualElement.Add(header); rootVisualElement.Add(_listView); Refresh(); Selection.selectionChanged += Refresh; }
public TaggedAnimationClipSelector() { UIElementsUtils.ApplyStyleSheet("BoundaryClipWindow.uss", this); AddToClassList("clipSelector"); m_FilterString = string.Empty; m_FilterField = new ToolbarSearchField(); m_FilterField.RegisterValueChangedCallback(OnFilterChanged); Add(m_FilterField); var selectionArea = new VisualElement(); selectionArea.AddToClassList("row"); { m_RevertImage = new Image(); var revertClick = new Clickable(() => Changes = false); m_RevertImage.AddManipulator(revertClick); m_RevertImage.AddToClassList("revertIcon"); selectionArea.Add(m_RevertImage); m_CurrentSelectionLabel = new Label(); m_CurrentSelectionLabel.AddToClassList("selectionLabel"); selectionArea.Add(m_CurrentSelectionLabel); } Add(selectionArea); m_View = new ListView(); m_View.itemHeight = 18; m_View.makeItem = MakeItem; m_View.bindItem = BindItem; m_View.selectionType = SelectionType.None; m_View.AddToClassList("clipList"); Add(m_View); UpdateLabel(); }
public QualitySettingsPanelVisualElement(string searchContext) { // Get the assigned HDRP assets m_HDRPAssets = new List <HDRPAssetLocations>(); if (GraphicsSettings.renderPipelineAsset is HDRenderPipelineAsset hdrp) { m_HDRPAssets.Add(new HDRPAssetLocations(true, hdrp)); } var qualityLevelCount = QualitySettings.names.Length; for (var i = 0; i < qualityLevelCount; ++i) { if (!(QualitySettings.GetRenderPipelineAssetAt(i) is HDRenderPipelineAsset hdrp2)) { continue; } var index = m_HDRPAssets.FindIndex(a => a.asset == hdrp2); if (index >= 0) { m_HDRPAssets[index].indices.Add(i); } else { var loc = new HDRPAssetLocations(false, hdrp2); loc.indices.Add(i); m_HDRPAssets.Add(loc); } } m_HDRPAssets.Sort((l, r) => string.CompareOrdinal(l.asset.name, r.asset.name)); // title var title = new Label() { text = "Quality" }; title.AddToClassList("h1"); // Header var headerBox = new VisualElement(); headerBox.style.height = 200; m_HDRPAssetList = new ListView() { bindItem = (el, i) => ((HDRPAssetHeaderEntry)el).Bind(i, m_HDRPAssets[i]), itemHeight = (int)EditorGUIUtility.singleLineHeight + 3, selectionType = SelectionType.Single, itemsSource = m_HDRPAssets, makeItem = () => new HDRPAssetHeaderEntry(), }; m_HDRPAssetList.AddToClassList("unity-quality-header-list"); #if UNITY_2020_1_OR_NEWER m_HDRPAssetList.onSelectionChange += OnSelectionChange; #else m_HDRPAssetList.onSelectionChanged += OnSelectionChanged; #endif headerBox.Add(m_HDRPAssetList); m_InspectorTitle = new Label(); m_InspectorTitle.text = "No asset selected"; m_InspectorTitle.AddToClassList("h1"); // Inspector var inspector = new IMGUIContainer(DrawInspector); inspector.style.flexGrow = 1; inspector.style.flexDirection = FlexDirection.Row; var inspectorBox = new ScrollView(); inspectorBox.style.flexGrow = 1; inspectorBox.style.flexDirection = FlexDirection.Row; inspectorBox.contentContainer.Add(inspector); Add(title); Add(headerBox); Add(m_InspectorTitle); Add(inspectorBox); }
private void SetupUI() { var styleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>($"{Utils.packageFolderName}/Editor/StyleSheets/PerformanceTrackerWindow.uss"); rootVisualElement.styleSheets.Add(styleSheet); m_RefreshFromSearch = Delayer.Throttle(RefreshFromSearch); var toolbar = new UIElements.Toolbar(); toolbar.AddToClassList("perf-toolbar"); toolbar.style.height = PtStyles.itemHeight; var searchBox = new VisualElement(); searchBox.AddToClassList("perf-search-box"); AddSelectorLabel(toolbar, "Tracker"); m_SearchField = new UIElements.ToolbarSearchField(); m_SearchField.AddToClassList("perf-search-tracker"); m_SearchField.value = m_FilterText; m_SearchField.RegisterCallback <ChangeEvent <string> >((evt) => { m_RefreshFromSearch.Execute(evt.newValue); }); searchBox.Add(m_SearchField); toolbar.Add(searchBox); var resetAllCountersButton = new Button(ResetAllCounters); resetAllCountersButton.text = "Reset all counters"; resetAllCountersButton.AddToClassList("perf-tracker-toolbar-button"); toolbar.Add(resetAllCountersButton); AddSelectorLabel(toolbar, "Update Speed"); var choices = PtModel.RefreshRates.Select(r => r.label).ToList(); var updateSpeedSelector = new UIElements.PopupField <string>(choices, 0); updateSpeedSelector.value = PtModel.RefreshRates[m_UpdateSpeedIndex].label; updateSpeedSelector.AddToClassList("perf-update-speed-selector"); updateSpeedSelector.RegisterCallback <ChangeEvent <string> >((evt) => { m_UpdateSpeedIndex = Array.FindIndex(PtModel.RefreshRates, (r) => r.label == evt.newValue); ScheduleNextRefresh(); SendAnalytics(Analytics.WindowUsageType.ChangeMonitoringSpeed); }); toolbar.Add(updateSpeedSelector); AddSelectorLabel(toolbar, "Columns"); var columnsChoice = PtModel.ColumnDescriptors.Where(desc => desc.columnsSelectorMaskId > 0).Select(desc => desc.label).ToList(); var columnsSelector = new UIElements.MaskField(columnsChoice, m_ShownColumn); columnsSelector.RegisterCallback <ChangeEvent <int> >((evt) => { m_ShownColumn = evt.newValue; CreateHeaders(); RefreshTrackers(); SendAnalytics(Analytics.WindowUsageType.ChangeColumnLayout); }); columnsSelector.AddToClassList("perf-columns-selector"); toolbar.Add(columnsSelector); AddSelectorLabel(toolbar, "Sort By"); m_SortBySelector = new UIElements.EnumField(ColumnId.Name); m_SortBySelector.value = m_SortBy; m_SortBySelector.AddToClassList("perf-sort-by-selector"); m_SortBySelector.RegisterCallback <ChangeEvent <Enum> >((evt) => { ChangeSortOrder((ColumnId)evt.newValue); SendAnalytics(Analytics.WindowUsageType.ChangeSortBy); }); toolbar.Add(m_SortBySelector); var settingsBtn = new Button(() => { SettingsService.OpenUserPreferences(PerformanceTrackerSettings.settingsKey); SendAnalytics(Analytics.WindowUsageType.OpenPreferences); }); settingsBtn.style.backgroundImage = Icons.settings; settingsBtn.style.width = PtStyles.itemHeight - 3; settingsBtn.style.height = PtStyles.itemHeight - 3; toolbar.Add(settingsBtn); rootVisualElement.Add(toolbar); // Set List View Header: m_HeaderRow = new VisualElement(); m_HeaderRow.AddToClassList("perf-header-row-container"); m_HeaderRow.style.flexDirection = FlexDirection.Row; rootVisualElement.Add(m_HeaderRow); CreateHeaders(); m_PinnedTrackersView = new ListView(m_PinnedTrackers, PtStyles.itemHeight, MakeItem, BindPinnedItem); m_PinnedTrackersView.name = k_PinnedTrackerList; m_PinnedTrackersView.AddToClassList("perf-tracker-list"); m_PinnedTrackersView.selectionType = SelectionType.Multiple; m_PinnedTrackersView.style.flexGrow = 0; m_PinnedTrackersView.Q <VisualElement>(null, "unity-scroll-view__content-viewport").RegisterCallback <GeometryChangedEvent>(SyncHeaderAndListsGeometry); rootVisualElement.Add(m_PinnedTrackersView); m_TrackersView = new ListView(m_FilteredTrackers, PtStyles.itemHeight, MakeItem, BindUnpinnedItem); m_TrackersView.name = k_TrackerList; m_TrackersView.AddToClassList("perf-tracker-list"); m_TrackersView.selectionType = SelectionType.Multiple; m_TrackersView.style.flexGrow = 1.0f; m_TrackersView.Q <VisualElement>(null, "unity-scroll-view__content-viewport").RegisterCallback <GeometryChangedEvent>(SyncHeaderAndListsGeometry); rootVisualElement.Add(m_TrackersView); m_NeedsUpdate = true; ScheduleNextRefresh(); UpdateTrackers(); }
public EventTypeSearchField() { m_Choices = new List <EventTypeChoice>(); m_State = new Dictionary <long, bool>(); m_GroupedEvents = new Dictionary <string, List <long> >(); AppDomain currentDomain = AppDomain.CurrentDomain; HashSet <string> userAssemblies = new HashSet <string>(ScriptingRuntime.GetAllUserAssemblies()); foreach (Assembly assembly in currentDomain.GetAssemblies()) { if (userAssemblies.Contains(assembly.GetName().Name + ".dll")) { continue; } try { foreach (var type in assembly.GetTypes().Where(t => typeof(EventBase).IsAssignableFrom(t) && !t.ContainsGenericParameters)) { // Only select Pointer events on startup AddType(type, IsGenericTypeOf(type, typeof(PointerEventBase <>))); } // Special case for ChangeEvent<>. var implementingTypes = GetAllTypesImplementingOpenGenericType(typeof(INotifyValueChanged <>), assembly).ToList(); foreach (var valueChangedType in implementingTypes) { var baseType = valueChangedType.BaseType; if (baseType == null || baseType.GetGenericArguments().Length <= 0) { continue; } var argumentType = baseType.GetGenericArguments()[0]; if (!argumentType.IsGenericParameter) { AddType(typeof(ChangeEvent <>).MakeGenericType(argumentType), false); } } } catch (TypeLoadException e) { Debug.LogWarningFormat("Error while loading types from assembly {0}: {1}", assembly.FullName, e); } catch (ReflectionTypeLoadException e) { for (var i = 0; i < e.LoaderExceptions.Length; i++) { if (e.LoaderExceptions[i] != null) { Debug.LogError(e.Types[i] + ": " + e.LoaderExceptions[i].Message); } } } } m_State.Add(0, false); // Add groups, with negative ids. var keyIndex = -1; foreach (var key in m_GroupedEvents.Keys.OrderBy(k => k)) { m_Choices.Add(new EventTypeChoice() { Name = key, Group = key, TypeId = keyIndex }); m_State.Add(keyIndex--, key.Contains("IPointerEvent")); } m_Choices.Sort(); m_Choices.Insert(0, new EventTypeChoice() { Name = "IAll", Group = "IAll", TypeId = 0 }); m_FilteredChoices = m_Choices.ToList(); m_MenuContainer = new VisualElement(); m_MenuContainer.AddToClassList(ussClassName); m_OuterContainer = new VisualElement(); m_OuterContainer.AddToClassList(ussContainerClassName); m_MenuContainer.Add(m_OuterContainer); m_ListView = new ListView(); m_ListView.AddToClassList(ussListViewClassName); m_ListView.pickingMode = PickingMode.Position; m_ListView.showBoundCollectionSize = false; m_ListView.fixedItemHeight = 20; m_ListView.selectionType = SelectionType.None; m_ListView.showAlternatingRowBackgrounds = AlternatingRowBackground.All; m_ListView.makeItem = () => { var container = new VisualElement(); container.AddToClassList(ussItemContainerClassName); var toggle = new Toggle(); toggle.labelElement.AddToClassList(ussItemLabelClassName); toggle.visualInput.AddToClassList(ussItemToggleClassName); toggle.RegisterValueChangedCallback(OnToggleValueChanged); container.Add(toggle); var label = new Label(); label.AddToClassList(ussItemCountClassName); label.pickingMode = PickingMode.Ignore; container.Add(label); return(container); }; m_ListView.bindItem = (element, i) => { var toggle = element[0] as Toggle; var countLabel = element[1] as Label; var choice = m_FilteredChoices[i]; toggle.SetValueWithoutNotify(m_State[choice.TypeId]); var isGroup = choice.Name == choice.Group; toggle.label = isGroup ? $"{choice.Group.Substring(1).Replace("Event", "")} Events" : choice.Name; toggle.labelElement.RemoveFromClassList(isGroup ? ussItemLabelClassName : ussGroupLabelClassName); toggle.labelElement.AddToClassList(isGroup ? ussGroupLabelClassName : ussItemLabelClassName); toggle.userData = i; if (m_EventCountLog != null && m_EventCountLog.ContainsKey(choice.TypeId)) { countLabel.style.display = DisplayStyle.Flex; countLabel.text = m_EventCountLog[choice.TypeId].ToString(); } else { countLabel.text = ""; countLabel.style.display = DisplayStyle.None; } }; m_ListView.itemsSource = m_FilteredChoices; m_OuterContainer.Add(m_ListView); UpdateTextHint(); m_MenuContainer.RegisterCallback <AttachToPanelEvent>(OnAttachToPanel); m_MenuContainer.RegisterCallback <DetachFromPanelEvent>(OnDetachFromPanel); textInputField.RegisterValueChangedCallback(OnValueChanged); RegisterCallback <FocusInEvent>(OnFocusIn); RegisterCallback <FocusEvent>(OnFocus); RegisterCallback <FocusOutEvent>(OnFocusOut); }