From 259214e9079da034e62b6463826a26b50c4f8d9d Mon Sep 17 00:00:00 2001 From: Gochim <54093496+Gochim@users.noreply.github.com> Date: Tue, 3 Dec 2019 09:23:54 +0200 Subject: [PATCH 1/8] Issue #2073: Added popup menu item --- gui/builtinAdditionPanes/implantView.py | 7 ++- gui/builtinContextMenus/__init__.py | 1 + gui/builtinContextMenus/implantSetAdd.py | 8 ++-- gui/builtinContextMenus/implantSetLoad.py | 52 +++++++++++++++++++++++ 4 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 gui/builtinContextMenus/implantSetLoad.py diff --git a/gui/builtinAdditionPanes/implantView.py b/gui/builtinAdditionPanes/implantView.py index e608e6ec1..425658dd9 100644 --- a/gui/builtinAdditionPanes/implantView.py +++ b/gui/builtinAdditionPanes/implantView.py @@ -298,8 +298,13 @@ class ImplantDisplay(d.Display): fit = Fit.getInstance().getFit(fitID) sourceContext1 = "implantItem" if fit.implantSource == ImplantLocation.FIT else "implantItemChar" sourceContext2 = "implantItemMisc" if fit.implantSource == ImplantLocation.FIT else "implantItemMiscChar" + sourceContext3 = "implantSetAdd" itemContext = None if mainImplant is None else Market.getInstance().getCategoryByItem(mainImplant.item).name - menu = ContextMenu.getMenu(self, mainImplant, selection, (sourceContext1, itemContext), (sourceContext2, itemContext)) + menu = ContextMenu.getMenu(self, mainImplant, selection, + (sourceContext1, itemContext), + (sourceContext2, itemContext), + (sourceContext3, itemContext) + ) if menu: self.PopupMenu(menu) diff --git a/gui/builtinContextMenus/__init__.py b/gui/builtinContextMenus/__init__.py index 0750f7075..a2a76b048 100644 --- a/gui/builtinContextMenus/__init__.py +++ b/gui/builtinContextMenus/__init__.py @@ -36,6 +36,7 @@ from gui.builtinContextMenus import cargoAdd from gui.builtinContextMenus import cargoAddAmmo from gui.builtinContextMenus import itemProject from gui.builtinContextMenus import ammoToDmgPattern +from gui.builtinContextMenus import implantSetLoad from gui.builtinContextMenus import implantSetAdd # Price from gui.builtinContextMenus import priceOptions diff --git a/gui/builtinContextMenus/implantSetAdd.py b/gui/builtinContextMenus/implantSetAdd.py index cc418b8ad..2e46c0d05 100644 --- a/gui/builtinContextMenus/implantSetAdd.py +++ b/gui/builtinContextMenus/implantSetAdd.py @@ -5,7 +5,7 @@ from gui.contextMenu import ContextMenuUnconditional from service.implantSet import ImplantSets as s_ImplantSets -class AddImplantSet(ContextMenuUnconditional): +class ImplantSetAdd(ContextMenuUnconditional): def display(self, callingWindow, srcContext): @@ -14,10 +14,10 @@ class AddImplantSet(ContextMenuUnconditional): if len(implantSets) == 0: return False - return srcContext in ("implantItemMisc", "implantEditor") + return srcContext in ("implantSetAdd", "implantEditor") def getText(self, callingWindow, itmContext): - return "Add Implant Set" + return "Add As New Implant Set" def getSubMenu(self, callingWindow, context, rootMenu, i, pitem): m = wx.Menu() @@ -49,4 +49,4 @@ class AddImplantSet(ContextMenuUnconditional): self.callingWindow.addImplantSet(impSet) -AddImplantSet.register() +ImplantSetAdd.register() diff --git a/gui/builtinContextMenus/implantSetLoad.py b/gui/builtinContextMenus/implantSetLoad.py new file mode 100644 index 000000000..6bb030826 --- /dev/null +++ b/gui/builtinContextMenus/implantSetLoad.py @@ -0,0 +1,52 @@ +# noinspection PyPackageRequirements +import wx + +from gui.contextMenu import ContextMenuUnconditional +from service.implantSet import ImplantSets as s_ImplantSets + + +class ImplantSetLoad(ContextMenuUnconditional): + + def display(self, callingWindow, srcContext): + + sIS = s_ImplantSets.getInstance() + implantSets = sIS.getImplantSetList() + + if len(implantSets) == 0: + return False + return srcContext in ("implantItemMisc", "implantEditor") + + def getText(self, callingWindow, itmContext): + return "Load Implant Set" + + def getSubMenu(self, callingWindow, context, rootMenu, i, pitem): + m = wx.Menu() + bindmenu = rootMenu if "wxMSW" in wx.PlatformInfo else m + + sIS = s_ImplantSets.getInstance() + implantSets = sIS.getImplantSetList() + + self.context = context + self.callingWindow = callingWindow + + self.idmap = {} + + for set in sorted(implantSets, key=lambda i: i.name): + id = ContextMenuUnconditional.nextID() + mitem = wx.MenuItem(rootMenu, id, set.name) + bindmenu.Bind(wx.EVT_MENU, self.handleSelection, mitem) + self.idmap[id] = set + m.Append(mitem) + + return m + + def handleSelection(self, event): + impSet = self.idmap.get(event.Id, None) + if impSet is None: + event.Skip() + return + + self.callingWindow.addImplantSet(impSet) + + +ImplantSetLoad.register() From f55ab00bf5e29166c442ef7d0c233bc5fab5f1fd Mon Sep 17 00:00:00 2001 From: Gochim Date: Tue, 10 Dec 2019 08:18:01 +0200 Subject: [PATCH 2/8] Fixed error message text in EntityEditor --- gui/setEditor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/setEditor.py b/gui/setEditor.py index 578cf18fd..55c87f315 100644 --- a/gui/setEditor.py +++ b/gui/setEditor.py @@ -47,7 +47,7 @@ class ImplantTextValidor(BaseValidator): if len(text) == 0: raise ValueError("You must supply a name for the Implant Set!") elif text in [x.name for x in entityEditor.choices]: - raise ValueError("Imlplant Set name already in use, please choose another.") + raise ValueError("Implant Set name already in use, please choose another.") return True except ValueError as e: From d92e11893a17082acd755685eeb05bbd94e4b946 Mon Sep 17 00:00:00 2001 From: Gochim Date: Tue, 10 Dec 2019 08:50:21 +0200 Subject: [PATCH 3/8] Issue #2073: Added mechanism to pass implant list to implant set manager --- gui/builtinContextMenus/implantSetAdd.py | 29 +++-------------------- gui/builtinContextMenus/implantSetLoad.py | 1 + gui/mainFrame.py | 4 ++-- gui/setEditor.py | 7 ++++-- 4 files changed, 11 insertions(+), 30 deletions(-) diff --git a/gui/builtinContextMenus/implantSetAdd.py b/gui/builtinContextMenus/implantSetAdd.py index 2e46c0d05..8ca6c1c9a 100644 --- a/gui/builtinContextMenus/implantSetAdd.py +++ b/gui/builtinContextMenus/implantSetAdd.py @@ -14,39 +14,16 @@ class ImplantSetAdd(ContextMenuUnconditional): if len(implantSets) == 0: return False + return srcContext in ("implantSetAdd", "implantEditor") def getText(self, callingWindow, itmContext): return "Add As New Implant Set" - def getSubMenu(self, callingWindow, context, rootMenu, i, pitem): - m = wx.Menu() - bindmenu = rootMenu if "wxMSW" in wx.PlatformInfo else m - + def activate(self, callingWindow, fullContext, i): sIS = s_ImplantSets.getInstance() implantSets = sIS.getImplantSetList() - - self.context = context - self.callingWindow = callingWindow - - self.idmap = {} - - for set in sorted(implantSets, key=lambda i: i.name): - id = ContextMenuUnconditional.nextID() - mitem = wx.MenuItem(rootMenu, id, set.name) - bindmenu.Bind(wx.EVT_MENU, self.handleSelection, mitem) - self.idmap[id] = set - m.Append(mitem) - - return m - - def handleSelection(self, event): - impSet = self.idmap.get(event.Id, None) - if impSet is None: - event.Skip() - return - - self.callingWindow.addImplantSet(impSet) + callingWindow.mainFrame.OnShowImplantSetEditor(None, implantSets) ImplantSetAdd.register() diff --git a/gui/builtinContextMenus/implantSetLoad.py b/gui/builtinContextMenus/implantSetLoad.py index 6bb030826..e37f7f342 100644 --- a/gui/builtinContextMenus/implantSetLoad.py +++ b/gui/builtinContextMenus/implantSetLoad.py @@ -14,6 +14,7 @@ class ImplantSetLoad(ContextMenuUnconditional): if len(implantSets) == 0: return False + return srcContext in ("implantItemMisc", "implantEditor") def getText(self, callingWindow, itmContext): diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 05744a504..a7bb17183 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -442,8 +442,8 @@ class MainFrame(wx.Frame): def OnShowDamagePatternEditor(self, event): DmgPatternEditor.openOne(parent=self) - def OnShowImplantSetEditor(self, event): - ImplantSetEditor.openOne(parent=self) + def OnShowImplantSetEditor(self, event, dataToAdd=None): + ImplantSetEditor.openOne(parent=self, dataToAdd=dataToAdd) def OnShowExportDialog(self, event): """ Export active fit """ diff --git a/gui/setEditor.py b/gui/setEditor.py index 55c87f315..edbdf32da 100644 --- a/gui/setEditor.py +++ b/gui/setEditor.py @@ -117,7 +117,7 @@ class ImplantSetEditorView(BaseImplantEditorView): class ImplantSetEditor(AuxiliaryFrame): - def __init__(self, parent): + def __init__(self, parent, dataToAdd=None): super().__init__( parent, id=wx.ID_ANY, title="Implant Set Editor", resizeable=True, size=wx.Size(950, 500) if "wxGTK" in wx.PlatformInfo else wx.Size(850, 420)) @@ -166,7 +166,10 @@ class ImplantSetEditor(AuxiliaryFrame): self.SetSizer(mainSizer) self.Layout() - if not self.entityEditor.checkEntitiesExist(): + if dataToAdd: + # add elements passed from outside + pass + elif not self.entityEditor.checkEntitiesExist(): self.Close() return From 9c7fa37a7219f465d3e5bb824c2b1b1bddbc228e Mon Sep 17 00:00:00 2001 From: Gochim <54093496+Gochim@users.noreply.github.com> Date: Tue, 10 Dec 2019 18:14:13 +0200 Subject: [PATCH 4/8] Issue #2073: Added functionality to add all implants in fit implant tab to implant set list --- gui/builtinContextMenus/implantSetAdd.py | 16 ++++++---------- gui/builtinViews/entityEditor.py | 17 ++++++++++++----- gui/setEditor.py | 12 ++++++++++-- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/gui/builtinContextMenus/implantSetAdd.py b/gui/builtinContextMenus/implantSetAdd.py index 8ca6c1c9a..e3d6987c6 100644 --- a/gui/builtinContextMenus/implantSetAdd.py +++ b/gui/builtinContextMenus/implantSetAdd.py @@ -1,18 +1,15 @@ -# noinspection PyPackageRequirements -import wx - from gui.contextMenu import ContextMenuUnconditional -from service.implantSet import ImplantSets as s_ImplantSets class ImplantSetAdd(ContextMenuUnconditional): def display(self, callingWindow, srcContext): - sIS = s_ImplantSets.getInstance() - implantSets = sIS.getImplantSetList() + if not hasattr(callingWindow, 'implants'): + return False - if len(implantSets) == 0: + implantList = callingWindow.implants + if not implantList or len(implantList) == 0: return False return srcContext in ("implantSetAdd", "implantEditor") @@ -21,9 +18,8 @@ class ImplantSetAdd(ContextMenuUnconditional): return "Add As New Implant Set" def activate(self, callingWindow, fullContext, i): - sIS = s_ImplantSets.getInstance() - implantSets = sIS.getImplantSetList() - callingWindow.mainFrame.OnShowImplantSetEditor(None, implantSets) + implantList = callingWindow.implants + callingWindow.mainFrame.OnShowImplantSetEditor(None, implantList) ImplantSetAdd.register() diff --git a/gui/builtinViews/entityEditor.py b/gui/builtinViews/entityEditor.py index e6224156e..b0bd0d0d8 100644 --- a/gui/builtinViews/entityEditor.py +++ b/gui/builtinViews/entityEditor.py @@ -178,10 +178,17 @@ class EntityEditor(wx.Panel): return True def checkEntitiesExist(self): - if len(self.choices) == 0: - self.Parent.Hide() - if self.OnNew(None) is False: - return False - self.Parent.Show() + if len(self.choices) > 0: + return True + else: + return self.enterNewEntity() + + def enterNewEntity(self): + self.Parent.Hide() + if self.OnNew(None) is False: + return False + self.Parent.Show() return True + + diff --git a/gui/setEditor.py b/gui/setEditor.py index edbdf32da..0d55bd74a 100644 --- a/gui/setEditor.py +++ b/gui/setEditor.py @@ -84,6 +84,14 @@ class ImplantSetEntityEditor(EntityEditor): sIS = ImplantSets.getInstance() sIS.deleteSet(entity) + def addExternalDataToSet(self, dataToAdd): + """ Add new set and fill it with data from the current fit """ + if self.enterNewEntity(): + sIS = ImplantSets.getInstance() + set_ = self.Parent.entityEditor.getActiveEntity() + for item in dataToAdd: + sIS.addImplant(set_.ID, item.item.ID) + class ImplantSetEditorView(BaseImplantEditorView): @@ -167,8 +175,8 @@ class ImplantSetEditor(AuxiliaryFrame): self.Layout() if dataToAdd: - # add elements passed from outside - pass + # add an implant set using data passed from outside + self.entityEditor.addExternalDataToSet(dataToAdd) elif not self.entityEditor.checkEntitiesExist(): self.Close() return From 90813536341064f9ee410acfc85ebb3887453c4c Mon Sep 17 00:00:00 2001 From: Gochim Date: Wed, 11 Dec 2019 07:51:31 +0200 Subject: [PATCH 5/8] Issue #2073: Final tweaks on implementation --- gui/builtinAdditionPanes/implantView.py | 4 +--- gui/builtinContextMenus/implantSetAdd.py | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/gui/builtinAdditionPanes/implantView.py b/gui/builtinAdditionPanes/implantView.py index 425658dd9..30768247a 100644 --- a/gui/builtinAdditionPanes/implantView.py +++ b/gui/builtinAdditionPanes/implantView.py @@ -298,12 +298,10 @@ class ImplantDisplay(d.Display): fit = Fit.getInstance().getFit(fitID) sourceContext1 = "implantItem" if fit.implantSource == ImplantLocation.FIT else "implantItemChar" sourceContext2 = "implantItemMisc" if fit.implantSource == ImplantLocation.FIT else "implantItemMiscChar" - sourceContext3 = "implantSetAdd" itemContext = None if mainImplant is None else Market.getInstance().getCategoryByItem(mainImplant.item).name menu = ContextMenu.getMenu(self, mainImplant, selection, (sourceContext1, itemContext), - (sourceContext2, itemContext), - (sourceContext3, itemContext) + (sourceContext2, itemContext) ) if menu: self.PopupMenu(menu) diff --git a/gui/builtinContextMenus/implantSetAdd.py b/gui/builtinContextMenus/implantSetAdd.py index e3d6987c6..1515d74cc 100644 --- a/gui/builtinContextMenus/implantSetAdd.py +++ b/gui/builtinContextMenus/implantSetAdd.py @@ -12,7 +12,7 @@ class ImplantSetAdd(ContextMenuUnconditional): if not implantList or len(implantList) == 0: return False - return srcContext in ("implantSetAdd", "implantEditor") + return srcContext in ("implantItemMisc", "implantItemMiscChar", "implantEditor") def getText(self, callingWindow, itmContext): return "Add As New Implant Set" From acd774abe57977d3ed9915547d7f45ca0033ef12 Mon Sep 17 00:00:00 2001 From: Gochim Date: Thu, 12 Dec 2019 14:02:31 +0200 Subject: [PATCH 6/8] Issue #2073: Fixed Codacy warning --- gui/builtinContextMenus/implantSetAdd.py | 2 +- gui/builtinContextMenus/implantSetLoad.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gui/builtinContextMenus/implantSetAdd.py b/gui/builtinContextMenus/implantSetAdd.py index 1515d74cc..07f396c35 100644 --- a/gui/builtinContextMenus/implantSetAdd.py +++ b/gui/builtinContextMenus/implantSetAdd.py @@ -14,7 +14,7 @@ class ImplantSetAdd(ContextMenuUnconditional): return srcContext in ("implantItemMisc", "implantItemMiscChar", "implantEditor") - def getText(self, callingWindow, itmContext): + def getText(self, callingWindow, context): return "Add As New Implant Set" def activate(self, callingWindow, fullContext, i): diff --git a/gui/builtinContextMenus/implantSetLoad.py b/gui/builtinContextMenus/implantSetLoad.py index e37f7f342..407040f0d 100644 --- a/gui/builtinContextMenus/implantSetLoad.py +++ b/gui/builtinContextMenus/implantSetLoad.py @@ -17,7 +17,7 @@ class ImplantSetLoad(ContextMenuUnconditional): return srcContext in ("implantItemMisc", "implantEditor") - def getText(self, callingWindow, itmContext): + def getText(self, callingWindow, context): return "Load Implant Set" def getSubMenu(self, callingWindow, context, rootMenu, i, pitem): From af4277fc7eac36ce3320d3f225395a9df4bcf956 Mon Sep 17 00:00:00 2001 From: Gochim Date: Thu, 12 Dec 2019 17:57:03 +0200 Subject: [PATCH 7/8] Issue #2073: Fixed name of a popup menu item for implant tab --- gui/builtinContextMenus/implantSetLoad.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinContextMenus/implantSetLoad.py b/gui/builtinContextMenus/implantSetLoad.py index 407040f0d..b991d8054 100644 --- a/gui/builtinContextMenus/implantSetLoad.py +++ b/gui/builtinContextMenus/implantSetLoad.py @@ -18,7 +18,7 @@ class ImplantSetLoad(ContextMenuUnconditional): return srcContext in ("implantItemMisc", "implantEditor") def getText(self, callingWindow, context): - return "Load Implant Set" + return "Apply Implant Set" def getSubMenu(self, callingWindow, context, rootMenu, i, pitem): m = wx.Menu() From b6edf0e03464b7278a35288a8315dfcde52dd3b9 Mon Sep 17 00:00:00 2001 From: Gochim Date: Thu, 12 Dec 2019 18:03:45 +0200 Subject: [PATCH 8/8] Issue #2073: Fixed a stuck in character editor --- gui/builtinContextMenus/implantSetAdd.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinContextMenus/implantSetAdd.py b/gui/builtinContextMenus/implantSetAdd.py index 07f396c35..30829025e 100644 --- a/gui/builtinContextMenus/implantSetAdd.py +++ b/gui/builtinContextMenus/implantSetAdd.py @@ -12,7 +12,7 @@ class ImplantSetAdd(ContextMenuUnconditional): if not implantList or len(implantList) == 0: return False - return srcContext in ("implantItemMisc", "implantItemMiscChar", "implantEditor") + return srcContext in ("implantItemMisc", "implantItemMiscChar") def getText(self, callingWindow, context): return "Add As New Implant Set"