Files
NovaFree/Scripts/Public/Components/GridView.cs
2025-08-02 20:11:41 +08:00

782 lines
35 KiB
C#

// Copyright (c) Supernova Technologies LLC
using Nova.Compat;
using Nova.InternalNamespace_0;
using Nova.InternalNamespace_0.InternalNamespace_4;
using Nova.InternalNamespace_0.InternalNamespace_2;
using Nova.InternalNamespace_0.InternalNamespace_9;
using Nova.InternalNamespace_0.InternalNamespace_5;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Nova
{
/// <summary>
/// A callback to configure a <see cref="GridSlice"/>, <see cref="GridSlice2D"/> or <see cref="GridSlice3D"/> before it's inserted into the grid view.
/// </summary>
/// <param name="sliceIndex">The virtual index of the slice along the <paramref name="primaryAxis"/></param>
/// <param name="gridView">The <see cref="GridView"/> requesting the grid slice.</param>
/// <param name="gridSlice">The grid slice of type <typeparamref name="T"/> to configure. This slice will then be inserted into the grid.</param>
/// <typeparam name="T">
/// The type of grid slice the provider will configure:
/// <list type="bullet">
/// <item><description><see cref="GridSlice"/></description></item>
/// <item><description><see cref="GridSlice2D"/></description></item>
/// <item><description><see cref="GridSlice3D"/></description></item>
/// </list>
/// </typeparam>
/// <seealso cref="GridView.SetSliceProvider(GridSliceProviderCallback{GridSlice})"/>
/// <seealso cref="GridView.SetSliceProvider(GridSliceProviderCallback{GridSlice2D})"/>
/// <seealso cref="GridView.SetSliceProvider(GridSliceProviderCallback{GridSlice3D})"/>
public delegate void GridSliceProviderCallback<T>(int sliceIndex, GridView gridView, ref T gridSlice);
/// <summary>
/// A <see cref="ListView"/> whose list items can be arranged in a 2D layout.
/// </summary>
/// <remarks>
/// Percent-based <see cref="Layout"/> properties on <see cref="UIBlock"/>s parented directly to a
/// <see cref="GridView"/> are calculated relative to their "virtual" parent <see cref="GridSlice"/>,
/// not the <see cref="GridView"/> itself.
/// </remarks>
[AddComponentMenu("Nova/Grid View")]
[HelpURL("https://novaui.io/manual/GridView.html")]
public sealed class GridView : ListView, ISerializationCallbackReceiver
{
#region Public
/// <summary>
/// The lowest slice index currently loaded into the grid view.
/// </summary>
public int MinLoadedSliceIndex => InternalProperty_48.InternalMethod_254(MinLoadedIndex);
/// <summary>
/// The highest slice index currently loaded into the grid view.
/// </summary>
public int MaxLoadedSliceIndex => InternalProperty_48.InternalMethod_254(MaxLoadedIndex);
/// <summary>
/// The number of elements to position along the <see cref="CrossAxis"/>.
/// </summary>
/// <seealso cref="CrossAxis"/>
public int CrossAxisItemCount
{
get
{
return crossAxisItemCount;
}
set
{
int InternalVar_1 = Mathf.Max(1, value);
if (InternalVar_1 == crossAxisItemCount)
{
return;
}
crossAxisItemCount = InternalVar_1;
if (!UIBlock.InternalProperty_25)
{
return;
}
InternalMethod_411();
}
}
/// <summary>
/// The scrolling axis to position elements in the grid. Assigned implicitly from the <see cref="AutoLayout.Axis"/> configured on the <see cref="ListView.UIBlock"/>.
/// </summary>
/// <seealso cref="CrossAxis"/>
public Axis PrimaryAxis
{
get
{
return UIBlock.InternalMethod_79().Axis;
}
set
{
UIBlock.AutoLayout.Axis = value;
}
}
/// <summary>
/// The non-scrolling axis along which <see cref="GridSlice"/>'s will position items.
/// </summary>
/// <example>If the <see cref="PrimaryAxis"/> is set to Y, the <see cref="CrossAxis"/> is commonly set to X.</example>
/// <seealso cref="CrossAxisItemCount"/>
/// <seealso cref="PrimaryAxis"/>
public Axis CrossAxis
{
get => crossAxis;
set
{
if (crossAxis == value)
{
return;
}
crossAxis = value;
InternalType_521<InternalType_34> InternalVar_1 = InternalProperty_50;
for (int InternalVar_2 = 0; InternalVar_2 < InternalVar_1.InternalProperty_433; ++InternalVar_2)
{
InternalType_33 InternalVar_3 = InternalVar_1[InternalVar_2] as InternalType_33;
InternalVar_3.InternalProperty_64.Axis = crossAxis;
}
}
}
/// <summary>
/// Assigns the given <see cref="GridSliceProviderCallback{T}"/> as the sole handler for any grid slice requests. As a <see cref="GridView"/> is scrolled, new list items will
/// be pulled into view, and <see cref="CrossAxisItemCount"/> list items will be visually parented to the returned <see cref="GridSlice"/>.
/// </summary>
/// <param name="provider"></param>
/// <remarks>
/// A <see cref="GridView"/> can only have a single <see cref="GridSliceProviderCallback{T}"/> at a given time, so assigning a value here will remove any existing slice providers.
/// </remarks>
/// <seealso cref="SetSliceProvider(GridSliceProviderCallback{GridSlice2D})"/>
/// <seealso cref="SetSliceProvider(GridSliceProviderCallback{GridSlice3D})"/>
public void SetSliceProvider(GridSliceProviderCallback<GridSlice> provider) => InternalMethod_196<GridSlice>(provider);
/// <summary>
/// Assigns the given <see cref="GridSliceProviderCallback{T}"/> as the sole handler for any grid slice requests. As a <see cref="GridView"/> is scrolled, new list items will
/// be pulled into view, and <see cref="CrossAxisItemCount"/> list items will be visually parented to the returned <see cref="GridSlice2D"/>.
/// </summary>
/// <param name="provider"></param>
/// <remarks>
/// A <see cref="GridView"/> can only have a single <see cref="GridSliceProviderCallback{T}"/> at a given time, so assigning a value here will remove any existing slice providers.
/// </remarks>
/// <seealso cref="SetSliceProvider(GridSliceProviderCallback{GridSlice})"/>
/// <seealso cref="SetSliceProvider(GridSliceProviderCallback{GridSlice3D})"/>
public void SetSliceProvider(GridSliceProviderCallback<GridSlice2D> provider) => InternalMethod_196<GridSlice2D>(provider);
/// <summary>
/// Assigns the given <see cref="GridSliceProviderCallback{T}"/> as the sole handler for any grid slice requests. As a <see cref="GridView"/> is scrolled, new list items will
/// be pulled into view, and <see cref="CrossAxisItemCount"/> list items will be visually parented to the returned <see cref="GridSlice3D"/>.
/// </summary>
/// <param name="provider"></param>
/// <remarks>
/// A <see cref="GridView"/> can only have a single <see cref="GridSliceProviderCallback{T}"/> at a given time, so assigning a value here will remove any existing slice providers.
/// </remarks>
/// <seealso cref="SetSliceProvider(GridSliceProviderCallback{GridSlice})"/>
/// <seealso cref="SetSliceProvider(GridSliceProviderCallback{GridSlice2D})"/>
public void SetSliceProvider(GridSliceProviderCallback<GridSlice3D> provider) => InternalMethod_196<GridSlice3D>(provider);
/// <summary>
/// Clears any <see cref="GridSliceProviderCallback{T}"/> callback previously assigned via
/// <list type="bullet">
/// <item><description><see cref="SetSliceProvider(GridSliceProviderCallback{GridSlice})"/></description></item>
/// <item><description><see cref="SetSliceProvider(GridSliceProviderCallback{GridSlice2D})"/></description></item>
/// <item><description><see cref="SetSliceProvider(GridSliceProviderCallback{GridSlice3D})"/></description></item>
/// </list>
/// </summary>
/// <seealso cref="SetSliceProvider(GridSliceProviderCallback{GridSlice})"/>
/// <seealso cref="SetSliceProvider(GridSliceProviderCallback{GridSlice2D})"/>
/// <seealso cref="SetSliceProvider(GridSliceProviderCallback{GridSlice3D})"/>
public void ClearSliceProvider()
{
InternalField_90 = null;
InternalField_91 = typeof(GridSlice);
InternalField_92 = typeof(InternalType_42);
}
/// <summary>
/// Wraps the GridView's underlying data source in a <see cref="GridList{T}"/> to be indexable by a <see cref="GridIndex"/>,
/// where <see cref="GridIndex.Row"/> is the index into the <see cref="PrimaryAxis"/> and <see cref="GridIndex.Column"/> is the index
/// into the <see cref="CrossAxis"/>.
/// </summary>
/// <typeparam name="T">The type of <see cref="GridList{T}"/> to create. Must match the type parameter used when calling <see cref="ListView.SetDataSource{T}(IList{T})"/></typeparam>
/// <returns>The GridView's underlying data source wrapped as a <see cref="GridList{T}"/></returns>
/// <exception cref="ArgumentException">Thrown when <typeparamref name="T"/> doesn't match the type parameter used when calling <see cref="ListView.SetDataSource{T}(IList{T})"/></exception>
/// <exception cref="ArgumentException">Thrown when <see cref="ListView.SetDataSource{T}(IList{T})"/> hasn't been called or was set to <c><see langword="null"/></c></exception>
/// <seealso cref="ListView.SetDataSource{T}(IList{T})"/>
public GridList<T> GetDataSourceAsGrid<T>()
{
IList<T> InternalVar_1 = GetDataSource<T>();
if (InternalVar_1 == null)
{
if (InternalProperty_55 != null)
{
throw new ArgumentException($"Requesting a {nameof(GridList<T>)} of type {typeof(T).Name}, but the {nameof(GridView)}'s data source is tracking elements of type {InternalProperty_55.InternalMethod_2039().Name}. The provided Type argument, {nameof(T)}, must match the underlying data source element type.");
}
throw new ArgumentException($"The {nameof(GridView)} has no underlying data source to wrap as a {typeof(GridList<T>)}. You must first call {nameof(SetDataSource)} before a {nameof(GridList<T>)} can be made from the {nameof(GridView)}.");
}
return GridList<T>.CreateWithColumns(InternalVar_1, CrossAxisItemCount);
}
/// <summary>
/// Retrieves the <see cref="ItemView"/> representing the object in the data source at the provided <see cref="GridIndex"/> if it's paged into the <see cref="GridView"/>.
/// </summary>
/// <param name="index">
/// The <see cref="GridIndex"/> of the object in the data source represented by the requested
/// <see cref="ItemView"/>, where <see cref="GridIndex.Row"/> is the index into the <see cref="PrimaryAxis"/>
/// and <see cref="GridIndex.Column"/> is the index into the <see cref="CrossAxis"/>
/// </param>
/// <param name="gridItem"> The item in the GridView representing the data object in the data source at the provided <see cref="GridIndex"/>.</param>
/// <returns>Returns <see langword="true"/> if the requested <see cref="ItemView"/> is found (paged into view), otherwise returns <see langword="false"/>.</returns>
public bool TryGetGridItem(GridIndex index, out ItemView gridItem)
{
int InternalVar_1 = InternalProperty_48.InternalMethod_253(index);
return TryGetItemView(InternalVar_1, out gridItem);
}
/// <summary>
/// Invokes the configured grid slice provider, set via <see cref="SetSliceProvider"/>, for the grid<br/>
/// slice at the given index, <paramref name="sliceIndex"/>. Provides a way for the caller to reconfigure the visuals/layout of the requested grid slice.
/// </summary>
/// <remarks>
/// If the grid slice provider has been cleared or was never set or if <paramref name="sliceIndex"/> is outside the range defined by [<see cref="MinLoadedSliceIndex"/>, <see cref="MaxLoadedSliceIndex"/>], this call won't do anything.
/// </remarks>
/// <param name="sliceIndex">The virtual index of the grid slice to update.</param>
public void UpdateGridSlice(int sliceIndex)
{
if (InternalField_90 == null || sliceIndex < MinLoadedSliceIndex || sliceIndex > MaxLoadedSliceIndex)
{
return;
}
int InternalVar_1 = sliceIndex - MinLoadedSliceIndex;
InternalType_33 InternalVar_2 = InternalProperty_50[InternalVar_1] as InternalType_33;
InternalMethod_202(InternalVar_2, InternalField_90, sliceIndex, PrimaryAxis, CrossAxis);
}
#endregion
#region Internal
[SerializeField, InternalType_22]
[Tooltip("The non-scrolling axis to position elements in the grid.\n\nE.g.\nIf the Primary Axis is set to Y, the Cross Axis is commonly set to X.")]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private Axis crossAxis = Axis.X;
[SerializeField, InternalType_22]
[Min(1), Tooltip("The number of elements to position along the Cross Axis.\n\nE.g.\nIf the Cross Axis is set to X, this is the number of columns in the grid.")]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private int crossAxisItemCount = 1;
[NonSerialized, HideInInspector]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private MulticastDelegate InternalField_90;
[NonSerialized, HideInInspector]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private Type InternalField_91 = typeof(GridSlice);
[NonSerialized, HideInInspector]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private Type InternalField_92 = typeof(InternalType_42);
[NonSerialized, HideInInspector]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private InternalType_35 InternalField_93 = new InternalType_35();
[NonSerialized, HideInInspector]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private InternalType_35 InternalField_94 = new InternalType_35();
[NonSerialized, HideInInspector]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private int InternalField_95 = 0;
[NonSerialized, HideInInspector]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private int InternalField_96 = 0;
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private protected override int InternalProperty_52 => CrossAxisItemCount;
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private InternalType_32 InternalProperty_48 => InternalType_32.InternalMethod_258(InternalProperty_55.InternalProperty_430, CrossAxisItemCount);
private protected override InternalType_521<InternalType_131> InternalMethod_2062()
{
return InternalProperty_51 == 0 ? base.InternalMethod_2062() : InternalProperty_49.InternalProperty_182;
}
private protected override bool InternalMethod_919(int InternalParameter_855, out InternalType_5 InternalParameter_2352)
{
InternalParameter_2352 = null;
if (!TryGetItemView(InternalParameter_855, out ItemView InternalVar_1))
{
return false;
}
InternalParameter_2352 = InternalType_253.InternalProperty_190.InternalMethod_1158(InternalVar_1.UIBlock.InternalProperty_29) as InternalType_5;
return InternalParameter_2352 != null;
}
private protected override void InternalMethod_2060(bool firstSibling)
{
if ((firstSibling && InternalProperty_50.InternalProperty_433 <= InternalField_95) ||
(!firstSibling && InternalProperty_50.InternalProperty_433 <= InternalField_96))
{
base.InternalMethod_2060(firstSibling);
return;
}
InternalType_33 InternalVar_1 = (firstSibling ? InternalProperty_50[InternalField_95++] : InternalProperty_50[InternalProperty_51 - (++InternalField_96)]) as InternalType_33;
if (firstSibling)
{
for (int InternalVar_2 = 0; InternalVar_2 < crossAxisItemCount && InternalVar_1.InternalProperty_30 - InternalVar_2 > 0; ++InternalVar_2)
{
if (InternalField_98 > InternalField_99)
{
break;
}
InternalMethod_230();
}
}
else
{
for (int InternalVar_2 = 0; InternalVar_2 < crossAxisItemCount && InternalVar_1.InternalProperty_30 - InternalVar_2 > 0; ++InternalVar_2)
{
if (InternalField_99 < InternalField_98)
{
break;
}
InternalMethod_231();
}
}
InternalProperty_54.InternalMethod_58(InternalVar_1);
InternalField_94.InternalMethod_295(InternalVar_1);
}
private protected override InternalType_66 InternalMethod_1858(bool InternalParameter_2057)
{
if (!InternalParameter_2057 && (InternalField_99 + 1) % InternalProperty_52 != 0)
{
InternalType_66 InternalVar_1 = InternalMethod_229(InternalParameter_175: false);
if (InternalVar_1 != null && InternalMethod_919(InternalField_99, out InternalType_5 InternalVar_2))
{
InternalVar_2.InternalMethod_442();
}
return null;
}
InternalType_33 InternalVar_3 = InternalMethod_201(InternalParameter_2057);
int InternalVar_4 = 0;
if (InternalParameter_2057)
{
for (int InternalVar_5 = 0; InternalVar_5 < crossAxisItemCount; ++InternalVar_5)
{
InternalType_66 InternalVar_6 = InternalMethod_228(InternalParameter_174: false);
InternalVar_4 += (InternalVar_6 as MonoBehaviour) != null ? 1 : 0;
if (InternalField_98 == 0)
{
break;
}
}
}
else
{
for (int InternalVar_5 = 0; InternalVar_5 < crossAxisItemCount; ++InternalVar_5)
{
InternalType_66 InternalVar_6 = InternalMethod_229(InternalParameter_175: false);
InternalVar_4 += (InternalVar_6 as MonoBehaviour) != null ? 1 : 0;
if (InternalField_99 == InternalProperty_55.InternalProperty_430 - 1)
{
break;
}
}
}
if (InternalVar_4 == 0)
{
InternalField_94.InternalMethod_295(InternalVar_3);
return null;
}
InternalVar_3.InternalMethod_442();
InternalProperty_54.InternalMethod_59(InternalVar_3.InternalProperty_83);
return InternalVar_3;
}
private protected override void InternalMethod_224()
{
while (InternalField_94.InternalMethod_296(out InternalType_33 InternalVar_1))
{
InternalVar_1.InternalProperty_269 = false;
InternalMethod_208(InternalVar_1);
InternalVar_1.Dispose();
InternalField_93.InternalMethod_295(InternalVar_1);
}
InternalField_95 = 0;
InternalField_96 = 0;
}
private void InternalMethod_196<TSlice>(MulticastDelegate InternalParameter_142) where TSlice : struct
{
if (InternalParameter_142 == null)
{
ClearSliceProvider();
return;
}
InternalField_91 = typeof(TSlice);
InternalField_92 = InternalMethod_200<TSlice>();
InternalField_90 = InternalParameter_142;
}
private protected override void InternalMethod_220()
{
InternalField_93.Dispose();
}
private protected override void OnDestroy()
{
base.OnDestroy();
if (virtualBlockSerializer != null)
{
Destroy(virtualBlockSerializer);
virtualBlockSerializer = null;
}
}
private protected override void InternalMethod_235()
{
InternalProperty_49.InternalMethod_540();
if (NovaApplication.InPlayer(this))
{
InternalMethod_411(InternalParameter_173: true);
}
}
private protected override void InternalMethod_236()
{
InternalProperty_49.InternalMethod_539();
}
private static void InternalMethod_197(InternalType_33 InternalParameter_143, GridSlice InternalParameter_144)
{
InternalParameter_143.InternalProperty_269 = false;
InternalParameter_143.InternalProperty_63 = InternalParameter_144.Layout;
InternalParameter_143.InternalProperty_64 = InternalParameter_144.AutoLayout;
}
private static void InternalMethod_198(InternalType_33 InternalParameter_145, GridSlice2D InternalParameter_146)
{
InternalType_42 InternalVar_1 = InternalParameter_145 as InternalType_42;
InternalVar_1.InternalProperty_269 = true;
InternalVar_1.InternalProperty_95 = InternalParameter_146.Color;
InternalVar_1.InternalProperty_90 = InternalParameter_146.Gradient;
InternalVar_1.InternalProperty_93 = InternalParameter_146.Surface;
InternalVar_1.InternalProperty_94 = InternalParameter_146.CornerRadius;
InternalVar_1.InternalProperty_91 = InternalParameter_146.Border;
InternalVar_1.InternalProperty_92 = InternalParameter_146.Shadow;
InternalVar_1.InternalProperty_63 = InternalParameter_146.Layout;
InternalVar_1.InternalProperty_64 = InternalParameter_146.AutoLayout;
}
private static void InternalMethod_199(InternalType_33 InternalParameter_147, GridSlice3D InternalParameter_148)
{
InternalType_43 InternalVar_1 = InternalParameter_147 as InternalType_43;
InternalVar_1.InternalProperty_269 = true;
InternalVar_1.InternalProperty_96 = InternalParameter_148.Color;
InternalVar_1.InternalProperty_97 = InternalParameter_148.Surface;
InternalVar_1.InternalProperty_98 = InternalParameter_148.CornerRadius;
InternalVar_1.InternalProperty_99 = InternalParameter_148.EdgeRadius;
InternalVar_1.InternalProperty_63 = InternalParameter_148.Layout;
InternalVar_1.InternalProperty_64 = InternalParameter_148.AutoLayout;
}
private static Type InternalMethod_200<TSlice>() where TSlice : struct
{
if (typeof(TSlice) == typeof(GridSlice3D))
{
return typeof(InternalType_43);
}
return typeof(InternalType_42);
}
private InternalType_33 InternalMethod_201(bool InternalParameter_149)
{
int InternalVar_1 = InternalParameter_149 ? InternalField_98 - 1 : InternalField_99 + 1;
int InternalVar_2 = InternalProperty_48.InternalMethod_254(InternalVar_1);
if (InternalField_94.InternalMethod_297(InternalField_92, out InternalType_33 InternalVar_3))
{
int InternalVar_4 = InternalVar_3.InternalProperty_209;
int InternalVar_5 = InternalParameter_149 ? 0 : InternalProperty_51 - InternalField_94.InternalMethod_298(InternalField_92) - 1;
if (InternalParameter_149)
{
InternalField_96 = Mathf.Max(InternalField_96 - 1, 0);
}
else
{
InternalField_95 = Mathf.Max(InternalField_95 - 1, 0);
}
if (InternalVar_4 != InternalVar_5)
{
InternalMethod_207(InternalVar_3, InternalVar_5);
}
}
else
{
InternalVar_3 = InternalField_93.InternalMethod_294(InternalField_92);
InternalVar_3.InternalMethod_287();
InternalMethod_206(InternalVar_3, crossAxisItemCount, InternalParameter_157: InternalParameter_149);
InternalVar_3.InternalMethod_279();
}
InternalMethod_202(InternalVar_3, InternalField_90, InternalVar_2, UIBlock.InternalMethod_79().Axis, crossAxis);
return InternalVar_3;
}
private void InternalMethod_202(InternalType_33 InternalParameter_150, MulticastDelegate InternalParameter_151, int InternalParameter_152, Axis InternalParameter_153, Axis InternalParameter_154)
{
if (InternalField_91 == typeof(GridSlice2D))
{
GridSlice2D InternalVar_1 = new GridSlice2D(InternalParameter_153, InternalParameter_154);
if (InternalParameter_151 != null)
{
try
{
GridSliceProviderCallback<GridSlice2D> InternalVar_2 = (GridSliceProviderCallback<GridSlice2D>)InternalParameter_151;
InternalVar_2.Invoke(InternalParameter_152, this, ref InternalVar_1);
}
catch (Exception e)
{
Debug.LogException(e);
}
}
InternalMethod_198(InternalParameter_150, InternalVar_1);
}
else if (InternalField_91 == typeof(GridSlice3D))
{
GridSlice3D InternalVar_1 = new GridSlice3D(InternalParameter_153, InternalParameter_154);
if (InternalParameter_151 != null)
{
try
{
GridSliceProviderCallback<GridSlice3D> InternalVar_2 = (GridSliceProviderCallback<GridSlice3D>)InternalParameter_151;
InternalVar_2.Invoke(InternalParameter_152, this, ref InternalVar_1);
}
catch (Exception e)
{
Debug.LogException(e);
}
}
InternalMethod_199(InternalParameter_150, InternalVar_1);
}
else
{
GridSlice InternalVar_1 = new GridSlice(InternalParameter_153, InternalParameter_154);
if (InternalParameter_151 != null)
{
try
{
GridSliceProviderCallback<GridSlice> InternalVar_2 = (GridSliceProviderCallback<GridSlice>)InternalParameter_151;
InternalVar_2.Invoke(InternalParameter_152, this, ref InternalVar_1);
}
catch (Exception e)
{
Debug.LogException(e);
}
}
InternalMethod_197(InternalParameter_150, InternalVar_1);
}
}
internal void InternalMethod_411(bool InternalParameter_173 = false)
{
if (MinLoadedIndex < 0)
{
return;
}
if (InternalParameter_173)
{
for (int InternalVar_1 = 0; InternalVar_1 < transform.childCount; ++InternalVar_1)
{
Transform InternalVar_2 = transform.GetChild(InternalVar_1);
if (!InternalVar_2.gameObject.activeSelf)
{
continue;
}
if (!InternalVar_2.TryGetComponent(out UIBlock InternalVar_3))
{
continue;
}
((InternalType_4)InternalVar_3).InternalMethod_119();
}
}
while (MinLoadedIndex % crossAxisItemCount != 0)
{
InternalMethod_228(InternalParameter_174: false);
}
int InternalVar_4 = UIBlock.InternalProperty_84 * crossAxisItemCount;
int InternalVar_5 = DataSourceItemCount % crossAxisItemCount;
if (InternalVar_5 != 0 && MaxLoadedIndex == DataSourceItemCount - 1)
{
InternalVar_4 -= crossAxisItemCount - InternalVar_5;
}
if (InternalVar_4 == UIBlock.ChildCount)
{
return;
}
if (InternalVar_4 > UIBlock.ChildCount)
{
int InternalVar_6 = UIBlock.InternalProperty_84 - Mathf.FloorToInt(UIBlock.ChildCount / (float)crossAxisItemCount);
for (int InternalVar_7 = 0; InternalVar_7 < InternalVar_6 && InternalProperty_51 > InternalField_96; ++InternalVar_7)
{
InternalType_33 InternalVar_8 = InternalProperty_50[InternalProperty_51 - (++InternalField_96)] as InternalType_33;
InternalProperty_54.InternalMethod_58(InternalVar_8);
InternalField_94.InternalMethod_295(InternalVar_8);
}
InternalVar_6 = UIBlock.ChildCount - ((UIBlock.InternalProperty_84 - InternalVar_6) * crossAxisItemCount);
for (int InternalVar_7 = 0; InternalVar_7 < InternalVar_6; ++InternalVar_7)
{
InternalMethod_231();
}
}
else
{
bool InternalVar_6 = UIBlock.ChildCount % crossAxisItemCount != 0;
int InternalVar_7 = InternalVar_6 ? crossAxisItemCount - (UIBlock.ChildCount % crossAxisItemCount) : 0;
for (int InternalVar_8 = 0; InternalVar_8 < InternalVar_7 && InternalField_99 < DataSourceItemCount - 1; ++InternalVar_8)
{
InternalMethod_229(InternalParameter_175: false);
}
InternalVar_7 = Mathf.CeilToInt(UIBlock.ChildCount / (float)crossAxisItemCount) - UIBlock.InternalProperty_84;
for (int InternalVar_8 = 0; InternalVar_8 < InternalVar_7; ++InternalVar_8)
{
InternalType_33 InternalVar_9 = InternalMethod_201(InternalParameter_149: true);
InternalVar_9.InternalMethod_442();
InternalProperty_54.InternalMethod_59(InternalVar_9.InternalProperty_83);
}
}
InternalProperty_56.InternalMethod_42();
InternalMethod_412();
Relayout();
}
#region
[SerializeField, HideInInspector]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private InternalType_118 virtualBlockSerializer = null;
[NonSerialized, HideInInspector]
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private InternalType_100 InternalField_97 = InternalType_100.InternalField_312;
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private InternalType_100 InternalProperty_49
{
get
{
if (virtualBlockSerializer == null && InternalField_97.InternalProperty_180)
{
virtualBlockSerializer = ScriptableObject.CreateInstance<InternalType_118>();
virtualBlockSerializer.InternalField_384 = InternalField_97;
}
if (virtualBlockSerializer == null)
{
return InternalType_100.InternalField_312;
}
return virtualBlockSerializer.InternalField_384;
}
}
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private InternalType_521<InternalType_34> InternalProperty_50 => InternalProperty_49.InternalProperty_183;
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
private int InternalProperty_51 => InternalProperty_50.InternalProperty_433;
private void InternalMethod_206(InternalType_34 InternalParameter_155, int InternalParameter_156, bool InternalParameter_157)
{
if (!InternalProperty_49.InternalProperty_180)
{
virtualBlockSerializer = ScriptableObject.CreateInstance<InternalType_118>();
InternalField_97 = new InternalType_100(UIBlock);
virtualBlockSerializer.InternalField_384 = InternalField_97;
}
InternalProperty_49.InternalMethod_536(InternalParameter_155, InternalParameter_156, InternalParameter_157);
}
private void InternalMethod_207(InternalType_34 InternalParameter_158, int InternalParameter_159) => InternalProperty_49.InternalMethod_537(InternalParameter_158, InternalParameter_159);
private void InternalMethod_208(InternalType_34 InternalParameter_160) => InternalProperty_49.InternalMethod_538(InternalParameter_160);
private void InternalMethod_412() => InternalProperty_49.InternalMethod_3740(CrossAxisItemCount);
void ISerializationCallbackReceiver.OnBeforeSerialize() { }
void ISerializationCallbackReceiver.OnAfterDeserialize()
{
InternalMethod_2409();
if (!NovaApplication.IsPlaying ||
virtualBlockSerializer == null ||
virtualBlockSerializer.InternalField_384 == InternalField_97 ||
!virtualBlockSerializer.InternalField_384.InternalProperty_180 ||
(InternalProperty_53 != null && virtualBlockSerializer.InternalField_384.InternalProperty_181.InternalProperty_29 == InternalProperty_53.InternalProperty_29))
{
return;
}
InternalField_97 = InternalType_100.InternalMethod_541(virtualBlockSerializer.InternalField_384.InternalProperty_181.InternalProperty_29, InternalProperty_53);
virtualBlockSerializer = null;
}
#endregion
#endregion
}
}