@@ -13,6 +13,7 @@ public sealed class DataToolkitWindow : EditorWindow
1313 private const float DefaultAssetColumnWidth = 240f ;
1414 private const float MinColumnWidth = 160f ;
1515 private const float MaxColumnWidth = 520f ;
16+ private const float MinInspectorWidth = 320f ;
1617 private const float SplitterWidth = 5f ;
1718 private const float RowHeight = 24f ;
1819
@@ -52,6 +53,24 @@ public SelectionSnapshot(Type selectedType, string selectedTypeId, string assetP
5253 public string AssetGuid { get ; }
5354 }
5455
56+ private readonly struct BodyLayoutRects
57+ {
58+ public BodyLayoutRects ( Rect typeColumn , Rect typeSplitter , Rect assetColumn , Rect assetSplitter , Rect inspectorColumn )
59+ {
60+ TypeColumn = typeColumn ;
61+ TypeSplitter = typeSplitter ;
62+ AssetColumn = assetColumn ;
63+ AssetSplitter = assetSplitter ;
64+ InspectorColumn = inspectorColumn ;
65+ }
66+
67+ public Rect TypeColumn { get ; }
68+ public Rect TypeSplitter { get ; }
69+ public Rect AssetColumn { get ; }
70+ public Rect AssetSplitter { get ; }
71+ public Rect InspectorColumn { get ; }
72+ }
73+
5574 public static DataToolkitWindow Open ( DataToolkitProjectSettings settings )
5675 {
5776 return Open ( new DataToolkitProjectProfile ( settings ) ) ;
@@ -119,14 +138,7 @@ private void OnGUI()
119138 {
120139 EnsureContext ( ) ;
121140 DrawHeaderToolbar ( ) ;
122-
123- EditorGUILayout . BeginHorizontal ( ) ;
124- DrawTypeColumn ( ) ;
125- DrawColumnResizeHandle ( ref typeColumnWidth , context . Settings . PrefKey ( "TypeColumnWidth" ) , position . width - assetColumnWidth - 360f ) ;
126- DrawAssetColumn ( ) ;
127- DrawColumnResizeHandle ( ref assetColumnWidth , context . Settings . PrefKey ( "AssetColumnWidth" ) , position . width - typeColumnWidth - 360f ) ;
128- DrawSelectedAssetInspector ( ) ;
129- EditorGUILayout . EndHorizontal ( ) ;
141+ DrawBodyLayout ( ) ;
130142 }
131143
132144 private void EnsureContext ( )
@@ -192,9 +204,47 @@ private void DrawProjectToolbars()
192204 }
193205 }
194206
195- private void DrawTypeColumn ( )
207+ private void DrawBodyLayout ( )
196208 {
197- using ( new EditorGUILayout . VerticalScope ( EditorStyles . helpBox , GUILayout . Width ( typeColumnWidth ) , GUILayout . ExpandHeight ( true ) ) )
209+ var bodyRect = GUILayoutUtility . GetRect ( 0f , 0f , GUILayout . ExpandWidth ( true ) , GUILayout . ExpandHeight ( true ) ) ;
210+ var layoutRects = CalculateBodyLayoutRects ( bodyRect ) ;
211+
212+ DrawTypeColumn ( layoutRects . TypeColumn ) ;
213+ DrawColumnResizeHandle (
214+ layoutRects . TypeSplitter ,
215+ ref typeColumnWidth ,
216+ context . Settings . PrefKey ( "TypeColumnWidth" ) ,
217+ bodyRect . width - assetColumnWidth - SplitterWidth * 2f - MinInspectorWidth ) ;
218+ DrawAssetColumn ( layoutRects . AssetColumn ) ;
219+ DrawColumnResizeHandle (
220+ layoutRects . AssetSplitter ,
221+ ref assetColumnWidth ,
222+ context . Settings . PrefKey ( "AssetColumnWidth" ) ,
223+ bodyRect . width - typeColumnWidth - SplitterWidth * 2f - MinInspectorWidth ) ;
224+ DrawSelectedAssetInspector ( layoutRects . InspectorColumn ) ;
225+ }
226+
227+ private BodyLayoutRects CalculateBodyLayoutRects ( Rect bodyRect )
228+ {
229+ var maxTypeWidth = Mathf . Max ( MinColumnWidth , bodyRect . width - assetColumnWidth - SplitterWidth * 2f - MinInspectorWidth ) ;
230+ var resolvedTypeWidth = Mathf . Clamp ( typeColumnWidth , MinColumnWidth , Mathf . Min ( MaxColumnWidth , maxTypeWidth ) ) ;
231+ var maxAssetWidth = Mathf . Max ( MinColumnWidth , bodyRect . width - resolvedTypeWidth - SplitterWidth * 2f - MinInspectorWidth ) ;
232+ var resolvedAssetWidth = Mathf . Clamp ( assetColumnWidth , MinColumnWidth , Mathf . Min ( MaxColumnWidth , maxAssetWidth ) ) ;
233+ var inspectorWidth = Mathf . Max ( 0f , bodyRect . width - resolvedTypeWidth - resolvedAssetWidth - SplitterWidth * 2f ) ;
234+
235+ var typeColumn = new Rect ( bodyRect . x , bodyRect . y , resolvedTypeWidth , bodyRect . height ) ;
236+ var typeSplitter = new Rect ( typeColumn . xMax , bodyRect . y , SplitterWidth , bodyRect . height ) ;
237+ var assetColumn = new Rect ( typeSplitter . xMax , bodyRect . y , resolvedAssetWidth , bodyRect . height ) ;
238+ var assetSplitter = new Rect ( assetColumn . xMax , bodyRect . y , SplitterWidth , bodyRect . height ) ;
239+ var inspectorColumn = new Rect ( assetSplitter . xMax , bodyRect . y , inspectorWidth , bodyRect . height ) ;
240+
241+ return new BodyLayoutRects ( typeColumn , typeSplitter , assetColumn , assetSplitter , inspectorColumn ) ;
242+ }
243+
244+ private void DrawTypeColumn ( Rect rect )
245+ {
246+ GUILayout . BeginArea ( rect ) ;
247+ using ( new EditorGUILayout . VerticalScope ( EditorStyles . helpBox , GUILayout . ExpandWidth ( true ) , GUILayout . ExpandHeight ( true ) ) )
198248 {
199249 EditorGUILayout . LabelField ( "Data Types" , EditorStyles . boldLabel ) ;
200250 typeSearch = EditorGUILayout . TextField ( typeSearch , GUI . skin . FindStyle ( "ToolbarSearchTextField" ) ?? EditorStyles . toolbarSearchField ) ;
@@ -210,11 +260,13 @@ private void DrawTypeColumn()
210260
211261 EditorGUILayout . EndScrollView ( ) ;
212262 }
263+ GUILayout . EndArea ( ) ;
213264 }
214265
215- private void DrawAssetColumn ( )
266+ private void DrawAssetColumn ( Rect rect )
216267 {
217- using ( new EditorGUILayout . VerticalScope ( EditorStyles . helpBox , GUILayout . Width ( assetColumnWidth ) , GUILayout . ExpandHeight ( true ) ) )
268+ GUILayout . BeginArea ( rect ) ;
269+ using ( new EditorGUILayout . VerticalScope ( EditorStyles . helpBox , GUILayout . ExpandWidth ( true ) , GUILayout . ExpandHeight ( true ) ) )
218270 {
219271 EditorGUILayout . LabelField ( selectedType == null ? "Assets" : selectedType . Name , EditorStyles . boldLabel ) ;
220272 assetSearch = EditorGUILayout . TextField ( assetSearch , GUI . skin . FindStyle ( "ToolbarSearchTextField" ) ?? EditorStyles . toolbarSearchField ) ;
@@ -230,39 +282,48 @@ private void DrawAssetColumn()
230282
231283 EditorGUILayout . EndScrollView ( ) ;
232284 }
285+ GUILayout . EndArea ( ) ;
233286 }
234287
235- private void DrawSelectedAssetInspector ( )
288+ private void DrawSelectedAssetInspector ( Rect rect )
236289 {
290+ GUILayout . BeginArea ( rect ) ;
237291 using ( new EditorGUILayout . VerticalScope ( EditorStyles . helpBox , GUILayout . ExpandWidth ( true ) , GUILayout . ExpandHeight ( true ) ) )
238292 {
239293 if ( selectedAsset == null )
240294 {
241- EditorGUILayout . HelpBox ( "Select a data asset from the middle column." , MessageType . Info ) ;
242- return ;
295+ DrawEmptyInspectorState ( ) ;
243296 }
244-
245- EditorGUILayout . BeginHorizontal ( ) ;
246- EditorGUILayout . LabelField ( selectedAsset . name , EditorStyles . boldLabel ) ;
247- if ( GUILayout . Button ( "Ping" , GUILayout . Width ( 64f ) , GUILayout . Height ( 22f ) ) )
297+ else
248298 {
249- EditorGUIUtility . PingObject ( selectedAsset ) ;
250- }
299+ EditorGUILayout . BeginHorizontal ( ) ;
300+ EditorGUILayout . LabelField ( selectedAsset . name , EditorStyles . boldLabel ) ;
301+ if ( GUILayout . Button ( "Ping" , GUILayout . Width ( 64f ) , GUILayout . Height ( 22f ) ) )
302+ {
303+ EditorGUIUtility . PingObject ( selectedAsset ) ;
304+ }
251305
252- EditorGUILayout . EndHorizontal ( ) ;
306+ EditorGUILayout . EndHorizontal ( ) ;
253307
254- inspector . SetTarget ( selectedAsset ) ;
255- inspectorScroll = EditorGUILayout . BeginScrollView ( inspectorScroll ) ;
256- EditorGUI . BeginChangeCheck ( ) ;
257- inspector . Draw ( ) ;
258- if ( EditorGUI . EndChangeCheck ( ) )
259- {
260- EditorUtility . SetDirty ( selectedAsset ) ;
261- Repaint ( ) ;
262- }
308+ inspector . SetTarget ( selectedAsset ) ;
309+ inspectorScroll = EditorGUILayout . BeginScrollView ( inspectorScroll ) ;
310+ EditorGUI . BeginChangeCheck ( ) ;
311+ inspector . Draw ( ) ;
312+ if ( EditorGUI . EndChangeCheck ( ) )
313+ {
314+ EditorUtility . SetDirty ( selectedAsset ) ;
315+ Repaint ( ) ;
316+ }
263317
264- EditorGUILayout . EndScrollView ( ) ;
318+ EditorGUILayout . EndScrollView ( ) ;
319+ }
265320 }
321+ GUILayout . EndArea ( ) ;
322+ }
323+
324+ private void DrawEmptyInspectorState ( )
325+ {
326+ EditorGUILayout . HelpBox ( "Select a data asset from the middle column." , MessageType . Info ) ;
266327 }
267328
268329 private bool DrawSelectableRow ( string title , string countText , bool selected )
@@ -306,9 +367,8 @@ private bool DrawSelectableRow(string title, string countText, bool selected)
306367 return GUI . Button ( rect , GUIContent . none , GUIStyle . none ) ;
307368 }
308369
309- private void DrawColumnResizeHandle ( ref float width , string prefsKey , float maxWidthByLayout )
370+ private void DrawColumnResizeHandle ( Rect rect , ref float width , string prefsKey , float maxWidthByLayout )
310371 {
311- var rect = GUILayoutUtility . GetRect ( SplitterWidth , SplitterWidth , GUILayout . ExpandHeight ( true ) ) ;
312372 EditorGUI . DrawRect ( new Rect ( rect . x + 2f , rect . y , 1f , rect . height ) , new Color ( 0.28f , 0.28f , 0.28f , 1f ) ) ;
313373 EditorGUIUtility . AddCursorRect ( rect , MouseCursor . ResizeHorizontal ) ;
314374
0 commit comments