Skip to content

Commit 7ca9cb6

Browse files
committed
fix(data-toolkit): stabilize empty inspector layout
1 parent 5e533b4 commit 7ca9cb6

1 file changed

Lines changed: 94 additions & 34 deletions

File tree

com.zerogamestudio.zeroengine.data-toolkit/Editor/Windows/DataToolkitWindow.cs

Lines changed: 94 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)