@@ -12,9 +12,19 @@ public class PointsOfInterestSubLayerPropertiesDrawer
1212 string objectId = "" ;
1313 static float _lineHeight = EditorGUIUtility . singleLineHeight ;
1414
15- PointsOfInterestSubLayerTreeView layerTreeView = new PointsOfInterestSubLayerTreeView ( new TreeViewState ( ) ) ;
15+ //PointsOfInterestSubLayerTreeView layerTreeView = new PointsOfInterestSubLayerTreeView(new TreeViewState());
16+ FeatureSubLayerTreeView layerTreeView ; // = new FeatureSubLayerTreeView
1617 IList < int > selectedLayers = new List < int > ( ) ;
1718
19+ private TreeModel < FeatureTreeElement > treeModel ;
20+ [ SerializeField ]
21+ TreeViewState m_TreeViewState ;
22+
23+ [ SerializeField ]
24+ MultiColumnHeaderState m_MultiColumnHeaderState ;
25+
26+ bool m_Initialized = false ;
27+
1828 int SelectionIndex
1929 {
2030 get
@@ -31,8 +41,40 @@ public void DrawUI(SerializedProperty property)
3141 {
3242 objectId = property . serializedObject . targetObject . GetInstanceID ( ) . ToString ( ) ;
3343 var prefabItemArray = property . FindPropertyRelative ( "locationPrefabList" ) ;
34- var layersRect = EditorGUILayout . GetControlRect ( GUILayout . MinHeight ( Mathf . Max ( prefabItemArray . arraySize + 1 , 1 ) * _lineHeight ) ,
35- GUILayout . MaxHeight ( ( prefabItemArray . arraySize + 1 ) * _lineHeight ) ) ;
44+ var layersRect = EditorGUILayout . GetControlRect ( GUILayout . MinHeight ( Mathf . Max ( prefabItemArray . arraySize + 1 , 1 ) * _lineHeight + MultiColumnHeader . DefaultGUI . defaultHeight ) ,
45+ GUILayout . MaxHeight ( ( prefabItemArray . arraySize + 1 ) * _lineHeight + MultiColumnHeader . DefaultGUI . defaultHeight ) ) ;
46+
47+ if ( ! m_Initialized )
48+ {
49+ bool firstInit = m_MultiColumnHeaderState == null ;
50+ var headerState = FeatureSubLayerTreeView . CreateDefaultMultiColumnHeaderState ( ) ;
51+ if ( MultiColumnHeaderState . CanOverwriteSerializedFields ( m_MultiColumnHeaderState , headerState ) )
52+ {
53+ MultiColumnHeaderState . OverwriteSerializedFields ( m_MultiColumnHeaderState , headerState ) ;
54+ }
55+ m_MultiColumnHeaderState = headerState ;
56+
57+ var multiColumnHeader = new FeatureSectionMultiColumnHeader ( headerState ) ;
58+
59+ if ( firstInit )
60+ {
61+ multiColumnHeader . ResizeToFit ( ) ;
62+ }
63+
64+ treeModel = new TreeModel < FeatureTreeElement > ( GetData ( prefabItemArray ) ) ;
65+ if ( m_TreeViewState == null )
66+ {
67+ m_TreeViewState = new TreeViewState ( ) ;
68+ }
69+
70+ if ( layerTreeView == null )
71+ {
72+ layerTreeView = new FeatureSubLayerTreeView ( m_TreeViewState , multiColumnHeader , treeModel , FeatureSubLayerTreeView . uniqueIdPoI ) ;
73+ }
74+ layerTreeView . multiColumnHeader = multiColumnHeader ;
75+ m_Initialized = true ;
76+ }
77+
3678
3779 layerTreeView . Layers = prefabItemArray ;
3880 layerTreeView . Reload ( ) ;
@@ -50,9 +92,9 @@ public void DrawUI(SerializedProperty property)
5092 if ( selectedLayers . Count > 0 )
5193 {
5294 //ensure that selectedLayers[0] isn't out of bounds
53- if ( selectedLayers [ 0 ] > prefabItemArray . arraySize - 1 )
95+ if ( selectedLayers [ 0 ] - FeatureSubLayerTreeView . uniqueIdPoI > prefabItemArray . arraySize - 1 )
5496 {
55- selectedLayers [ 0 ] = prefabItemArray . arraySize - 1 ;
97+ selectedLayers [ 0 ] = prefabItemArray . arraySize - 1 + FeatureSubLayerTreeView . uniqueIdPoI ;
5698 }
5799
58100 SelectionIndex = selectedLayers [ 0 ] ;
@@ -61,7 +103,7 @@ public void DrawUI(SerializedProperty property)
61103 else
62104 {
63105 selectedLayers = new int [ 1 ] { SelectionIndex } ;
64- if ( SelectionIndex > 0 && ( SelectionIndex <= prefabItemArray . arraySize - 1 ) )
106+ if ( SelectionIndex > 0 && ( SelectionIndex - FeatureSubLayerTreeView . uniqueIdPoI <= prefabItemArray . arraySize - 1 ) )
65107 {
66108 layerTreeView . SetSelection ( selectedLayers ) ;
67109 }
@@ -74,10 +116,7 @@ public void DrawUI(SerializedProperty property)
74116 if ( GUILayout . Button ( new GUIContent ( "Add Layer" ) , ( GUIStyle ) "minibuttonleft" ) )
75117 {
76118
77- GUILayout . Space ( EditorGUIUtility . singleLineHeight ) ;
78-
79- selectedLayers = layerTreeView . GetSelection ( ) ;
80-
119+ //GUILayout.Space(EditorGUIUtility.singleLineHeight);
81120 prefabItemArray . arraySize ++ ;
82121
83122 var prefabItem = prefabItemArray . GetArrayElementAtIndex ( prefabItemArray . arraySize - 1 ) ;
@@ -88,62 +127,62 @@ public void DrawUI(SerializedProperty property)
88127 // Set defaults here because SerializedProperty copies the previous element.
89128 prefabItem . FindPropertyRelative ( "coreOptions.isActive" ) . boolValue = true ;
90129 prefabItem . FindPropertyRelative ( "coreOptions.snapToTerrain" ) . boolValue = true ;
130+ prefabItem . FindPropertyRelative ( "presetFeatureType" ) . enumValueIndex = ( int ) PresetFeatureType . Points ;
91131 var categories = prefabItem . FindPropertyRelative ( "categories" ) ;
92132 categories . intValue = ( int ) ( LocationPrefabCategories . AnyCategory ) ; //To select any category option
93133
94134 var density = prefabItem . FindPropertyRelative ( "density" ) ;
95135 density . intValue = 15 ; //To select all locations option
96136
137+ //Refreshing the tree
138+ layerTreeView . Layers = prefabItemArray ;
139+ layerTreeView . AddElementToTree ( prefabItem ) ;
140+ layerTreeView . Reload ( ) ;
141+
97142 selectedLayers = new int [ 1 ] { prefabItemArray . arraySize - 1 } ;
98143 layerTreeView . SetSelection ( selectedLayers ) ;
99144
100145 if ( EditorHelper . DidModifyProperty ( property ) )
101146 {
102- PrefabItemOptions prefabItemOptionToAdd = ( PrefabItemOptions ) EditorHelper . GetTargetObjectOfProperty ( prefabItem ) as PrefabItemOptions ;
147+ PrefabItemOptions prefabItemOptionToAdd = ( PrefabItemOptions ) EditorHelper . GetTargetObjectOfProperty ( prefabItem ) as PrefabItemOptions ;
103148 ( ( VectorLayerProperties ) EditorHelper . GetTargetObjectOfProperty ( property ) ) . OnSubLayerPropertyAdded ( new VectorLayerUpdateArgs { property = prefabItemOptionToAdd } ) ;
104149 }
105150 }
106151
107152 if ( GUILayout . Button ( new GUIContent ( "Remove Selected" ) , ( GUIStyle ) "minibuttonright" ) )
108153 {
109- if ( prefabItemArray . arraySize == 0 )
110- {
111- return ;
112- }
113-
114- List < PrefabItemOptions > LayersToRemove = new List < PrefabItemOptions > ( ) ;
115154 foreach ( var index in selectedLayers . OrderByDescending ( i => i ) )
116155 {
117- PrefabItemOptions prefabItemOptionsToRemove = ( PrefabItemOptions ) EditorHelper . GetTargetObjectOfProperty ( prefabItemArray . GetArrayElementAtIndex ( index ) ) as PrefabItemOptions ;
118- if ( prefabItemOptionsToRemove != null )
156+ if ( layerTreeView != null )
119157 {
120- LayersToRemove . Add ( prefabItemOptionsToRemove ) ;
158+ var poiSubLayer = prefabItemArray . GetArrayElementAtIndex ( index - FeatureSubLayerTreeView . uniqueIdPoI ) ;
159+
160+ VectorLayerProperties vectorLayerProperties = ( VectorLayerProperties ) EditorHelper . GetTargetObjectOfProperty ( property ) ;
161+ PrefabItemOptions poiSubLayerProperties = ( PrefabItemOptions ) EditorHelper . GetTargetObjectOfProperty ( poiSubLayer ) ;
162+
163+ vectorLayerProperties . OnSubLayerPropertyRemoved ( new VectorLayerUpdateArgs { property = poiSubLayerProperties } ) ;
164+
165+ layerTreeView . RemoveItemFromTree ( index ) ;
166+ prefabItemArray . DeleteArrayElementAtIndex ( index - FeatureSubLayerTreeView . uniqueIdPoI ) ;
167+ layerTreeView . treeModel . SetData ( GetData ( prefabItemArray ) ) ;
121168 }
122- prefabItemArray . DeleteArrayElementAtIndex ( index ) ;
123169 }
124170 selectedLayers = new int [ 0 ] ;
125171 layerTreeView . SetSelection ( selectedLayers ) ;
126- if ( EditorHelper . DidModifyProperty ( property ) )
127- {
128- for ( int i = 0 ; i < LayersToRemove . Count ; i ++ )
129- {
130- ( ( VectorLayerProperties ) EditorHelper . GetTargetObjectOfProperty ( property ) ) . OnSubLayerPropertyRemoved ( new VectorLayerUpdateArgs { property = LayersToRemove [ i ] } ) ;
131- }
132- }
133172 }
134173
135174 EditorGUILayout . EndHorizontal ( ) ;
136175
137- if ( selectedLayers . Count == 1 && prefabItemArray . arraySize != 0 )
176+ if ( selectedLayers . Count == 1 && prefabItemArray . arraySize != 0 && selectedLayers [ 0 ] - FeatureSubLayerTreeView . uniqueIdPoI >= 0 )
138177 {
139178 //ensure that selectedLayers[0] isn't out of bounds
140- if ( selectedLayers [ 0 ] > prefabItemArray . arraySize - 1 )
179+ if ( selectedLayers [ 0 ] - FeatureSubLayerTreeView . uniqueIdPoI > prefabItemArray . arraySize - 1 )
141180 {
142- selectedLayers [ 0 ] = prefabItemArray . arraySize - 1 ;
181+ selectedLayers [ 0 ] = prefabItemArray . arraySize - 1 + FeatureSubLayerTreeView . uniqueIdPoI ;
143182 }
144183 SelectionIndex = selectedLayers [ 0 ] ;
145184
146- var layerProperty = prefabItemArray . GetArrayElementAtIndex ( SelectionIndex ) ;
185+ var layerProperty = prefabItemArray . GetArrayElementAtIndex ( SelectionIndex - FeatureSubLayerTreeView . uniqueIdPoI ) ;
147186
148187 layerProperty . isExpanded = true ;
149188 var subLayerCoreOptions = layerProperty . FindPropertyRelative ( "coreOptions" ) ;
@@ -169,5 +208,28 @@ void DrawLayerLocationPrefabProperties(SerializedProperty layerProperty, Seriali
169208 {
170209 EditorGUILayout . PropertyField ( layerProperty ) ;
171210 }
211+
212+ IList < FeatureTreeElement > GetData ( SerializedProperty subLayerArray )
213+ {
214+ List < FeatureTreeElement > elements = new List < FeatureTreeElement > ( ) ;
215+ string name = string . Empty ;
216+ string type = string . Empty ;
217+ int id = 0 ;
218+ var root = new FeatureTreeElement ( "Root" , - 1 , 0 ) ;
219+ elements . Add ( root ) ;
220+ for ( int i = 0 ; i < subLayerArray . arraySize ; i ++ )
221+ {
222+ var subLayer = subLayerArray . GetArrayElementAtIndex ( i ) ;
223+ name = subLayer . FindPropertyRelative ( "coreOptions.sublayerName" ) . stringValue ;
224+ id = i + FeatureSubLayerTreeView . uniqueIdPoI ;
225+ type = PresetFeatureType . Points . ToString ( ) ; //((PresetFeatureType)subLayer.FindPropertyRelative("presetFeatureType").enumValueIndex).ToString();
226+ FeatureTreeElement element = new FeatureTreeElement ( name , 0 , id ) ;
227+ element . Name = name ;
228+ element . name = name ;
229+ element . Type = type ;
230+ elements . Add ( element ) ;
231+ }
232+ return elements ;
233+ }
172234 }
173235}
0 commit comments