From 3f462508a3a94c908c6a57d86074c23941ae91f7 Mon Sep 17 00:00:00 2001 From: Paul Hebble Date: Sun, 24 Dec 2023 11:01:22 -0600 Subject: [PATCH] Show tag-hiding menu on clicking hidden tag --- GUI/Controls/ManageMods.Designer.cs | 4 ++- GUI/Controls/ManageMods.cs | 41 ++++++++++++++++++++++++----- GUI/Controls/ManageMods.resx | 1 + GUI/Controls/ModInfo.Designer.cs | 3 ++- GUI/Controls/ModInfo.cs | 14 +++++++--- GUI/Controls/TagsLabelsLinkList.cs | 36 ++++++++++++++++--------- 6 files changed, 74 insertions(+), 25 deletions(-) diff --git a/GUI/Controls/ManageMods.Designer.cs b/GUI/Controls/ManageMods.Designer.cs index df1098f7c7..bf21923424 100644 --- a/GUI/Controls/ManageMods.Designer.cs +++ b/GUI/Controls/ManageMods.Designer.cs @@ -549,7 +549,9 @@ private void InitializeComponent() this.hiddenTagsLabelsLinkList.Location = new System.Drawing.Point(0, 0); this.hiddenTagsLabelsLinkList.Name = "hiddenTagsLabelsLinkList"; this.hiddenTagsLabelsLinkList.Size = new System.Drawing.Size(500, 20); - this.hiddenTagsLabelsLinkList.OnChangeFilter += hiddenTagsLabelsLinkList_OnChangeFilter; + this.hiddenTagsLabelsLinkList.TagClicked += hiddenTagsLabelsLinkList_TagClicked; + this.hiddenTagsLabelsLinkList.LabelClicked += hiddenTagsLabelsLinkList_LabelClicked; + resources.ApplyResources(this.hiddenTagsLabelsLinkList, "hiddenTagsLabelsLinkList"); // // ManageMods // diff --git a/GUI/Controls/ManageMods.cs b/GUI/Controls/ManageMods.cs index 9e3bd5ff0b..a7fa6d0cc2 100644 --- a/GUI/Controls/ManageMods.cs +++ b/GUI/Controls/ManageMods.cs @@ -594,9 +594,24 @@ private void ModGrid_HeaderMouseClick(object sender, DataGridViewCellMouseEventA // Right click -> Bring up context menu to change visibility of columns. else if (e.Button == MouseButtons.Right) { - // Start from scrap: clear the entire item list, then add all options again. - ModListHeaderContextMenuStrip.Items.Clear(); + ShowHeaderContextMenu(); + } + } + private void ShowHeaderContextMenu(bool columns = true, + bool tags = true) + { + if (!columns && !tags) + { + // Don't show a blank menu + return; + } + + // Start from scratch: clear the entire item list, then add all options again + ModListHeaderContextMenuStrip.Items.Clear(); + + if (columns) + { // Add columns ModListHeaderContextMenuStrip.Items.AddRange( ModGrid.Columns.Cast() @@ -610,10 +625,16 @@ private void ModGrid_HeaderMouseClick(object sender, DataGridViewCellMouseEventA }) .ToArray() ); + } + if (columns && tags) + { // Separator ModListHeaderContextMenuStrip.Items.Add(new ToolStripSeparator()); + } + if (tags) + { // Add tags var registry = RegistryManager.Instance(Main.Instance.CurrentInstance, repoData).registry; ModListHeaderContextMenuStrip.Items.AddRange( @@ -627,10 +648,10 @@ private void ModGrid_HeaderMouseClick(object sender, DataGridViewCellMouseEventA }) .ToArray() ); - - // Show the context menu on cursor position. - ModListHeaderContextMenuStrip.Show(Cursor.Position); } + + // Show the context menu on cursor position. + ModListHeaderContextMenuStrip.Show(Cursor.Position); } /// @@ -1595,9 +1616,15 @@ private void UpdateHiddenTagsAndLabels() }); } - private void hiddenTagsLabelsLinkList_OnChangeFilter(SavedSearch search, bool merge) + private void hiddenTagsLabelsLinkList_TagClicked(ModuleTag tag, bool merge) + { + ShowHeaderContextMenu(columns: false); + } + + private void hiddenTagsLabelsLinkList_LabelClicked(ModuleLabel label, bool merge) { - Filter(search, merge); + Filter(ModList.FilterToSavedSearch(GUIModFilter.CustomLabel, null, label), + merge); } #endregion diff --git a/GUI/Controls/ManageMods.resx b/GUI/Controls/ManageMods.resx index 266a5a962e..f3e99c918b 100644 --- a/GUI/Controls/ManageMods.resx +++ b/GUI/Controls/ManageMods.resx @@ -136,6 +136,7 @@ Labels Previous selected mod... Next selected mod... + Click to show or hide tags Installed Auto-installed Update diff --git a/GUI/Controls/ModInfo.Designer.cs b/GUI/Controls/ModInfo.Designer.cs index 51e99de552..e5a2d115ad 100644 --- a/GUI/Controls/ModInfo.Designer.cs +++ b/GUI/Controls/ModInfo.Designer.cs @@ -89,7 +89,8 @@ private void InitializeComponent() this.tagsLabelsLinkList.Location = new System.Drawing.Point(0, 0); this.tagsLabelsLinkList.Name = "tagsLabelsLinkList"; this.tagsLabelsLinkList.Size = new System.Drawing.Size(500, 20); - this.tagsLabelsLinkList.OnChangeFilter += tagsLabelsLinkList_OnChangeFilter; + this.tagsLabelsLinkList.TagClicked += tagsLabelsLinkList_TagClicked; + this.tagsLabelsLinkList.LabelClicked += tagsLabelsLinkList_LabelClicked; // // MetadataModuleAbstractLabel // diff --git a/GUI/Controls/ModInfo.cs b/GUI/Controls/ModInfo.cs index ff8ddadba1..e51ce5d77b 100644 --- a/GUI/Controls/ModInfo.cs +++ b/GUI/Controls/ModInfo.cs @@ -159,10 +159,16 @@ private void UpdateTagsAndLabels(CkanModule mod) }); } - private void tagsLabelsLinkList_OnChangeFilter(SavedSearch search, bool merge) - { - OnChangeFilter?.Invoke(search, merge); - } + + private void tagsLabelsLinkList_TagClicked(ModuleTag tag, bool merge) + => OnChangeFilter?.Invoke(ModList.FilterToSavedSearch(GUIModFilter.Tag, + tag, null), + merge); + + private void tagsLabelsLinkList_LabelClicked(ModuleLabel label, bool merge) + => OnChangeFilter?.Invoke(ModList.FilterToSavedSearch(GUIModFilter.CustomLabel, + null, label), + merge); private void Metadata_OnChangeFilter(SavedSearch search, bool merge) { diff --git a/GUI/Controls/TagsLabelsLinkList.cs b/GUI/Controls/TagsLabelsLinkList.cs index d9bf25bfc4..b1a2acea0b 100644 --- a/GUI/Controls/TagsLabelsLinkList.cs +++ b/GUI/Controls/TagsLabelsLinkList.cs @@ -30,7 +30,7 @@ public void UpdateTagsAndLabels(IEnumerable tags, foreach (ModuleTag tag in tags) { Controls.Add(TagLabelLink( - tag.Name, tag, + tag.Name, tag, tagToolTip, new LinkLabelLinkClickedEventHandler(TagLinkLabel_LinkClicked))); } } @@ -39,7 +39,7 @@ public void UpdateTagsAndLabels(IEnumerable tags, foreach (ModuleLabel mlbl in labels) { Controls.Add(TagLabelLink( - mlbl.Name, mlbl, + mlbl.Name, mlbl, Properties.Resources.FilterLinkToolTip, new LinkLabelLinkClickedEventHandler(LabelLinkLabel_LinkClicked))); } } @@ -47,7 +47,24 @@ public void UpdateTagsAndLabels(IEnumerable tags, }); } - public event Action OnChangeFilter; + public string TagToolTipText + { + get => tagToolTip; + set + { + tagToolTip = value; + foreach (var lbl in Controls.OfType() + .Where(lbl => lbl.Tag is ModuleTag)) + { + ToolTip.SetToolTip(lbl, tagToolTip); + } + } + } + + public event Action TagClicked; + public event Action LabelClicked; + + private string tagToolTip = Properties.Resources.FilterLinkToolTip; private static int LinkLabelBottom(LinkLabel lbl) => lbl == null ? 0 @@ -59,6 +76,7 @@ public int TagsHeight private LinkLabel TagLabelLink(string name, object tag, + string toolTip, LinkLabelLinkClickedEventHandler onClick) { var link = new LinkLabel() @@ -71,7 +89,7 @@ private LinkLabel TagLabelLink(string name, Tag = tag, }; link.LinkClicked += onClick; - ToolTip.SetToolTip(link, Properties.Resources.FilterLinkToolTip); + ToolTip.SetToolTip(link, toolTip); return link; } @@ -79,20 +97,14 @@ private void TagLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventAr { var link = sender as LinkLabel; var merge = ModifierKeys.HasAnyFlag(Keys.Control, Keys.Shift); - OnChangeFilter?.Invoke( - ModList.FilterToSavedSearch(GUIModFilter.Tag, - link.Tag as ModuleTag, null), - merge); + TagClicked?.Invoke(link.Tag as ModuleTag, merge); } private void LabelLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { var link = sender as LinkLabel; var merge = ModifierKeys.HasAnyFlag(Keys.Control, Keys.Shift); - OnChangeFilter?.Invoke( - ModList.FilterToSavedSearch(GUIModFilter.CustomLabel, null, - link.Tag as ModuleLabel), - merge); + LabelClicked?.Invoke(link.Tag as ModuleLabel, merge); } private readonly ToolTip ToolTip = new ToolTip()