public void Destroy() { if (m_dynMenu != null) { m_dynMenu.Clear(); m_dynMenu.MenuClick -= this.OnOpenUrl; m_dynMenu = null; m_tsmiHost.DropDownOpening -= this.OnMenuOpening; m_tsmiHost = null; // After the menu has been destroyed: ReleaseOpenWithList(); // Release icons, ... } }
private void UpdateTagsMenu(DynamicMenu dm, bool bWithSeparator, bool bPrefixTag, TagsMenuMode tmm) { if(dm == null) { Debug.Assert(false); return; } dm.Clear(); if(bWithSeparator) dm.AddSeparator(); string strNoTags = "(" + KPRes.TagsNotFound + ")"; PwDatabase pd = m_docMgr.ActiveDatabase; if(!pd.IsOpen || (tmm == TagsMenuMode.EnsurePopupOnly)) { ToolStripMenuItem tsmi = dm.AddItem(strNoTags, null, string.Empty); tsmi.Enabled = false; return; } bool bReqEntrySel = ((tmm == TagsMenuMode.Add) || (tmm == TagsMenuMode.Remove)); IDictionary<string, uint> dAllTags = pd.RootGroup.BuildEntryTagsDict(true); PwGroup pgSel = GetSelectedEntriesAsGroup(); uint uSelCount = pgSel.Entries.UCount; bool bForceDisabled = (bReqEntrySel && (uSelCount == 0)); Dictionary<string, bool> dEnabledTags = null; if((tmm == TagsMenuMode.Add) && (uSelCount > 0)) { dEnabledTags = new Dictionary<string, bool>(StrUtil.CaseIgnoreComparer); List<string> lIntersect = pgSel.Entries.GetAt(0).Tags; for(uint u = 1; u < uSelCount; ++u) lIntersect = new List<string>(MemUtil.Intersect(lIntersect, pgSel.Entries.GetAt(u).Tags, StrUtil.CaseIgnoreComparer)); foreach(string strTag in MemUtil.Except(dAllTags.Keys, lIntersect, StrUtil.CaseIgnoreComparer)) dEnabledTags[strTag] = true; } else if(tmm == TagsMenuMode.Remove) { dEnabledTags = new Dictionary<string, bool>(StrUtil.CaseIgnoreComparer); List<string> lSelectedTags = pgSel.BuildEntryTagsList(false); foreach(string strTag in lSelectedTags) dEnabledTags[strTag] = true; } string strPrefix = StrUtil.EncodeMenuText(KPRes.Tag + ": "); Image imgIcon = Properties.Resources.B16x16_KNotes; List<char> lAvailKeys = new List<char>(PwCharSet.MenuAccels); foreach(KeyValuePair<string, uint> kvp in dAllTags) { string strTag = kvp.Key; string strText = StrUtil.EncodeMenuText(strTag); strText = StrUtil.AddAccelerator(strText, lAvailKeys); if(bPrefixTag) strText = strPrefix + strText; ToolStripMenuItem tsmi = dm.AddItem(strText, imgIcon, strTag); if(tmm == TagsMenuMode.All) tsmi.ShortcutKeyDisplayString = "(" + kvp.Value.ToString() + ")"; if(bForceDisabled) tsmi.Enabled = false; else if(dEnabledTags != null) { if(!dEnabledTags.ContainsKey(strTag)) tsmi.Enabled = false; } } if(dAllTags.Count == 0) { ToolStripMenuItem tsmi = dm.AddItem(strNoTags, null, string.Empty); tsmi.Enabled = false; } }
private void UpdateTagsMenu(DynamicMenu dm, bool bWithSeparator, bool bPrefixTag, bool bRequireEntrySelected, bool bEnableOnlySelected) { if(dm == null) { Debug.Assert(false); return; } dm.Clear(); if(bWithSeparator) dm.AddSeparator(); string strNoTags = "(" + KPRes.TagsNotFound + ")"; PwDatabase pd = m_docMgr.ActiveDatabase; if(!pd.IsOpen) { ToolStripMenuItem tsmi = dm.AddItem(strNoTags, null, string.Empty); tsmi.Enabled = false; return; } List<string> vTags = pd.RootGroup.BuildEntryTagsList(true); string strPrefix = KPRes.Tag + ": "; Image imgIcon = Properties.Resources.B16x16_KNotes; bool bEnable = (m_lvEntries.SelectedIndices.Count > 0); List<string> vEnabledTags = null; if(bEnableOnlySelected) { PwGroup pgSel = GetSelectedEntriesAsGroup(); vEnabledTags = pgSel.BuildEntryTagsList(true); } for(int i = 0; i < vTags.Count; ++i) { string strTag = vTags[i]; ToolStripMenuItem tsmi = dm.AddItem(bPrefixTag ? (strPrefix + strTag) : strTag, imgIcon, strTag); if(bRequireEntrySelected && !bEnable) tsmi.Enabled = false; else if(vEnabledTags != null) { if(vEnabledTags.IndexOf(strTag) < 0) tsmi.Enabled = false; } } if(vTags.Count == 0) { ToolStripMenuItem tsmi = dm.AddItem(strNoTags, null, string.Empty); tsmi.Enabled = false; } }