public static void InitializeMaterialPropertyColumn(SearchColumn column) { column.getter = args => MaterialPropertyGetter(args.item, args.column); column.setter = args => SetMaterialPropertyValue(args.item, args.column, args.value); column.drawer = args => MaterialPropertyDrawer(args.rect, args.value); column.comparer = args => MaterialPropertyComparer(args.lhs.value, args.rhs.value, args.sortAscending); }
internal static MaterialProperty GetMaterialProperty(SearchItem item, SearchColumn column) { var mat = item.ToObject <Material>(); if (!mat) { return(null); } foreach (var m in SelectorManager.Match(column.selector, item.provider?.type)) { var selectorArgs = new SearchSelectorArgs(m, item); if (selectorArgs.name == null) { continue; } if (!mat.HasProperty(selectorArgs.name)) { continue; } return(MaterialEditor.GetMaterialProperty(new Object[] { mat }, selectorArgs.name)); } return(null); }
static void FillSerializedPropertyColumns(UnityEngine.Object obj, Type objType, List <SearchColumn> columns) { var iconType = Utils.FindTextureForType(objType); using (var so = new SerializedObject(obj)) { var p = so.GetIterator(); var next = p.NextVisible(true); while (next) { var supported = IsPropertyTypeSupported(p); if (supported) { var column = new SearchColumn( path: $"{objType.Name}/{p.propertyPath.Replace(".", "/")}", selector: "#" + p.propertyPath, provider: p.propertyType.ToString(), content: new GUIContent(Utils.TrimText(p.displayName, 31), iconType, p.tooltip)); Styles.itemLabel.CalcMinMaxWidth(column.content, out column.width, out _); if (p.hasVisibleChildren) { column.width = Mathf.Min(220, column.width); } columns.Add(column); } var isVector = p.propertyType == SerializedPropertyType.Vector3 || p.propertyType == SerializedPropertyType.Vector4 || p.propertyType == SerializedPropertyType.Quaternion || p.propertyType == SerializedPropertyType.Vector2; next = p.NextVisible(supported && !p.isArray && !p.isFixedBuffer && !isVector); } } }
public static void InitializeColumn(SearchColumn column) { column.provider = ""; column.getter = args => { args.item.TryGetValue(args.column.selector, out var field); return(field.value); }; column.setter = null; column.drawer = args => { if (args.value == null) { return(null); } if (args.value is SearchReport.ObjectValue v) { if (v.objectValue == null) { PropertyTable.DefaultDrawing(args.rect, args.column, v.fallbackString); } else { PropertySelectors.DrawObjectReference(args.rect, v.objectValue); } } else if (args.value is Color c) { return(EditorGUI.ColorField(args.rect, c, showEyedropper: false, showAlpha: true)); } else { PropertyTable.DefaultDrawing(args.rect, args.column, args.value); } return(args.value); }; column.comparer = null; }
public static void InitializeSerializedPropertyColumn(SearchColumn column) { column.getter = args => Getter(args.item, args.column); column.setter = args => Setter(args.item, args.column, args.value, args.multiple); column.drawer = args => Drawer(args.rect, args.value); column.comparer = args => Comparer(args.lhs.value, args.rhs.value, args.sortAscending); }
private AdvancedDropdownItem MakeParents(string prefix, SearchColumn desc, AdvancedDropdownItem parent) { var parts = prefix.Split('/'); foreach (var p in parts) { var f = FindItem(p, parent); if (f != null) { parent = f; } else { AdvancedDropdownItem newItem = new AdvancedDropdownItem(p) { icon = desc.content.image as Texture2D, tooltip = desc.content.tooltip }; newItem.AddChild(new AdvancedDropdownItem(k_AddlAllItemName) { userData = newItem }); parent.AddChild(newItem); parent = newItem; } } return(parent); }
private void Sort(IList <TreeViewItem> rows, int sortIdx) { Debug.Assert(sortIdx >= 0); SearchColumn column = Col(sortIdx); if (column == null) { return; } var get = column.getter; if (get == null) { return; } var myRows = rows as List <TreeViewItem>; var sortAscending = multiColumnHeader.IsSortedAscending(sortIdx); var sortOrder = sortAscending ? 1 : -1; var comp = column.comparer; if (comp == null) { if (column.getter != null) { if (rows.Count > 0) { myRows.Sort((lhs, rhs) => { var lhsargs = new SearchColumnEventArgs(((PropertyItem)lhs).GetData(), m_TableView.context, column); var rhsargs = new SearchColumnEventArgs(((PropertyItem)rhs).GetData(), m_TableView.context, column); var lhsv = get(lhsargs); if (lhsv is IComparable c) { return(Comparer.Default.Compare(c, get(rhsargs)) * sortOrder); } return(Comparer.Default.Compare(lhsv?.GetHashCode() ?? 0, get(rhsargs)?.GetHashCode() ?? 0) * sortOrder); }); } } return; } myRows.Sort((lhs, rhs) => { var lhsargs = new SearchColumnEventArgs(((PropertyItem)lhs).GetData(), m_TableView.context, column); var rhsargs = new SearchColumnEventArgs(((PropertyItem)rhs).GetData(), m_TableView.context, column); lhsargs.value = get(lhsargs); rhsargs.value = get(rhsargs); return(comp(new SearchColumnCompareArgs(lhsargs, rhsargs, sortAscending)) * sortOrder); }); }
internal static void InitializeSelectableColumn(SearchColumn column) { column.drawer = args => { var itemStyle = GetItemContentStyle(args.column); EditorGUI.SelectableLabel(args.rect, args.value?.ToString() ?? string.Empty, itemStyle); return(args.value); }; }
static object MaterialPropertyGetter(SearchItem item, SearchColumn column) { var matProp = GetMaterialProperty(item, column); if (matProp == null) { return(null); } return(matProp); }
public void AddColumnHeaderContextMenuItems(GenericMenu menu, SearchColumn sourceColumn) { menu.AddItem(new GUIContent("Column Format/Default"), string.IsNullOrEmpty(sourceColumn.provider), () => sourceColumn.SetProvider(null)); foreach (var scp in SearchColumnProvider.providers) { var provider = scp.provider; var selected = string.Equals(sourceColumn.provider, provider, StringComparison.Ordinal); var menuContent = new GUIContent("Column Format/" + ObjectNames.NicifyVariableName(provider)); menu.AddItem(menuContent, selected, () => sourceColumn.SetProvider(provider)); } }
public SearchColumnEventArgs(SearchItem item, SearchContext context, SearchColumn column) { this.item = item; this.context = context; this.column = column; value = null; multiple = false; rect = Rect.zero; focused = false; selected = false; }
public static void InitializeColorColumn(SearchColumn column) { column.drawer = args => { if (args.value is Color c) { return(EditorGUI.ColorField(args.rect, GUIContent.none, c, showEyedropper: false, showAlpha: true, hdr: false)); } return(args.value); }; }
public static void InitializeTextureColumn(SearchColumn column) { column.drawer = args => { if (args.value is Texture t) { GUI.DrawTexture(args.rect, t, ScaleMode.ScaleToFit); } return(args.value); }; }
public static GUIStyle GetItemContentStyle(SearchColumn column) { if (column.options.HasAny(SearchColumnFlags.TextAlignmentCenter)) { return(Styles.itemLabelCenterAligned); } if (column.options.HasAny(SearchColumnFlags.TextAlignmentRight)) { return(Styles.itemLabelrightAligned); } return(Styles.itemLabelLeftAligned); }
internal static void DefaultDrawing(Rect cellRect, SearchColumn column, object value) { if (value is Texture2D tex) { GUI.DrawTexture(cellRect, tex, ScaleMode.ScaleToFit); } else { var itemStyle = ItemSelectors.GetItemContentStyle(column); GUI.Label(cellRect, value.ToString(), itemStyle); } }
public static void Initialize(SearchColumn column) { foreach (var p in providers) { if (!string.Equals(p.provider, column.provider, StringComparison.OrdinalIgnoreCase)) { continue; } p.handler(column); break; } }
internal static void InitializeCountColumn(SearchColumn column) { column.drawer = args => { var itemStyle = GetItemContentStyle(args.column); if (Utils.TryGetNumber(args.value, out var n)) { GUI.Label(args.rect, Utils.FormatCount((ulong)n), itemStyle); } else { GUI.Label(args.rect, args.value?.ToString() ?? string.Empty, itemStyle); } return(args.value); }; }
internal static void SetMaterialPropertyValue(SearchItem item, SearchColumn column, object newValue) { var matProp = GetMaterialProperty(item, column); if (matProp == null) { return; } switch (matProp.type) { case MaterialProperty.PropType.Color: if (matProp.colorValue != (Color)newValue) { matProp.colorValue = (Color)newValue; } break; case MaterialProperty.PropType.Vector: if (matProp.vectorValue != (Vector4)newValue) { matProp.vectorValue = (Vector4)newValue; } break; case MaterialProperty.PropType.Float: if (matProp.floatValue != (float)newValue) { matProp.floatValue = (float)newValue; } break; case MaterialProperty.PropType.Range: if (matProp.floatValue != (float)newValue) { matProp.floatValue = (float)newValue; } break; case MaterialProperty.PropType.Texture: if (matProp.textureValue != (Texture)newValue) { matProp.textureValue = (Texture)newValue; } break; } }
public static IEnumerable <SearchColumn> Enumerate(IEnumerable <SearchItem> items) { var descriptors = new List <SearchColumn>(); var shaderProcessed = new HashSet <string>(); bool materialRootItemAdded = false; foreach (var item in items) { var material = item.ToObject <Material>(); if (!material) { continue; } if (!materialRootItemAdded) { descriptors.Add(new SearchColumn("Material", new GUIContent("Material", Utils.FindTextureForType(typeof(Material))))); materialRootItemAdded = true; } if (shaderProcessed.Contains(material.shader.name)) { continue; } shaderProcessed.Add(material.shader.name); var shaderPath = "Material/" + material.shader.name; var shaderIcon = Utils.FindTextureForType(typeof(Shader)); descriptors.Add(new SearchColumn(shaderPath, new GUIContent(material.shader.name, shaderIcon))); var materialProperties = MaterialEditor.GetMaterialProperties(new Object[] { material }); for (var i = 0; i < materialProperties.Length; i++) { var m = materialProperties[i]; var propName = m.name; var propPath = shaderPath + "/" + propName; var col = new SearchColumn(propPath, "#" + propName, provider: $"{m.type}", new GUIContent(m.displayName, shaderIcon, m.name)); descriptors.Add(col); } } return(descriptors); }
internal static SerializedProperty GetSerializedProperty(SearchItem item, SearchColumn column, out SerializedObject so) { foreach (var m in SelectorManager.Match(column.selector, item.provider?.type)) { var selectorArgs = new SearchSelectorArgs(m, item); if (selectorArgs.name == null) { continue; } var property = GetSerializedProperty(item, selectorArgs.name, out so); if (property == null) { so?.Dispose(); continue; } so.UpdateIfRequiredOrScript(); return(property); } so = null; return(null); }
public static void Setter(SearchItem item, SearchColumn column, object newValue, bool multiple) { if (!(newValue is SerializedProperty newValueProperty)) { return; } if (!multiple) { newValueProperty.serializedObject.ApplyModifiedProperties(); } else { var property = GetSerializedProperty(item, column, out var so); if (property != null && so != null) { so.CopyFromSerializedProperty(newValueProperty); so.ApplyModifiedProperties(); property.Dispose(); so.Dispose(); } } }
public static void InitializeObjectReferenceColumn(SearchColumn column) { column.drawer = DrawObjectReference; }
protected override AdvancedDropdownItem BuildRoot() { var rootItem = new AdvancedDropdownItem(m_Title); foreach (var column in m_Columns) { var path = column.path; var pos = path.LastIndexOf('/'); var name = pos == -1 ? column.name : path.Substring(pos + 1); var prefix = pos == -1 ? null : path.Substring(0, pos); AdvancedDropdownItem newItem = new AdvancedDropdownItem(name) { displayName = string.IsNullOrEmpty(column.content.text) ? column.content.tooltip : SearchColumn.ParseName(column.content.text), icon = column.content.image as Texture2D, tooltip = column.content.tooltip, userData = column }; var parent = rootItem; if (prefix != null) { parent = MakeParents(prefix, column, rootItem); } if (FindItem(name, parent) == null) { parent.AddChild(newItem); } } rootItem.SortChildren(SortColumnProviders); foreach (var c in rootItem.children) { c.SortChildren(SortColumns, true); } return(rootItem); }
public PropertyColumn(SearchColumn c) { userDataObj = c; }
public void AddColumnHeaderContextMenuItems(GenericMenu menu, SearchColumn sourceColumn) => throw new NotImplementedException();
public static object Getter(SearchItem item, SearchColumn column) { var p = GetSerializedProperty(item, column, out var _); return(p); }
public static SearchColumn CreateColumn(string path, string selector = null, string provider = null, SearchColumnFlags options = SearchColumnFlags.Default) { var pname = SearchColumn.ParseName(path); return(new SearchColumn(path, selector ?? path, provider, new GUIContent(pname), options)); }
public static void InitializeObjectPathColumn(SearchColumn column) { column.getter = GetObjectPath; }
public static void InitializeObjectReferenceColumn(SearchColumn column) { column.drawer = args => DrawObjectReference(args.rect, args.value); }
public static void InitializeObjectReferenceColumn(SearchColumn column) { column.getter = args => GetEnabled(args.item); column.drawer = args => DrawEnabled(args); column.setter = args => SetEnabled(args); }