[a37b2b]: plugins / filehistory.py Maximize Restore History

Download this file

filehistory.py    97 lines (77 with data), 2.7 kB

 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
'''
This software is licensed under the GPL (GNU General Public License) version 2
as it appears here: http://www.gnu.org/copyleft/gpl.html
It is also included with this archive as `gpl.txt <gpl.txt>`_.
'''
import wx
root = None
class FileHistory(wx.Menu):
def __init__(self, parent, name='', remove=0, callback=None, seq=[], maxlen=0, delmsg=('', '')):
self.delmsg = delmsg
if name:
wx.Menu.__init__(self, name)
else:
wx.Menu.__init__(self)
self.remove = remove
if not callback:
self.callback = []
else:
self.callback = callback
self.maxlen = maxlen
self.parent = parent
for i in seq:
if maxlen > 0 and len(self) >= maxlen:
break
iid = wx.NewId()
self.Append(iid, i)
wx.EVT_MENU(self.parent, iid, self.OnClicked)
self.last = None
def __len__(self):
return self.GetMenuItemCount()
def __iter__(self):
for i in xrange(len(self)):
yield self.FindItemByPosition(i)
def GetLabels(self):
return [i.GetLabel() for i in self]
def ResetMenu(self):
l = list(iter(self))
l.reverse()
for i in l:
self.Delete(i.GetId())
def ItemRemove(self, name):
for item in self:
if item.GetLabel() == name:
if name == self.last:
self.last = None
#ask user whether they really want to remove the pathmark
self.Delete(item.GetId())
return
def ItemAdd(self, name):
self.last = name
for item in self:
if item.GetLabel() == name:
ll = self.Remove(item.GetId())
self.PrependItem(ll)
return
if self.maxlen > 0 and len(self) >= self.maxlen:
lst = list(iter(self))
while lst and len(lst) >= self.maxlen:
it = lst.pop()
iid = it.GetId()
self.Delete(it)
else:
iid = wx.NewId()
wx.EVT_MENU(self.parent, iid, self.OnClicked)
self.Prepend(iid, name)
def OnClicked(self, evt):
eid = evt.GetId()
label = self.GetLabel(eid)
if label:
if self.remove:
if root.dialog(self.delmsg[0]%label, self.delmsg[1], wx.OK|wx.CANCEL)&1 != 0:
return
self.ItemRemove(label)
else:
self.ItemAdd(label)
for i in self.callback:
i(label)