修复表格框选可能随机多选,补充表格拖拽多选,视图自动偏移的功能
This commit is contained in:
@@ -63,9 +63,6 @@ namespace XericUI.XTable.Rendering.Component
|
||||
GetColWidths = () => m_ColWidths,
|
||||
GetTableData = () => m_TableData,
|
||||
GetDefaultStyleNamespace = () => m_DefaultStyleNamespace,
|
||||
IsInSelectionRange = (r, c) => IsInSelectionRange(r, c),
|
||||
GetSelectedRow = () => SelectionHandle.StartRow,
|
||||
GetSelectedCol = () => SelectionHandle.StartCol,
|
||||
};
|
||||
return renderer;
|
||||
}
|
||||
@@ -79,11 +76,22 @@ namespace XericUI.XTable.Rendering.Component
|
||||
m_FrozenColumnRenderer = null;
|
||||
m_FrozenRowRenderer = null;
|
||||
m_FrozenCornerRenderer = null;
|
||||
DestroySelectionOverlay(ref m_FrozenColumnSelectionOverlay);
|
||||
DestroySelectionOverlay(ref m_FrozenRowSelectionOverlay);
|
||||
DestroySelectionOverlay(ref m_FrozenCornerSelectionOverlay);
|
||||
DestroyFrozenContainer(ref m_FrozenColumnsContainer);
|
||||
DestroyFrozenContainer(ref m_FrozenRowsContainer);
|
||||
DestroyFrozenContainer(ref m_FrozenCornerContainer);
|
||||
}
|
||||
|
||||
private static void DestroySelectionOverlay(ref XTableSelectionOverlay overlay)
|
||||
{
|
||||
if (overlay == null) return;
|
||||
if (Application.isPlaying) Object.Destroy(overlay.gameObject);
|
||||
else Object.DestroyImmediate(overlay.gameObject);
|
||||
overlay = null;
|
||||
}
|
||||
|
||||
private static void DestroyFrozenContainer(ref RectTransform container)
|
||||
{
|
||||
if (container == null) return;
|
||||
@@ -108,11 +116,14 @@ namespace XericUI.XTable.Rendering.Component
|
||||
if (freezeRows == 0 && freezeCols == 0)
|
||||
{
|
||||
DestroyFrozenRenderers();
|
||||
if (m_RowHeights != null && m_ColWidths != null)
|
||||
CreateOrUpdateSelectionOverlays(0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_FrozenColumnRenderer == null) CreateViewportRenderer();
|
||||
if (m_FrozenColumnRenderer == null) return;
|
||||
CreateOrUpdateSelectionOverlays(freezeRows, freezeCols);
|
||||
CreateFrozenBackgrounds(freezeRows, freezeCols);
|
||||
SyncFrozenContainers();
|
||||
CalcVisibleRange(out int visibleStartRow, out int visibleEndRow, out int visibleStartCol, out int visibleEndCol);
|
||||
@@ -145,6 +156,40 @@ namespace XericUI.XTable.Rendering.Component
|
||||
m_FrozenCornerRenderer.CreateBackground(freezeWidth, freezeHeight, m_DefaultStyleNamespace);
|
||||
}
|
||||
|
||||
private void CreateOrUpdateSelectionOverlays(int freezeRows, int freezeCols)
|
||||
{
|
||||
int rows = m_RowHeights.Length;
|
||||
int cols = m_ColWidths.Length;
|
||||
m_NormalSelectionOverlay = CreateOrUpdateSelectionOverlay(ContentTransform, m_NormalSelectionOverlay, freezeRows, rows, freezeCols, cols, "_NormalSelectionOverlay");
|
||||
m_FrozenColumnSelectionOverlay = CreateOrUpdateSelectionOverlay(m_FrozenColumnsContainer, m_FrozenColumnSelectionOverlay, freezeRows, rows, 0, freezeCols, "_FrozenColumnSelectionOverlay");
|
||||
m_FrozenRowSelectionOverlay = CreateOrUpdateSelectionOverlay(m_FrozenRowsContainer, m_FrozenRowSelectionOverlay, 0, freezeRows, freezeCols, cols, "_FrozenRowSelectionOverlay");
|
||||
m_FrozenCornerSelectionOverlay = CreateOrUpdateSelectionOverlay(m_FrozenCornerContainer, m_FrozenCornerSelectionOverlay, 0, freezeRows, 0, freezeCols, "_FrozenCornerSelectionOverlay");
|
||||
}
|
||||
|
||||
private XTableSelectionOverlay CreateOrUpdateSelectionOverlay(Transform parent, XTableSelectionOverlay overlay,
|
||||
int rowStart, int rowEnd, int colStart, int colEnd, string name)
|
||||
{
|
||||
if (parent == null) return overlay;
|
||||
if (overlay == null)
|
||||
{
|
||||
var go = new GameObject(name, typeof(RectTransform), typeof(CanvasRenderer), typeof(UnityEngine.UI.Image), typeof(XTableSelectionOverlay));
|
||||
go.hideFlags = HideFlags.DontSave | HideFlags.HideInHierarchy;
|
||||
go.transform.SetParent(parent, false);
|
||||
overlay = go.GetComponent<XTableSelectionOverlay>();
|
||||
}
|
||||
overlay.transform.SetAsLastSibling();
|
||||
overlay.Configure(this, rowStart, rowEnd, colStart, colEnd);
|
||||
return overlay;
|
||||
}
|
||||
|
||||
private void RefreshSelectionOverlays()
|
||||
{
|
||||
m_NormalSelectionOverlay?.RefreshVisual();
|
||||
m_FrozenColumnSelectionOverlay?.RefreshVisual();
|
||||
m_FrozenRowSelectionOverlay?.RefreshVisual();
|
||||
m_FrozenCornerSelectionOverlay?.RefreshVisual();
|
||||
}
|
||||
|
||||
private void SyncFrozenContainers()
|
||||
{
|
||||
if (m_ScrollRect == null || m_ScrollRect.content == null) return;
|
||||
|
||||
Reference in New Issue
Block a user