using System.Collections.Generic;
///
/// UI导航栈管理器
/// 负责管理窗口的入栈、出栈和返回历史
///
public class UINavigationManager
{
#region Singleton
private static UINavigationManager _instance;
public static UINavigationManager Instance
{
get
{
if (_instance == null)
{
_instance = new UINavigationManager();
}
return _instance;
}
}
private UINavigationManager() { }
#endregion
#region Fields
///
/// 导航栈:存储窗口的返回历史
///
private List _navigationStack = new List(8);
///
/// 对外只读访问(用于兼容旧代码)
///
public List NavigationStack => _navigationStack;
///
/// 栈中窗口数量
///
public int Count => _navigationStack.Count;
#endregion
#region Stack Operations
///
/// 处理窗口入栈(根据配置)
///
/// 窗口实例
/// 栈管理模式
public void HandleWindowOpen(UIWindow window, UIStackMode stackMode)
{
if (window == null) return;
switch (stackMode)
{
case UIStackMode.None:
// 不入栈(如Tips、HUD)
break;
case UIStackMode.Stackable:
// 普通入栈
if (!_navigationStack.Contains(window))
{
_navigationStack.Add(window);
}
break;
case UIStackMode.Replace:
// 替换栈顶
if (_navigationStack.Count > 0)
{
var top = _navigationStack[_navigationStack.Count - 1];
_navigationStack.RemoveAt(_navigationStack.Count - 1);
}
_navigationStack.Add(window);
break;
case UIStackMode.ClearAndPush:
// 清空后入栈
_navigationStack.Clear();
_navigationStack.Add(window);
break;
}
}
///
/// 处理窗口关闭(出栈)
///
/// 窗口实例
public void HandleWindowClose(UIWindow window)
{
if (window != null && _navigationStack.Contains(window))
{
_navigationStack.Remove(window);
}
}
///
/// 获取栈顶窗口
///
public UIWindow GetTopWindow()
{
return _navigationStack.Count > 0 ? _navigationStack[_navigationStack.Count - 1] : null;
}
///
/// 检查窗口是否在栈中
///
public bool IsWindowInStack(UIWindow window)
{
return _navigationStack.Contains(window);
}
///
/// 清空栈
///
public void Clear()
{
_navigationStack.Clear();
}
#endregion
}