CI / Go Backend (push) Canceled after 0s
初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器 HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块 Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚 AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
169 lines
5.4 KiB
C#
169 lines
5.4 KiB
C#
using System.Windows;
|
||
using System.Windows.Controls;
|
||
using PCL.Core.App;
|
||
|
||
using PCL.Core.App.Localization;
|
||
namespace PCL;
|
||
|
||
public partial class PageToolsLeft
|
||
{
|
||
private bool isLoad;
|
||
private bool isPageSwitched; // 如果在 Loaded 前切换到其他页面,会导致触发 Loaded 时再次切换一次
|
||
|
||
public PageToolsLeft()
|
||
{
|
||
InitializeComponent();
|
||
AnimatedControl = PanItem;
|
||
Loaded += PageLinkLeft_Loaded;
|
||
Unloaded += PageOtherLeft_Unloaded;
|
||
}
|
||
|
||
private void PageLinkLeft_Loaded(object sender, RoutedEventArgs e)
|
||
{
|
||
var isHiddenPage = false;
|
||
var hide = Config.Preference.Hide;
|
||
|
||
if (ItemGameLink.Checked && hide.ToolsGameLink) isHiddenPage = true;
|
||
if (ItemTest.Checked && hide.ToolsTest) isHiddenPage = true;
|
||
if (PageSetupUI.HiddenForceShow)
|
||
isHiddenPage = false;
|
||
// 若页面错误,或尚未加载,则继续
|
||
if (isLoad && !isHiddenPage)
|
||
return;
|
||
isLoad = true;
|
||
// 刷新子页面隐藏情况
|
||
PageSetupUI.HiddenRefresh();
|
||
// 选择第一个未被禁用的子页面
|
||
if (isPageSwitched)
|
||
return;
|
||
var hideCfg = Config.Preference.Hide;
|
||
if (!hideCfg.ToolsGameLink)
|
||
ItemGameLink.SetChecked(true, false, false);
|
||
else if (!hideCfg.ToolsTest)
|
||
ItemTest.SetChecked(true, false, false);
|
||
else
|
||
ItemGameLink.SetChecked(true, false, false);
|
||
}
|
||
|
||
private void PageOtherLeft_Unloaded(object sender, RoutedEventArgs e)
|
||
{
|
||
isPageSwitched = false;
|
||
}
|
||
|
||
public void Refresh(object sender, EventArgs e)
|
||
{
|
||
var button = (MyIconButton)sender;
|
||
if (button.Tag is null)
|
||
return;
|
||
double id = ModBase.Val(button.Tag);
|
||
switch (id)
|
||
{
|
||
case (double)FormMain.PageSubType.ToolsGameLink:
|
||
{
|
||
if (ModMain.frmToolsGameLink is null)
|
||
ModMain.frmToolsGameLink = new PageToolsGameLink();
|
||
ModMain.frmToolsGameLink.Reload();
|
||
ItemGameLink.Checked = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
#region 页面切换
|
||
|
||
/// <summary>
|
||
/// 当前页面的编号。
|
||
/// </summary>
|
||
public FormMain.PageSubType pageID = FormMain.PageSubType.ToolsGameLink;
|
||
|
||
/// <summary>
|
||
/// 勾选事件改变页面。
|
||
/// </summary>
|
||
private void PageCheck(object senderRaw, ModBase.RouteEventArgs e)
|
||
{
|
||
var sender = (MyListItem)senderRaw;
|
||
// 尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
|
||
// 若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
|
||
if (sender.Tag is not null)
|
||
PageChange((FormMain.PageSubType)ModBase.Val(sender.Tag));
|
||
}
|
||
|
||
public object PageGet(FormMain.PageSubType? id = null)
|
||
{
|
||
var targetID = id ?? pageID;
|
||
switch (id)
|
||
{
|
||
case FormMain.PageSubType.ToolsGameLink:
|
||
{
|
||
if (ModMain.frmToolsGameLink is null)
|
||
ModMain.frmToolsGameLink = new PageToolsGameLink();
|
||
return ModMain.frmToolsGameLink;
|
||
}
|
||
case FormMain.PageSubType.ToolsTest:
|
||
{
|
||
if (ModMain.frmToolsTest is null)
|
||
ModMain.frmToolsTest = new PageToolsTest();
|
||
return ModMain.frmToolsTest;
|
||
}
|
||
default:
|
||
{
|
||
throw new Exception("未知的更多子页面种类:" + (int)id);
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 切换现有页面。
|
||
/// </summary>
|
||
public void PageChange(FormMain.PageSubType id)
|
||
{
|
||
if (pageID == id)
|
||
return;
|
||
ModAnimation.AniControlEnabled += 1;
|
||
isPageSwitched = true;
|
||
try
|
||
{
|
||
PageChangeRun((MyPageRight)PageGet(id));
|
||
pageID = id;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ModBase.Log(
|
||
ex,
|
||
$"切换分页面失败(ID {(int)id})",
|
||
ModBase.LogLevel.Feedback,
|
||
userSummary: Lang.Text("Tools.Error.OperationFailed"));
|
||
}
|
||
finally
|
||
{
|
||
ModAnimation.AniControlEnabled -= 1;
|
||
}
|
||
}
|
||
|
||
private static void PageChangeRun(MyPageRight target)
|
||
{
|
||
ModAnimation.AniStop("FrmMain PageChangeRight"); // 停止主页面的右页面切换动画,防止它与本动画一起触发多次 PageOnEnter
|
||
if (target.Parent is not null)
|
||
target.SetValue(ContentPresenter.ContentProperty, null);
|
||
ModMain.frmMain.pageRight = target;
|
||
((MyPageRight)ModMain.frmMain.PanMainRight.Child).PageOnExit();
|
||
ModAnimation.AniStart(new[]
|
||
{
|
||
ModAnimation.AaCode(() =>
|
||
{
|
||
((MyPageRight)ModMain.frmMain.PanMainRight.Child).PageOnForceExit();
|
||
ModMain.frmMain.PanMainRight.Child = ModMain.frmMain.pageRight;
|
||
ModMain.frmMain.pageRight.Opacity = 0d;
|
||
}, 130),
|
||
ModAnimation.AaCode(() =>
|
||
{
|
||
// 延迟触发页面通用动画,以使得在 Loaded 事件中加载的控件得以处理
|
||
ModMain.frmMain.pageRight.Opacity = 1d;
|
||
ModMain.frmMain.pageRight.PageOnEnter();
|
||
}, 30, true)
|
||
}, "PageLeft PageChange");
|
||
}
|
||
|
||
#endregion
|
||
}
|