From 3ac9685e6d0390a72c0989d3c029a063da362e74 Mon Sep 17 00:00:00 2001 From: FenPhoenix Date: Mon, 8 Jul 2019 06:59:38 -0700 Subject: [PATCH] Lazy-load add tag menu And that's the last of the menus. Onto higher hanging fruit. --- AngelLoader/AngelLoader.csproj | 1 + .../Static_LazyLoaded/AddTagLLMenu.cs | 22 +++++++++ AngelLoader/Forms/MainForm.Designer.cs | 49 ++++++++----------- AngelLoader/Forms/MainForm.cs | 23 ++++++--- AngelLoader/Forms/MainForm_InitManual.cs | 7 +-- 5 files changed, 61 insertions(+), 41 deletions(-) create mode 100644 AngelLoader/CustomControls/Static_LazyLoaded/AddTagLLMenu.cs diff --git a/AngelLoader/AngelLoader.csproj b/AngelLoader/AngelLoader.csproj index 12ecc0c75..db7afb11c 100644 --- a/AngelLoader/AngelLoader.csproj +++ b/AngelLoader/AngelLoader.csproj @@ -234,6 +234,7 @@ PathsPage.cs + diff --git a/AngelLoader/CustomControls/Static_LazyLoaded/AddTagLLMenu.cs b/AngelLoader/CustomControls/Static_LazyLoaded/AddTagLLMenu.cs new file mode 100644 index 000000000..3bddee4ba --- /dev/null +++ b/AngelLoader/CustomControls/Static_LazyLoaded/AddTagLLMenu.cs @@ -0,0 +1,22 @@ +using System.ComponentModel; +using System.Windows.Forms; +using AngelLoader.Forms; + +namespace AngelLoader.CustomControls.Static_LazyLoaded +{ + internal static class AddTagLLMenu + { + private static bool _constructed; + internal static ContextMenuStrip Menu; + + internal static void Construct(MainForm form, IContainer components) + { + if (_constructed) return; + + Menu = new ContextMenuStrip(components); + Menu.Closed += form.AddTagMenu_Closed; + + _constructed = true; + } + } +} diff --git a/AngelLoader/Forms/MainForm.Designer.cs b/AngelLoader/Forms/MainForm.Designer.cs index bb0ae493e..289941181 100644 --- a/AngelLoader/Forms/MainForm.Designer.cs +++ b/AngelLoader/Forms/MainForm.Designer.cs @@ -185,7 +185,7 @@ private void InitializeComponent() this.ChooseReadmeListBox = new AngelLoader.CustomControls.ListBoxCustom(); this.ReadmeRichTextBox = new AngelLoader.CustomControls.RichTextBoxCustom(); this.MainToolTip = new System.Windows.Forms.ToolTip(this.components); - this.AddTagMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.BottomPanel.SuspendLayout(); this.BottomRightButtonsFLP.SuspendLayout(); this.BottomLeftButtonsFLP.SuspendLayout(); @@ -580,8 +580,8 @@ private void InitializeComponent() this.FMsDGV.AllowUserToDeleteRows = false; this.FMsDGV.AllowUserToOrderColumns = true; this.FMsDGV.AllowUserToResizeRows = false; - this.FMsDGV.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.FMsDGV.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; @@ -745,7 +745,7 @@ private void InitializeComponent() // // FilterBarFLP // - this.FilterBarFLP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.FilterBarFLP.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.FilterBarFLP.AutoScroll = true; this.FilterBarFLP.Controls.Add(this.FilterGamesLeftSepToolStrip); @@ -787,7 +787,7 @@ private void InitializeComponent() // // FilterGameButtonsToolStrip // - this.FilterGameButtonsToolStrip.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.FilterGameButtonsToolStrip.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); this.FilterGameButtonsToolStrip.BackColor = System.Drawing.SystemColors.Control; this.FilterGameButtonsToolStrip.CanOverflow = false; @@ -915,7 +915,7 @@ private void InitializeComponent() // // FilterIconButtonsToolStrip // - this.FilterIconButtonsToolStrip.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.FilterIconButtonsToolStrip.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); this.FilterIconButtonsToolStrip.BackColor = System.Drawing.SystemColors.Control; this.FilterIconButtonsToolStrip.CanOverflow = false; @@ -1107,7 +1107,7 @@ private void InitializeComponent() // // RefreshAreaToolStrip // - this.RefreshAreaToolStrip.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.RefreshAreaToolStrip.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); this.RefreshAreaToolStrip.BackColor = System.Drawing.SystemColors.Control; this.RefreshAreaToolStrip.CanOverflow = false; @@ -1298,7 +1298,7 @@ private void InitializeComponent() // // TopRightCollapseButton // - this.TopRightCollapseButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.TopRightCollapseButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); this.TopRightCollapseButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.TopRightCollapseButton.FlatAppearance.BorderSize = 0; @@ -1313,8 +1313,8 @@ private void InitializeComponent() // // TopRightTabControl // - this.TopRightTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.TopRightTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.TopRightTabControl.Controls.Add(this.StatisticsTabPage); this.TopRightTabControl.Controls.Add(this.EditFMTabPage); @@ -1583,7 +1583,7 @@ private void InitializeComponent() // // EditFMTitleTextBox // - this.EditFMTitleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.EditFMTitleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.EditFMTitleTextBox.Location = new System.Drawing.Point(8, 24); this.EditFMTitleTextBox.Name = "EditFMTitleTextBox"; @@ -1693,7 +1693,7 @@ private void InitializeComponent() // // EditFMDisabledModsTextBox // - this.EditFMDisabledModsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.EditFMDisabledModsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.EditFMDisabledModsTextBox.Location = new System.Drawing.Point(8, 192); this.EditFMDisabledModsTextBox.Name = "EditFMDisabledModsTextBox"; @@ -1713,7 +1713,7 @@ private void InitializeComponent() // // EditFMAuthorTextBox // - this.EditFMAuthorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.EditFMAuthorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.EditFMAuthorTextBox.Location = new System.Drawing.Point(8, 64); this.EditFMAuthorTextBox.Name = "EditFMAuthorTextBox"; @@ -1752,8 +1752,8 @@ private void InitializeComponent() // // CommentTextBox // - this.CommentTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.CommentTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.CommentTextBox.Location = new System.Drawing.Point(8, 8); this.CommentTextBox.Multiline = true; @@ -1792,7 +1792,7 @@ private void InitializeComponent() // // AddTagTextBox // - this.AddTagTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.AddTagTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.AddTagTextBox.DisallowedCharacters = ",;"; this.AddTagTextBox.Location = new System.Drawing.Point(8, 8); @@ -1841,12 +1841,12 @@ private void InitializeComponent() this.AddTagFromListButton.TabIndex = 0; this.AddTagFromListButton.Text = "Add from list..."; this.AddTagFromListButton.UseVisualStyleBackColor = true; - this.AddTagFromListButton.Click += new System.EventHandler(this.TagPresetsButton_Click); + this.AddTagFromListButton.Click += new System.EventHandler(this.AddTagFromListButton_Click); // // TagsTreeView // - this.TagsTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.TagsTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.TagsTreeView.HideSelection = false; this.TagsTreeView.Location = new System.Drawing.Point(8, 32); @@ -2091,8 +2091,8 @@ private void InitializeComponent() // // ReadmeRichTextBox // - this.ReadmeRichTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.ReadmeRichTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.ReadmeRichTextBox.BackColor = System.Drawing.SystemColors.Window; this.ReadmeRichTextBox.Location = new System.Drawing.Point(0, 0); @@ -2103,12 +2103,6 @@ private void InitializeComponent() this.ReadmeRichTextBox.Text = ""; this.ReadmeRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.ReadmeRichTextBox_LinkClicked); // - // AddTagMenu - // - this.AddTagMenu.Name = "AddTagMenu"; - this.AddTagMenu.Size = new System.Drawing.Size(61, 4); - this.AddTagMenu.Closed += new System.Windows.Forms.ToolStripDropDownClosedEventHandler(this.AddTagMenu_Closed); - // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); @@ -2242,7 +2236,6 @@ private void InitializeComponent() private System.Windows.Forms.Button AddTagFromListButton; private AngelLoader.CustomControls.TextBoxCustom AddTagTextBox; private System.Windows.Forms.ListBox AddTagListBox; - private System.Windows.Forms.ContextMenuStrip AddTagMenu; private AngelLoader.CustomControls.TextBoxCustom FilterAuthorTextBox; private System.Windows.Forms.Label FilterAuthorLabel; private System.Windows.Forms.TabPage EditFMTabPage; diff --git a/AngelLoader/Forms/MainForm.cs b/AngelLoader/Forms/MainForm.cs index 245d71eff..e7ada1cd5 100644 --- a/AngelLoader/Forms/MainForm.cs +++ b/AngelLoader/Forms/MainForm.cs @@ -513,14 +513,17 @@ public void InitThreadable() #region Autosize menus + // NOTE: This region is now empty cause all the menus are now programmatically defined and lazy-loaded, + // but for future reference, this is how you gotta do it if you want to keep them designer-generated: + + // --- old notes --- + // This is another hack to fix behavior caused by the UI designer. When you select a menu, it appears // and adds an extra "Type Here" item to the bottom. This item counts as part of the height, and so // the height ends up including an item that only actually appears in the designer, causing the menu // to be shown in the wrong location when you call Show() with the height as a parameter. Setting a // menu's size to empty causes it to autosize back to its actual proper size. I swear, this stuff. - AddTagMenu.Size = Size.Empty; - #endregion // Cheap 'n cheesy storage of initial size for minimum-width setting later @@ -3203,10 +3206,12 @@ private void AddTagOperation(FanMission fm, string catAndTag) private void AddTagButton_Click(object sender, EventArgs e) => AddTagOperation(FMsDGV.GetSelectedFM(), AddTagTextBox.Text); - private void TagPresetsButton_Click(object sender, EventArgs e) + private void AddTagFromListButton_Click(object sender, EventArgs e) { GlobalTags.SortAndMoveMiscToEnd(); - AddTagMenu.Items.Clear(); + + AddTagLLMenu.Construct(this, components); + AddTagLLMenu.Menu.Items.Clear(); var addTagMenuItems = new List(); foreach (var catAndTag in GlobalTags) @@ -3250,9 +3255,9 @@ private void TagPresetsButton_Click(object sender, EventArgs e) } } - AddTagMenu.Items.AddRange(addTagMenuItems.ToArray()); + AddTagLLMenu.Menu.Items.AddRange(addTagMenuItems.ToArray()); - ShowMenu(AddTagMenu, AddTagFromListButton, MenuPos.LeftDown); + ShowMenu(AddTagLLMenu.Menu, AddTagFromListButton, MenuPos.LeftDown); } private void AddTagMenuItem_Click(object sender, EventArgs e) @@ -3282,7 +3287,11 @@ private void AddTagMenuCustomItem_Click(object sender, EventArgs e) // Just to keep things in a known state (clearing items also removes their event hookups, which is // convenient) - private void AddTagMenu_Closed(object sender, ToolStripDropDownClosedEventArgs e) => AddTagMenu.Items.Clear(); + internal void AddTagMenu_Closed(object sender, ToolStripDropDownClosedEventArgs e) + { + // This handler will only be hooked up after construction, so we don't need to call Construct() + AddTagLLMenu.Menu.Items.Clear(); + } #endregion diff --git a/AngelLoader/Forms/MainForm_InitManual.cs b/AngelLoader/Forms/MainForm_InitManual.cs index ce4f4d672..ee25e5446 100644 --- a/AngelLoader/Forms/MainForm_InitManual.cs +++ b/AngelLoader/Forms/MainForm_InitManual.cs @@ -186,7 +186,6 @@ private void InitComponentManual() ChooseReadmeListBox = new ListBoxCustom(); ReadmeRichTextBox = new RichTextBoxCustom(); MainToolTip = new ToolTip(components); - AddTagMenu = new ContextMenuStrip(components); #endregion @@ -1494,7 +1493,7 @@ private void InitComponentManual() AddTagFromListButton.Height = 23; AddTagFromListButton.TabIndex = 0; AddTagFromListButton.UseVisualStyleBackColor = true; - AddTagFromListButton.Click += TagPresetsButton_Click; + AddTagFromListButton.Click += AddTagFromListButton_Click; // // TagsTreeView // @@ -1722,10 +1721,6 @@ private void InitComponentManual() ReadmeRichTextBox.TabIndex = 0; ReadmeRichTextBox.LinkClicked += ReadmeRichTextBox_LinkClicked; // - // AddTagMenu - // - AddTagMenu.Closed += AddTagMenu_Closed; - // // MainForm // AutoScaleDimensions = new SizeF(96F, 96F);