namespace Yw.WpfUI.Hydro
{
///
/// 简单状态管理器
///
internal class VisualStateManager
{
//缓存
private readonly Dictionary _cache = new();
///
/// 初始化
///
public void Initial(List allVisualList)
{
_cache.Clear();
allVisualList?.ForEach(x => _cache.Add(x, eVisualState.Normal));
}
///
/// 设置
///
public void SetState(VisualL3d visual, eVisualState state)
{
if (visual == null)
{
return;
}
_cache[visual] = state;
}
///
/// 加载状态
///
public void LoadState(VisualL3d visual, eVisualState state)
{
var origin = GetState(visual);
_cache[visual] = origin | state;
}
///
/// 卸载状态
///
public void UnloadState(VisualL3d visual, eVisualState state)
{
var origin = GetState(visual);
_cache[visual] = origin ^ state;
}
///
/// 获取状态
///
public eVisualState GetState(VisualL3d visual)
{
if (visual == null)
{
return eVisualState.Normal;
}
if (!_cache.ContainsKey(visual))
{
return eVisualState.Normal;
}
return _cache[visual];
}
///
/// 获取有效状态
///
public eVisualState GetEffectState(VisualL3d visual)
{
var state = GetState(visual);
if (state == eVisualState.None)
{
return eVisualState.Normal;
}
if ((state & eVisualState.Highlight) == eVisualState.Highlight)
{
return eVisualState.Highlight;
}
if ((state & eVisualState.Selection) == eVisualState.Selection)
{
return eVisualState.Selection;
}
if ((state & eVisualState.Override) == eVisualState.Override)
{
return eVisualState.Override;
}
return eVisualState.Normal;
}
}
}