private void AddAceColumnTh(AceColumn c) { string strLvgName = KPRes.StandardFields; if(c.Type == AceColumnType.CustomString) strLvgName = KPRes.CustomFields; else if(c.Type == AceColumnType.PluginExt) strLvgName = KPRes.PluginProvided; else if((int)c.Type > (int)AceColumnType.PluginExt) strLvgName = KPRes.More; ListViewGroup lvgContainer = null; foreach(ListViewGroup lvg in m_lvColumns.Groups) { if(lvg.Header == strLvgName) { lvgContainer = lvg; break; } } if(lvgContainer == null) { lvgContainer = new ListViewGroup(strLvgName); m_lvColumns.Groups.Add(lvgContainer); } ListViewItem lvi = new ListViewItem(c.GetDisplayName()); lvi.Tag = c; lvi.SubItems.Add(c.HideWithAsterisks ? KPRes.Yes : KPRes.No); if(c.Type == AceColumnType.Password) lvi.SubItems.Add(KPRes.KeyboardKeyCtrl + "+H"); else if(c.Type == AceColumnType.UserName) lvi.SubItems.Add(KPRes.KeyboardKeyCtrl + "+J"); else lvi.SubItems.Add(string.Empty); bool bChecked = false; List<AceColumn> lCur = Program.Config.MainWindow.EntryListColumns; foreach(AceColumn cCur in lCur) { if(cCur.Type != c.Type) continue; if((c.Type != AceColumnType.CustomString) && (c.Type != AceColumnType.PluginExt)) { bChecked = true; break; } else if((c.Type == AceColumnType.CustomString) && (cCur.CustomName == c.CustomName)) { bChecked = true; break; } else if((c.Type == AceColumnType.PluginExt) && (cCur.CustomName == c.CustomName)) { bChecked = true; break; } } lvi.Checked = bChecked; lvi.Group = lvgContainer; m_lvColumns.Items.Add(lvi); }
private void AddAceColumn(List<AceColumn> lContainer, AceColumn c) { m_lvColumns.Invoke(new AceColumnDelegate(AddAceColumnTh), c); lContainer.Add(c); }
private void FillColumnsList(object state) { List<AceColumn> l = new List<AceColumn>(); AddStdAceColumn(l, AceColumnType.Title); AddStdAceColumn(l, AceColumnType.UserName); AddStdAceColumn(l, AceColumnType.Password); AddStdAceColumn(l, AceColumnType.Url); AddStdAceColumn(l, AceColumnType.Notes); AddStdAceColumn(l, AceColumnType.CreationTime); if((Program.Config.UI.UIFlags & (ulong)AceUIFlags.ShowLastAccessTime) != 0) AddStdAceColumn(l, AceColumnType.LastAccessTime); AddStdAceColumn(l, AceColumnType.LastModificationTime); AddStdAceColumn(l, AceColumnType.ExpiryTime); AddStdAceColumn(l, AceColumnType.Uuid); AddStdAceColumn(l, AceColumnType.Attachment); SortedDictionary<string, AceColumn> d = new SortedDictionary<string, AceColumn>(StrUtil.CaseIgnoreComparer); List<AceColumn> lCur = Program.Config.MainWindow.EntryListColumns; foreach(AceColumn cCur in lCur) { if((cCur.Type == AceColumnType.CustomString) && !d.ContainsKey(cCur.CustomName)) { d[cCur.CustomName] = new AceColumn(AceColumnType.CustomString, cCur.CustomName, cCur.HideWithAsterisks, cCur.Width); } } foreach(PwDocument pwDoc in Program.MainForm.DocumentManager.Documents) { if(string.IsNullOrEmpty(pwDoc.LockedIoc.Path) && pwDoc.Database.IsOpen) { EntryHandler eh = delegate(PwEntry pe) { foreach(KeyValuePair<string, ProtectedString> kvp in pe.Strings) { if(PwDefs.IsStandardField(kvp.Key)) continue; if(d.ContainsKey(kvp.Key)) continue; d[kvp.Key] = new AceColumn(AceColumnType.CustomString, kvp.Key, kvp.Value.IsProtected, -1); } return true; }; pwDoc.Database.RootGroup.TraverseTree(TraversalMethod.PreOrder, null, eh); } } foreach(KeyValuePair<string, AceColumn> kvpCustom in d) { AddAceColumn(l, kvpCustom.Value); } AddStdAceColumn(l, AceColumnType.Size); AddStdAceColumn(l, AceColumnType.AttachmentCount); AddStdAceColumn(l, AceColumnType.HistoryCount); AddStdAceColumn(l, AceColumnType.OverrideUrl); AddStdAceColumn(l, AceColumnType.Tags); AddStdAceColumn(l, AceColumnType.ExpiryTimeDateOnly); d.Clear(); // Add active plugin columns (including those of uninstalled plugins) foreach(AceColumn cCur in lCur) { if(cCur.Type != AceColumnType.PluginExt) continue; if(d.ContainsKey(cCur.CustomName)) { Debug.Assert(false); continue; } d[cCur.CustomName] = new AceColumn(AceColumnType.PluginExt, cCur.CustomName, cCur.HideWithAsterisks, cCur.Width); } // Add unused plugin columns string[] vPlgExtNames = Program.ColumnProviderPool.GetColumnNames(); foreach(string strPlgName in vPlgExtNames) { if(d.ContainsKey(strPlgName)) continue; // Do not overwrite d[strPlgName] = new AceColumn(AceColumnType.PluginExt, strPlgName, false, -1); } foreach(KeyValuePair<string, AceColumn> kvpExt in d) { AddAceColumn(l, kvpExt.Value); } // m_lvColumns.Invoke(new UpdateUIDelegate(UpdateListEx), false); }
private static void EntryListAddColumn(AceColumnType t, int nWidth, bool bHide) { AceColumn c = new AceColumn(t, string.Empty, bHide, nWidth); Program.Config.MainWindow.EntryListColumns.Add(c); }