From c68451228a3c76e0862b1848dc0c334964eda623 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Wed, 31 Jul 2019 00:04:54 +0300 Subject: [PATCH] Move more logic to base class --- _development/helpers_fits.py | 2 +- eos/saveddata/targetProfile.py | 1 + gui/builtinContextMenus/itemRemove.py | 2 +- gui/graphFrame/lists.py | 81 ++++++++++++++++----------- service/const.py | 2 + 5 files changed, 54 insertions(+), 34 deletions(-) diff --git a/_development/helpers_fits.py b/_development/helpers_fits.py index 347b0622b..b5dd280fe 100644 --- a/_development/helpers_fits.py +++ b/_development/helpers_fits.py @@ -62,4 +62,4 @@ def HeronFit(DB, Gamedata, Saveddata): for _ in range(4): fit.modules.append(mod) - return fit \ No newline at end of file + return fit diff --git a/eos/saveddata/targetProfile.py b/eos/saveddata/targetProfile.py index 8b9e6a4f7..857600eba 100644 --- a/eos/saveddata/targetProfile.py +++ b/eos/saveddata/targetProfile.py @@ -58,6 +58,7 @@ class TargetProfile: signatureRadius=None, radius=0) cls._idealTarget.name = 'Ideal Target' + cls._idealTarget.ID = -1 return cls._idealTarget @property diff --git a/gui/builtinContextMenus/itemRemove.py b/gui/builtinContextMenus/itemRemove.py index b83d91353..4ab629557 100644 --- a/gui/builtinContextMenus/itemRemove.py +++ b/gui/builtinContextMenus/itemRemove.py @@ -159,7 +159,7 @@ class RemoveItem(ContextMenuCombined): fitID=fitID, commandFitIDs=commandFitIDs)) def __handleGraphFit(self, callingWindow, mainItem, selection): - callingWindow.removeFits(selection) + callingWindow.removeListItems(selection) RemoveItem.register() diff --git a/gui/graphFrame/lists.py b/gui/graphFrame/lists.py index 4a9831f26..1397cfe93 100644 --- a/gui/graphFrame/lists.py +++ b/gui/graphFrame/lists.py @@ -40,6 +40,9 @@ class BaseList(gui.display.Display): super().__init__(parent) self.graphFrame = graphFrame + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) + self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick) + def refreshExtraColumns(self, extraColSpecs): baseColNames = set() for baseColName in self.DEFAULT_COLS: @@ -56,19 +59,38 @@ class BaseList(gui.display.Display): self.appendColumnBySpec(colSpec) self.refreshView() + def kbEvent(self, event): + keycode = event.GetKeyCode() + mstate = wx.GetMouseState() + if keycode == 65 and mstate.GetModifiers() == wx.MOD_CONTROL: + self.selectAll() + elif keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE) and mstate.GetModifiers() == wx.MOD_NONE: + self.removeListItems(self.getSelectedListItems()) + event.Skip() + + def OnLeftDClick(self, event): + row, _ = self.HitTest(event.Position) + item = self.getListItem(row) + if item is None: + return + self.removeListItems([item]) + def refreshView(self): raise NotImplementedError def updateView(self): raise NotImplementedError - def getItem(self, row): + def getListItem(self, row): raise NotImplementedError - def getSelectedItems(self): + def removeListItems(self, items): + raise NotImplementedError + + def getSelectedListItems(self): items = [] for row in self.getSelectedRows(): - item = self.getItem(row) + item = self.getListItem(row) if item is None: continue items.append(item) @@ -87,8 +109,6 @@ class FitList(BaseList): self.graphFrame.mainFrame.Bind(EVT_FIT_RENAMED, self.OnFitRenamed) self.graphFrame.mainFrame.Bind(GE.FIT_REMOVED, self.OnFitRemoved) - self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) - self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick) self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) self.Bind(wx.EVT_MOTION, self.OnMouseMove) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow) @@ -110,9 +130,9 @@ class FitList(BaseList): self.update(self.fits) def spawnMenu(self, event): - selection = self.getSelectedItems() + selection = self.getSelectedListItems() clickedPos = self.getRowByAbs(event.Position) - mainItem = self.getItem(clickedPos) + mainItem = self.getListItem(clickedPos) sourceContext = 'graphFitList' itemContext = None if mainItem is None else 'Fit' @@ -120,25 +140,6 @@ class FitList(BaseList): if menu: self.PopupMenu(menu) - def kbEvent(self, event): - keycode = event.GetKeyCode() - mstate = wx.GetMouseState() - if keycode == 65 and mstate.GetModifiers() == wx.MOD_CONTROL: - self.selectAll() - elif keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE) and mstate.GetModifiers() == wx.MOD_NONE: - self.removeFits(self.getSelectedItems()) - event.Skip() - - def OnLeftDClick(self, event): - row, _ = self.HitTest(event.Position) - if row != -1: - try: - fit = self.fits[row] - except IndexError: - pass - else: - self.removeFits([fit]) - def OnFitRenamed(self, event): event.Skip() self.updateView() @@ -152,9 +153,9 @@ class FitList(BaseList): event.Skip() fit = next((f for f in self.fits if f.ID == event.fitID), None) if fit is not None: - self.removeFits([fit]) + self.removeListItems([fit]) - def getItem(self, row): + def getListItem(self, row): if row == -1: return None try: @@ -162,14 +163,14 @@ class FitList(BaseList): except IndexError: return None - def removeFits(self, fits): - toRemove = [f for f in fits if f in self.fits] + def removeListItems(self, items): + toRemove = [i for i in items if i in self.fits] if not toRemove: return for fit in toRemove: self.fits.remove(fit) self.updateView() - for fit in fits: + for fit in toRemove: self.graphFrame.clearCache(reason=GraphCacheCleanupReason.fitRemoved, extraData=fit.ID) self.graphFrame.draw() @@ -231,7 +232,7 @@ class TargetList(BaseList): def updateView(self): self.update(self.targets) - def getItem(self, row): + def getListItem(self, row): if row == -1: return None @@ -246,6 +247,22 @@ class TargetList(BaseList): else: return self.profiles[row - numFits] + def removeListItems(self, items): + fitsToRemove = [i for i in items if i in self.fits] + profilesToRemove = [i for i in items if i in self.profiles] + if not fitsToRemove and not profilesToRemove: + return + for fit in fitsToRemove: + self.fits.remove(fit) + for profile in profilesToRemove: + self.profiles.remove(profile) + self.updateView() + for fit in fitsToRemove: + self.graphFrame.clearCache(reason=GraphCacheCleanupReason.fitRemoved, extraData=fit.ID) + for profile in profilesToRemove: + self.graphFrame.clearCache(reason=GraphCacheCleanupReason.profileRemoved, extraData=profile.ID) + self.graphFrame.draw() + @property def targets(self): return self.fits + self.profiles diff --git a/service/const.py b/service/const.py index 2d8ec4ab7..06f64bc80 100644 --- a/service/const.py +++ b/service/const.py @@ -123,6 +123,8 @@ class GraphDpsDroneMode(IntEnum): class GraphCacheCleanupReason(IntEnum): fitChanged = auto() fitRemoved = auto() + profileChanged = auto() + profileRemoved = auto() graphSwitched = auto() inputChanged = auto() optionChanged = auto()