-
Notifications
You must be signed in to change notification settings - Fork 0
/
StatusToolbar.cs
219 lines (177 loc) · 7.88 KB
/
StatusToolbar.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
using System;
using System.Collections.Generic;
using System.Text;
using KeePass.UI;
using KeePassLib;
using KeePassLib.Security;
using System.Windows.Forms;
using System.Diagnostics;
namespace KeeNotesPlugin
{
partial class KeeNotesPluginExt
{
class StatusToolbar
{
public const string KNAddNew = "KNAddNew";
public const string KNToDo = "KNToDo";
public const string KNUrgent = "KNUrgent";
public const string KNInProgress = "KNInProgress";
public const string KNDone = "KNDone";
public const string KNUp = "KNUP";
public const string KNDOWN = "KNDown";
public const string KNToDoStr = "To Do";
List<System.Windows.Forms.ToolStripItem> toolbarItems;
public StatusToolbar()
{
toolbarItems = new List<System.Windows.Forms.ToolStripItem>()
{
new System.Windows.Forms.ToolStripSeparator(),
addItem(KNAddNew, "Add new note", "B16x16_KOrganizer", PwIcon.Apple),
new System.Windows.Forms.ToolStripSeparator(),
addItem(KNToDo, KNToDoStr, "B16x16_KNotes", PwIcon.Note),
addItem(KNUrgent, "Urgent", "B16x16_WinFavs", PwIcon.Star),
addItem(KNInProgress, "In progress", "B16x16_Package_Development", PwIcon.Tool),
addItem(KNDone, "Done", "B16x16_Apply", PwIcon.Checked),
};
m_toolMain.Items.AddRange(toolbarItems.ToArray());
}
public void Show()
{
foreach (var item in toolbarItems)
{
item.Visible = true;
}
}
public void Hide()
{
foreach (var item in toolbarItems)
{
item.Visible = false;
}
}
private void StatusButtonHandler(object sender, EventArgs e)
{
System.Windows.Forms.ToolStripItem item = (System.Windows.Forms.ToolStripItem)sender;
switch (item.Name)
{
case KNAddNew:
AddNewNote();
break;
case KNUp:
case KNDOWN:
//moveItems(item.Name == KNUp ? -1 : 1);
break;
case KNDone:
case KNInProgress:
case KNToDo:
case KNUrgent:
bool changed = false;
foreach (ListViewItem listitem in m_lvEntries.SelectedItems)
{
changed = changed || SaveEntryStatus(listitem, (PwIcon)item.Tag, item.ToolTipText);
}
if (changed)
{
Util.UpdateSaveState();
m_host.MainWindow.Refresh();
}
break;
}
}
private bool SaveEntryStatus(ListViewItem Item, PwIcon icon, string text)
{
PwListItem pli = (((ListViewItem)Item).Tag as PwListItem);
if (pli == null) { Debug.Assert(false); return false; }
PwEntry pe = pli.Entry;
pe = m_host.Database.RootGroup.FindEntry(pe.Uuid, true);
var protString = pe.Strings.Get(PwDefs.PasswordField);
if (protString != null && !protString.IsEmpty) {
return false;
}
PwEntry peInit = pe.CloneDeep();
pe.CreateBackup(null);
pe.Touch(true, false); // Touch *after* backup
pe.IconId = icon;
Item.ImageIndex = (int)icon;
pe.Strings.Set(PwDefs.UserNameField, new ProtectedString(false, text));
Item.SubItems[getSubitemOfField(KeePass.App.Configuration.AceColumnType.UserName)].Text = text;
PwCompareOptions cmpOpt = (PwCompareOptions.IgnoreLastMod | PwCompareOptions.IgnoreLastAccess | PwCompareOptions.IgnoreLastBackup);
if (pe.EqualsEntry(peInit, cmpOpt, MemProtCmpMode.None))
{
pe.LastModificationTime = peInit.LastModificationTime;
pe.History.Remove(pe.History.GetAt(pe.History.UCount - 1)); // Undo backup
return false;
}
else
{
return true;
}
}
private int getSubitemOfField(KeePass.App.Configuration.AceColumnType field)
{
for (int i=0;i< KeePass.Program.Config.MainWindow.EntryListColumns.Count;i++)
{
if (KeePass.Program.Config.MainWindow.EntryListColumns[i].Type == KeePass.App.Configuration.AceColumnType.UserName)
{
return i;
}
}
Debug.Assert(false);
return -1;
}
private System.Windows.Forms.ToolStripItem addItem(string name, string command, string imageName, KeePassLib.PwIcon icon)
{
System.Windows.Forms.ToolStripButton item = new System.Windows.Forms.ToolStripButton();
item.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
item.Image = (System.Drawing.Image)m_host.Resources.GetObject(imageName);
item.ImageTransparentColor = System.Drawing.Color.Magenta;
item.Name = name;
item.Tag = icon;
item.Size = new System.Drawing.Size(23, 22);
item.ToolTipText = command;
item.Click += new System.EventHandler(this.StatusButtonHandler);
return item;
}
private void AddNewNote()
{
PwGroup pg = KeePass.Program.MainForm.GetSelectedGroup();
// Create new entry which belongs to given group
PwEntry pwe = Util.CreateEntry(pg);
if (pwe == null) { return; }
// Insort is only working in not sorted and not grouped listviews
//ListViewItem lviFocus = Util.InsertListEntry(pwe, iIndex);
pwe.IconId = PwIcon.Note;
pwe.Strings.Set(PwDefs.UserNameField, new ProtectedString(false, KNToDoStr));
ListViewItem lviFocus = Util.AddEntryToList(pwe);
lviFocus = Util.GuiFindEntry(pwe.Uuid);
if (lviFocus != null) m_lvEntries.FocusedItem = lviFocus;
m_host.MainWindow.EnsureVisibleEntry(pwe.Uuid);
m_host.MainWindow.RefreshEntriesList();
Util.UpdateSaveState();
//PwObjectList<PwEntry> vSelect = new PwObjectList<PwEntry>();
//vSelect.Add(pwe);
//Util.SelectEntries(vSelect, true, true);
m_lvEntries.Select();
m_lvEntries.HideSelection = false;
m_lvEntries.Focus();
//MAYBE problem: ListView row is only focused but not highlighted (selected?)
// Start inline editing with new item
if (lviFocus != null)
{
inlineEditing.StartEditing(lviFocus);
}
//IDEA: On esc press remove item, undo database changes and update save icon
}
private void moveItems()
{
}
public void Close()
{
foreach (var item in toolbarItems)
{
m_toolMain.Items.Remove(item);
}
}
}
}
}