Optimize navigation framework

This commit is contained in:
2023-10-21 09:42:00 +08:00
parent 497b828f2d
commit 79283f4039
3 changed files with 49 additions and 72 deletions

View File

@ -32,17 +32,15 @@ namespace GrasscutterTools.Forms
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
this.NavContainer = new System.Windows.Forms.SplitContainer();
this.ListPages = new System.Windows.Forms.ListBox();
this.TCMain = new System.Windows.Forms.TabControl();
this.CmbCommand = new System.Windows.Forms.ComboBox();
this.BtnCopy = new System.Windows.Forms.Button();
this.ChkAutoCopy = new System.Windows.Forms.CheckBox();
this.GrpCommand = new System.Windows.Forms.GroupBox();
this.LblClearFilter = new System.Windows.Forms.Label();
this.BtnInvokeOpenCommand = new System.Windows.Forms.Button();
this.MenuSpawnEntityFilter = new System.Windows.Forms.ContextMenuStrip(this.components);
this.LblClearFilter = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.NavContainer)).BeginInit();
this.NavContainer.Panel1.SuspendLayout();
this.NavContainer.Panel2.SuspendLayout();
this.NavContainer.SuspendLayout();
this.GrpCommand.SuspendLayout();
this.SuspendLayout();
@ -56,10 +54,6 @@ namespace GrasscutterTools.Forms
//
this.NavContainer.Panel1.Controls.Add(this.ListPages);
//
// NavContainer.Panel2
//
this.NavContainer.Panel2.Controls.Add(this.TCMain);
//
// ListPages
//
this.ListPages.BackColor = System.Drawing.Color.WhiteSmoke;
@ -72,14 +66,6 @@ namespace GrasscutterTools.Forms
this.ListPages.SelectedIndexChanged += new System.EventHandler(this.ListPages_SelectedIndexChanged);
this.ListPages.SizeChanged += new System.EventHandler(this.ListPages_SizeChanged);
//
// TCMain
//
resources.ApplyResources(this.TCMain, "TCMain");
this.TCMain.Multiline = true;
this.TCMain.Name = "TCMain";
this.TCMain.SelectedIndex = 0;
this.TCMain.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
//
// CmbCommand
//
resources.ApplyResources(this.CmbCommand, "CmbCommand");
@ -113,6 +99,14 @@ namespace GrasscutterTools.Forms
this.GrpCommand.Name = "GrpCommand";
this.GrpCommand.TabStop = false;
//
// LblClearFilter
//
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
this.LblClearFilter.BackColor = System.Drawing.Color.White;
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
this.LblClearFilter.Name = "LblClearFilter";
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
//
// BtnInvokeOpenCommand
//
resources.ApplyResources(this.BtnInvokeOpenCommand, "BtnInvokeOpenCommand");
@ -125,14 +119,6 @@ namespace GrasscutterTools.Forms
this.MenuSpawnEntityFilter.Name = "MenuSpawnEntityFilter";
resources.ApplyResources(this.MenuSpawnEntityFilter, "MenuSpawnEntityFilter");
//
// LblClearFilter
//
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
this.LblClearFilter.BackColor = System.Drawing.Color.White;
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
this.LblClearFilter.Name = "LblClearFilter";
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
//
// FormMain
//
resources.ApplyResources(this, "$this");
@ -145,7 +131,6 @@ namespace GrasscutterTools.Forms
this.Load += new System.EventHandler(this.FormMain_Load);
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FormMain_KeyDown);
this.NavContainer.Panel1.ResumeLayout(false);
this.NavContainer.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.NavContainer)).EndInit();
this.NavContainer.ResumeLayout(false);
this.GrpCommand.ResumeLayout(false);
@ -161,7 +146,6 @@ namespace GrasscutterTools.Forms
private System.Windows.Forms.CheckBox ChkAutoCopy;
private System.Windows.Forms.GroupBox GrpCommand;
private System.Windows.Forms.Button BtnInvokeOpenCommand;
private System.Windows.Forms.TabControl TCMain;
private System.Windows.Forms.ContextMenuStrip MenuSpawnEntityFilter;
private System.Windows.Forms.ListBox ListPages;
private System.Windows.Forms.SplitContainer NavContainer;

View File

