@@ -40,6 +40,9 @@ def __init__(self, graphFrame, parent):
40
40
super ().__init__ (parent )
41
41
self .graphFrame = graphFrame
42
42
43
+ self .Bind (wx .EVT_CHAR_HOOK , self .kbEvent )
44
+ self .Bind (wx .EVT_LEFT_DCLICK , self .OnLeftDClick )
45
+
43
46
def refreshExtraColumns (self , extraColSpecs ):
44
47
baseColNames = set ()
45
48
for baseColName in self .DEFAULT_COLS :
@@ -56,19 +59,38 @@ def refreshExtraColumns(self, extraColSpecs):
56
59
self .appendColumnBySpec (colSpec )
57
60
self .refreshView ()
58
61
62
+ def kbEvent (self , event ):
63
+ keycode = event .GetKeyCode ()
64
+ mstate = wx .GetMouseState ()
65
+ if keycode == 65 and mstate .GetModifiers () == wx .MOD_CONTROL :
66
+ self .selectAll ()
67
+ elif keycode in (wx .WXK_DELETE , wx .WXK_NUMPAD_DELETE ) and mstate .GetModifiers () == wx .MOD_NONE :
68
+ self .removeListItems (self .getSelectedListItems ())
69
+ event .Skip ()
70
+
71
+ def OnLeftDClick (self , event ):
72
+ row , _ = self .HitTest (event .Position )
73
+ item = self .getListItem (row )
74
+ if item is None :
75
+ return
76
+ self .removeListItems ([item ])
77
+
59
78
def refreshView (self ):
60
79
raise NotImplementedError
61
80
62
81
def updateView (self ):
63
82
raise NotImplementedError
64
83
65
- def getItem (self , row ):
84
+ def getListItem (self , row ):
66
85
raise NotImplementedError
67
86
68
- def getSelectedItems (self ):
87
+ def removeListItems (self , items ):
88
+ raise NotImplementedError
89
+
90
+ def getSelectedListItems (self ):
69
91
items = []
70
92
for row in self .getSelectedRows ():
71
- item = self .getItem (row )
93
+ item = self .getListItem (row )
72
94
if item is None :
73
95
continue
74
96
items .append (item )
@@ -87,8 +109,6 @@ def __init__(self, graphFrame, parent):
87
109
self .graphFrame .mainFrame .Bind (EVT_FIT_RENAMED , self .OnFitRenamed )
88
110
self .graphFrame .mainFrame .Bind (GE .FIT_REMOVED , self .OnFitRemoved )
89
111
90
- self .Bind (wx .EVT_CHAR_HOOK , self .kbEvent )
91
- self .Bind (wx .EVT_LEFT_DCLICK , self .OnLeftDClick )
92
112
self .Bind (wx .EVT_CONTEXT_MENU , self .spawnMenu )
93
113
self .Bind (wx .EVT_MOTION , self .OnMouseMove )
94
114
self .Bind (wx .EVT_LEAVE_WINDOW , self .OnLeaveWindow )
@@ -110,35 +130,16 @@ def updateView(self):
110
130
self .update (self .fits )
111
131
112
132
def spawnMenu (self , event ):
113
- selection = self .getSelectedItems ()
133
+ selection = self .getSelectedListItems ()
114
134
clickedPos = self .getRowByAbs (event .Position )
115
- mainItem = self .getItem (clickedPos )
135
+ mainItem = self .getListItem (clickedPos )
116
136
117
137
sourceContext = 'graphFitList'
118
138
itemContext = None if mainItem is None else 'Fit'
119
139
menu = ContextMenu .getMenu (self , mainItem , selection , (sourceContext , itemContext ))
120
140
if menu :
121
141
self .PopupMenu (menu )
122
142
123
- def kbEvent (self , event ):
124
- keycode = event .GetKeyCode ()
125
- mstate = wx .GetMouseState ()
126
- if keycode == 65 and mstate .GetModifiers () == wx .MOD_CONTROL :
127
- self .selectAll ()
128
- elif keycode in (wx .WXK_DELETE , wx .WXK_NUMPAD_DELETE ) and mstate .GetModifiers () == wx .MOD_NONE :
129
- self .removeFits (self .getSelectedItems ())
130
- event .Skip ()
131
-
132
- def OnLeftDClick (self , event ):
133
- row , _ = self .HitTest (event .Position )
134
- if row != - 1 :
135
- try :
136
- fit = self .fits [row ]
137
- except IndexError :
138
- pass
139
- else :
140
- self .removeFits ([fit ])
141
-
142
143
def OnFitRenamed (self , event ):
143
144
event .Skip ()
144
145
self .updateView ()
@@ -152,24 +153,24 @@ def OnFitRemoved(self, event):
152
153
event .Skip ()
153
154
fit = next ((f for f in self .fits if f .ID == event .fitID ), None )
154
155
if fit is not None :
155
- self .removeFits ([fit ])
156
+ self .removeListItems ([fit ])
156
157
157
- def getItem (self , row ):
158
+ def getListItem (self , row ):
158
159
if row == - 1 :
159
160
return None
160
161
try :
161
162
return self .fits [row ]
162
163
except IndexError :
163
164
return None
164
165
165
- def removeFits (self , fits ):
166
- toRemove = [f for f in fits if f in self .fits ]
166
+ def removeListItems (self , items ):
167
+ toRemove = [i for i in items if i in self .fits ]
167
168
if not toRemove :
168
169
return
169
170
for fit in toRemove :
170
171
self .fits .remove (fit )
171
172
self .updateView ()
172
- for fit in fits :
173
+ for fit in toRemove :
173
174
self .graphFrame .clearCache (reason = GraphCacheCleanupReason .fitRemoved , extraData = fit .ID )
174
175
self .graphFrame .draw ()
175
176
@@ -231,7 +232,7 @@ def refreshView(self):
231
232
def updateView (self ):
232
233
self .update (self .targets )
233
234
234
- def getItem (self , row ):
235
+ def getListItem (self , row ):
235
236
if row == - 1 :
236
237
return None
237
238
@@ -246,6 +247,22 @@ def getItem(self, row):
246
247
else :
247
248
return self .profiles [row - numFits ]
248
249
250
+ def removeListItems (self , items ):
251
+ fitsToRemove = [i for i in items if i in self .fits ]
252
+ profilesToRemove = [i for i in items if i in self .profiles ]
253
+ if not fitsToRemove and not profilesToRemove :
254
+ return
255
+ for fit in fitsToRemove :
256
+ self .fits .remove (fit )
257
+ for profile in profilesToRemove :
258
+ self .profiles .remove (profile )
259
+ self .updateView ()
260
+ for fit in fitsToRemove :
261
+ self .graphFrame .clearCache (reason = GraphCacheCleanupReason .fitRemoved , extraData = fit .ID )
262
+ for profile in profilesToRemove :
263
+ self .graphFrame .clearCache (reason = GraphCacheCleanupReason .profileRemoved , extraData = profile .ID )
264
+ self .graphFrame .draw ()
265
+
249
266
@property
250
267
def targets (self ):
251
268
return self .fits + self .profiles
0 commit comments