Skip to content

Commit 490b67c

Browse files
authored
Merge pull request #61 from OpenCommissioning/development
Development
2 parents 935fa88 + 5ad19cd commit 490b67c

17 files changed

Lines changed: 508 additions & 229 deletions
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
2+
<uie:Toolbar>
3+
<uie:ToolbarSearchField name="toolbarSearchField" />
4+
<uie:ToolbarButton text="Refresh" parse-escape-sequences="true" display-tooltip-when-elided="true" name="toolbarButtonRefresh" />
5+
</uie:Toolbar>
6+
<ui:VisualElement name="content" style="flex-grow: 1;" />
7+
<uie:Toolbar style="flex-direction: row-reverse;">
8+
<uie:ToolbarButton text="Reset" parse-escape-sequences="true" display-tooltip-when-elided="true" name="toolbarButtonReset" />
9+
</uie:Toolbar>
10+
</ui:UXML>

Editor/Resources/UXML/ProjectInspector.uxml.meta

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/Scripts/Hierarchy.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using UnityEngine.SceneManagement;
4+
using UnityEngine.UIElements;
5+
6+
namespace OC.Editor
7+
{
8+
public static class HierarchyFactory
9+
{
10+
public static List<TreeViewItemData<HierarchyItem>> CreateTreeViewData<T>(Scene scene, Func<T, string[]> getHierarchyLevels) where T : IComponent
11+
{
12+
var components = new List<T>();
13+
14+
foreach (var rootGameObject in scene.GetRootGameObjects())
15+
{
16+
components.AddRange(rootGameObject.GetComponentsInChildren<T>());
17+
}
18+
19+
var root = new HierarchyItem(scene.name, null);
20+
21+
foreach (var component in components)
22+
{
23+
var level = getHierarchyLevels(component);
24+
25+
var parent = root;
26+
27+
for (var i = 0; i < level.Length - 1; i++)
28+
{
29+
HierarchyItem view = null;
30+
if (parent.HasChildren)
31+
{
32+
foreach (var child in parent.Children)
33+
{
34+
if (!string.Equals(child.Name, level[i])) continue;
35+
view = child;
36+
break;
37+
}
38+
}
39+
40+
if (view == null)
41+
{
42+
view = new HierarchyItem(level[i], null);
43+
parent.Children.Add(view);
44+
}
45+
46+
parent = view;
47+
}
48+
49+
parent.Children.Add(new HierarchyItem(component.Component.name, component.Component));
50+
}
51+
52+
return ResampleTreeViewData(root);
53+
}
54+
55+
public static List<TreeViewItemData<HierarchyItem>> FilterByName(this List<TreeViewItemData<HierarchyItem>> source, string name)
56+
{
57+
var root = new HierarchyItem("root", null);
58+
59+
foreach (var item in source)
60+
{
61+
root.Children.AddRange(GetChildrenByFilteredName(item.data, name));
62+
}
63+
64+
return ResampleTreeViewData(root);
65+
}
66+
67+
private static List<TreeViewItemData<HierarchyItem>> ResampleTreeViewData(HierarchyItem treeViewData)
68+
{
69+
var result = new List<TreeViewItemData<HierarchyItem>>();
70+
var count = 0;
71+
72+
foreach (var rootChild in treeViewData.Children)
73+
{
74+
result.Add(CreateTreeItem(rootChild, ref count));
75+
}
76+
77+
return result;
78+
}
79+
80+
private static TreeViewItemData<HierarchyItem> CreateTreeItem(HierarchyItem item, ref int count)
81+
{
82+
if (item.HasChildren)
83+
{
84+
var itemDataIndex = count++;
85+
86+
var children = new List<TreeViewItemData<HierarchyItem>>();
87+
foreach (var child in item.Children)
88+
{
89+
children.Add(CreateTreeItem(child, ref count));
90+
}
91+
return new TreeViewItemData<HierarchyItem>(itemDataIndex, item, children);
92+
}
93+
else
94+
{
95+
return new TreeViewItemData<HierarchyItem>(count++, item);
96+
}
97+
}
98+
99+
private static List<HierarchyItem> GetChildrenByFilteredName(HierarchyItem source, string name)
100+
{
101+
var result = new List<HierarchyItem>();
102+
103+
if (source.HasChildren)
104+
{
105+
foreach (var child in source.Children)
106+
{
107+
result.AddRange(GetChildrenByFilteredName(child, name));
108+
}
109+
}
110+
else
111+
{
112+
if (source.Name.Contains(name, StringComparison.OrdinalIgnoreCase)) result.Add(source);
113+
}
114+
115+
return result;
116+
}
117+
}
118+
}

Editor/Scripts/Hierarchy/HierarchyFactory.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System.Collections.Generic;
2+
using UnityEngine;
3+
4+
namespace OC.Editor
5+
{
6+
public class HierarchyItem
7+
{
8+
public string Name { get; private set; }
9+
public Component Component { get; private set; }
10+
public List<HierarchyItem> Children { get; private set; }
11+
public bool HasChildren => Children is { Count: > 0 };
12+
13+
public HierarchyItem(string name, Component component, List<HierarchyItem> children = null)
14+
{
15+
Name = name;
16+
Component = component;
17+
Children = children ?? new List<HierarchyItem>();
18+
}
19+
}
20+
}

Editor/Scripts/Hierarchy/HierarchyItem.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)