@ -148,6 +148,10 @@ namespace GrasscutterTools.Forms
Logger.I(TAG, $"{page.Name} OnLoad completed");
}
// 默认选中首页
if (ListPages.SelectedIndex == -1)
ListPages.SelectedIndex = 0;
Logger.I(TAG, "FormMain_Load completed");
}
@ -207,7 +211,6 @@ namespace GrasscutterTools.Forms
{
Logger.I(TAG, "InitPages enter");
Pages = new Dictionary<string, BasePage>(32);
TCMain.SuspendLayout();
CreatePage<PageHome>();
var poc = CreatePage<PageOpenCommand>();
poc.ShowTipInRunButton = msg => ShowTip(msg, BtnInvokeOpenCommand);
@ -233,7 +236,6 @@ namespace GrasscutterTools.Forms
#if DEBUG
CreatePage<PageTools>();
#endif
TCMain.ResumeLayout();
Logger.I(TAG, "InitPages completed");
}
@ -377,7 +379,19 @@ namespace GrasscutterTools.Forms
.ElementAt(ListPages.SelectedIndex)
.Item1;
// 通过Key找到页面的父节点也就是TabPage设置为选中项
TCMain.SelectedTab = Pages[key].Parent as TabPage;
ShowPage(Pages[key]);
}
/// <summary>
/// 展示页面
/// </summary>
/// <param name="page">页面实例</param>
private void ShowPage(BasePage page)
{
NavContainer.Panel2.SuspendLayout();
NavContainer.Panel2.Controls.Clear();
NavContainer.Panel2.Controls.Add(page);
NavContainer.Panel2.ResumeLayout();
}
/// <summary>
@ -422,9 +436,6 @@ namespace GrasscutterTools.Forms
Name = typeof(T).Name,
};
Pages.Add(page.Name, page);
var tp = new TabPage();
TCMain.TabPages.Add(tp);
tp.Controls.Add(page);
return page;
}
@ -698,13 +709,18 @@ namespace GrasscutterTools.Forms
// F5 为执行命令
OnOpenCommandInvoke();
}
else if (e.Alt && e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
else if ((e.Alt || e.Control) && e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
{
// Alt+数字键 = 跳转到对应页面
// Alt|Ctrl+数字键 = 跳转到对应页面
var i = e.KeyCode == Keys.D0 ? 9 : e.KeyCode - Keys.D1;
if (i < ListPages.Items.Count)
ListPages.SelectedIndex = i;
}
else if (e.Control && e.KeyCode == Keys.Tab)
{
// 切换到下一个页面
ListPages.SelectedIndex = (ListPages.SelectedIndex + 1) % ListPages.Items.Count;
}
else if (Common.KeyGo.IsEnabled == false)
{
foreach (var hotkeyItem in Common.KeyGo.Items)
@ -755,13 +771,23 @@ namespace GrasscutterTools.Forms
/// 导航到目标页面并返回该页面实例
/// </summary>
/// <typeparam name="TPage">页面类型</typeparam>
/// <returns>如果导航到了则返回页面实例,否则返回空</returns>
public TPage NavigateTo<TPage>() where TPage : BasePage
{
ListPages.SelectedIndex = -1;
var page = Pages[typeof(TPage).Name];
TCMain.SelectedTab = page.Parent as TabPage;
return page as TPage;
var key = typeof(TPage).Name;
var page = Pages[key] as TPage;
var i = 0;
foreach (var it in PageTabOrders.Where(it => it.Item2))
{
if (it.Item1 == key)
{
ListPages.SelectedIndex = i;
return page;
}
i++;
}
ShowPage(page);
return page;
}
#endregion - General -

View File

@ -133,7 +133,7 @@
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ListPages.ItemHeight" type="System.Int32, mscorlib">
<value>22</value>
<value>25</value>
</data>
<data name="ListPages.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
@ -171,39 +171,6 @@
<data name="NavContainer.Panel1MinSize" type="System.Int32, mscorlib">
<value>80</value>
</data>
<data name="TCMain.Appearance" type="System.Windows.Forms.TabAppearance, System.Windows.Forms">
<value>FlatButtons</value>
</data>
<data name="TCMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="TCMain.ItemSize" type="System.Drawing.Size, System.Drawing">
<value>0, 1</value>
</data>
<data name="TCMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="TCMain.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>610, 275</value>
</data>
<data name="TCMain.Size" type="System.Drawing.Size, System.Drawing">
<value>656, 275</value>
</data>
<data name="TCMain.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;TCMain.Name" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TCMain.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TCMain.Parent" xml:space="preserve">
<value>NavContainer.Panel2</value>
</data>
<data name="&gt;&gt;TCMain.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;NavContainer.Panel2.Name" xml:space="preserve">
<value>NavContainer.Panel2</value>
</data>