From 253d3107a04798b364f1a59b6b032f4ec37f73c1 Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Sun, 24 Mar 2019 18:55:25 -0400 Subject: [PATCH 1/7] First pass at cleaning up context menu events (#1895) --- gui/builtinAdditionPanes/boosterView.py | 12 ++---------- gui/builtinAdditionPanes/cargoView.py | 12 ++---------- gui/builtinAdditionPanes/commandView.py | 13 ++----------- gui/builtinAdditionPanes/droneView.py | 12 ++---------- gui/builtinAdditionPanes/fighterView.py | 12 ++---------- gui/builtinAdditionPanes/implantView.py | 12 ++---------- gui/builtinAdditionPanes/projectedView.py | 13 ++----------- gui/builtinViews/fittingView.py | 13 ++----------- 8 files changed, 16 insertions(+), 83 deletions(-) diff --git a/gui/builtinAdditionPanes/boosterView.py b/gui/builtinAdditionPanes/boosterView.py index e050d853a..da2bf2daa 100644 --- a/gui/builtinAdditionPanes/boosterView.py +++ b/gui/builtinAdditionPanes/boosterView.py @@ -69,10 +69,7 @@ class BoosterView(d.Display): self.SetDropTarget(BoosterViewDrop(self.handleListDrag)) - if "__WXGTK__" in wx.PlatformInfo: - self.Bind(wx.EVT_RIGHT_UP, self.scheduleMenu) - else: - self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu) + self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) def handleListDrag(self, x, y, data): """ @@ -163,12 +160,7 @@ class BoosterView(d.Display): fitID = self.mainFrame.getActiveFit() self.mainFrame.command.Submit(cmd.GuiToggleBoosterCommand(fitID, row)) - def scheduleMenu(self, event): - event.Skip() - if self.getColumn(event.Position) != self.getColIndex(State): - wx.CallAfter(self.spawnMenu) - - def spawnMenu(self): + def spawnMenu(self, event): sel = self.GetFirstSelected() if sel != -1: sFit = Fit.getInstance() diff --git a/gui/builtinAdditionPanes/cargoView.py b/gui/builtinAdditionPanes/cargoView.py index 29721603c..cc6958f5d 100644 --- a/gui/builtinAdditionPanes/cargoView.py +++ b/gui/builtinAdditionPanes/cargoView.py @@ -64,10 +64,7 @@ class CargoView(d.Display): self.SetDropTarget(CargoViewDrop(self.handleListDrag)) self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag) - if "__WXGTK__" in wx.PlatformInfo: - self.Bind(wx.EVT_RIGHT_UP, self.scheduleMenu) - else: - self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu) + self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) def handleListDrag(self, x, y, data): """ @@ -180,12 +177,7 @@ class CargoView(d.Display): sFit.removeCargo(fitID, self.original.index(cargo)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) - def scheduleMenu(self, event): - event.Skip() - if self.getColumn(event.Position) != self.getColIndex(State): - wx.CallAfter(self.spawnMenu) - - def spawnMenu(self): + def spawnMenu(self,event): sel = self.GetFirstSelected() if sel != -1: sFit = Fit.getInstance() diff --git a/gui/builtinAdditionPanes/commandView.py b/gui/builtinAdditionPanes/commandView.py index ce73e06b8..9b1fb1d0c 100644 --- a/gui/builtinAdditionPanes/commandView.py +++ b/gui/builtinAdditionPanes/commandView.py @@ -72,16 +72,12 @@ class CommandView(d.Display): self.mainFrame.Bind(EVT_FIT_REMOVED, CommandFits.populateFits) self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.Bind(wx.EVT_LEFT_DOWN, self.click) - self.Bind(wx.EVT_RIGHT_DOWN, self.click) self.Bind(wx.EVT_LEFT_DCLICK, self.remove) self.Bind(wx.EVT_KEY_UP, self.kbEvent) self.droneView = gui.builtinAdditionPanes.droneView.DroneView - if "__WXGTK__" in wx.PlatformInfo: - self.Bind(wx.EVT_RIGHT_UP, self.scheduleMenu) - else: - self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu) + self.Bind(wx.EVT_RIGHT_UP, self.spawnMenu) self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag) self.SetDropTarget(CommandViewDrop(self.handleListDrag)) @@ -188,12 +184,7 @@ class CommandView(d.Display): fitID = self.mainFrame.getActiveFit() self.mainFrame.command.Submit(cmd.GuiToggleCommandCommand(fitID, item.ID)) - def scheduleMenu(self, event): - event.Skip() - if self.getColumn(event.Position) != self.getColIndex(State): - wx.CallAfter(self.spawnMenu) - - def spawnMenu(self): + def spawnMenu(self, event): fitID = self.mainFrame.getActiveFit() if fitID is None: return diff --git a/gui/builtinAdditionPanes/droneView.py b/gui/builtinAdditionPanes/droneView.py index 9da438953..fe509f0b3 100644 --- a/gui/builtinAdditionPanes/droneView.py +++ b/gui/builtinAdditionPanes/droneView.py @@ -78,10 +78,7 @@ class DroneView(Display): self.Bind(wx.EVT_MOTION, self.OnMouseMove) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow) - if "__WXGTK__" in wx.PlatformInfo: - self.Bind(wx.EVT_RIGHT_UP, self.scheduleMenu) - else: - self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu) + self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag) self.SetDropTarget(DroneViewDrop(self.handleDragDrop)) @@ -242,12 +239,7 @@ class DroneView(Display): drone = self.drones[row] self.mainFrame.command.Submit(cmd.GuiToggleDroneCommand(fitID, self.original.index(drone))) - def scheduleMenu(self, event): - event.Skip() - if self.getColumn(event.Position) != self.getColIndex(State): - wx.CallAfter(self.spawnMenu) - - def spawnMenu(self): + def spawnMenu(self, event): sel = self.GetFirstSelected() if sel != -1: drone = self.drones[sel] diff --git a/gui/builtinAdditionPanes/fighterView.py b/gui/builtinAdditionPanes/fighterView.py index f9025851b..5be649ac9 100644 --- a/gui/builtinAdditionPanes/fighterView.py +++ b/gui/builtinAdditionPanes/fighterView.py @@ -142,10 +142,7 @@ class FighterDisplay(d.Display): self.Bind(wx.EVT_MOTION, self.OnMouseMove) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow) - if "__WXGTK__" in wx.PlatformInfo: - self.Bind(wx.EVT_RIGHT_UP, self.scheduleMenu) - else: - self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu) + self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag) self.SetDropTarget(FighterViewDrop(self.handleDragDrop)) @@ -289,12 +286,7 @@ class FighterDisplay(d.Display): fighter = self.fighters[row] self.mainFrame.command.Submit(cmd.GuiToggleFighterCommand(fitID, self.original.index(fighter))) - def scheduleMenu(self, event): - event.Skip() - if self.getColumn(event.Position) != self.getColIndex(State): - wx.CallAfter(self.spawnMenu) - - def spawnMenu(self): + def spawnMenu(self, event): sel = self.GetFirstSelected() if sel != -1: fighter = self.fighters[sel] diff --git a/gui/builtinAdditionPanes/implantView.py b/gui/builtinAdditionPanes/implantView.py index 84c437ea3..b28a3b6c5 100644 --- a/gui/builtinAdditionPanes/implantView.py +++ b/gui/builtinAdditionPanes/implantView.py @@ -118,11 +118,8 @@ class ImplantDisplay(d.Display): self.Bind(wx.EVT_KEY_UP, self.kbEvent) self.SetDropTarget(ImplantViewDrop(self.handleListDrag)) + self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) - if "__WXGTK__" in wx.PlatformInfo: - self.Bind(wx.EVT_RIGHT_UP, self.scheduleMenu) - else: - self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu) def handleListDrag(self, x, y, data): """ @@ -223,12 +220,7 @@ class ImplantDisplay(d.Display): fitID = self.mainFrame.getActiveFit() self.mainFrame.command.Submit(cmd.GuiToggleImplantCommand(fitID, row)) - def scheduleMenu(self, event): - event.Skip() - if self.getColumn(event.Position) != self.getColIndex(State): - wx.CallAfter(self.spawnMenu) - - def spawnMenu(self): + def spawnMenu(self, event): sel = self.GetFirstSelected() menu = None diff --git a/gui/builtinAdditionPanes/projectedView.py b/gui/builtinAdditionPanes/projectedView.py index 59d046761..1457fcb37 100644 --- a/gui/builtinAdditionPanes/projectedView.py +++ b/gui/builtinAdditionPanes/projectedView.py @@ -78,16 +78,12 @@ class ProjectedView(d.Display): self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.Bind(wx.EVT_LEFT_DOWN, self.click) - self.Bind(wx.EVT_RIGHT_DOWN, self.click) self.Bind(wx.EVT_LEFT_DCLICK, self.remove) self.Bind(wx.EVT_KEY_UP, self.kbEvent) self.droneView = gui.builtinAdditionPanes.droneView.DroneView - if "__WXGTK__" in wx.PlatformInfo: - self.Bind(wx.EVT_RIGHT_UP, self.scheduleMenu) - else: - self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu) + self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag) self.SetDropTarget(ProjectedViewDrop(self.handleListDrag)) @@ -271,12 +267,7 @@ class ProjectedView(d.Display): sFit.toggleProjected(fitID, item, "right" if event.Button == 3 else "left") wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) - def scheduleMenu(self, event): - event.Skip() - if self.getColumn(event.Position) != self.getColIndex(State): - wx.CallAfter(self.spawnMenu) - - def spawnMenu(self): + def spawnMenu(self, event): fitID = self.mainFrame.getActiveFit() if fitID is None: return diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index 9801f4af0..f60159daf 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -153,10 +153,7 @@ class FittingView(d.Display): self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag) - if "__WXGTK__" in wx.PlatformInfo: - self.Bind(wx.EVT_RIGHT_UP, self.scheduleMenu) - else: - self.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu) + self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) self.SetDropTarget(FittingViewDrop(self.handleListDrag)) self.activeFitID = None @@ -168,7 +165,6 @@ class FittingView(d.Display): self.Bind(wx.EVT_KEY_UP, self.kbEvent) self.Bind(wx.EVT_LEFT_DOWN, self.click) - self.Bind(wx.EVT_RIGHT_DOWN, self.click) self.Bind(wx.EVT_MIDDLE_DOWN, self.click) self.Bind(wx.EVT_SHOW, self.OnShow) self.Bind(wx.EVT_MOTION, self.OnMouseMove) @@ -535,12 +531,7 @@ class FittingView(d.Display): finally: event.Skip() - def scheduleMenu(self, event): - event.Skip() - if self.getColumn(event.Position) != self.getColIndex(State): - wx.CallAfter(self.spawnMenu) - - def spawnMenu(self): + def spawnMenu(self, event): if self.activeFitID is None: return From a9a9fd1b1a2dd622c9c9997e21ad41f281c221fa Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Sun, 24 Mar 2019 19:08:31 -0400 Subject: [PATCH 2/7] Clean up another context menu --- gui/characterEditor.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/gui/characterEditor.py b/gui/characterEditor.py index 60dbcd3e5..a7a66ca97 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -677,10 +677,7 @@ class ImplantEditorView(BaseImplantEditorView): self.determineEnabled() charEditor.Bind(GE.CHAR_CHANGED, self.contextChanged) - if "__WXGTK__" in wx.PlatformInfo: - self.pluggedImplantsTree.Bind(wx.EVT_RIGHT_UP, self.scheduleMenu) - else: - self.pluggedImplantsTree.Bind(wx.EVT_RIGHT_DOWN, self.scheduleMenu) + self.pluggedImplantsTree.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) def bindContext(self): self.Parent.Parent.entityEditor.Bind(wx.EVT_CHOICE, self.contextChanged) @@ -707,11 +704,7 @@ class ImplantEditorView(BaseImplantEditorView): sChar.removeImplant(char.ID, implant) - def scheduleMenu(self, event): - event.Skip() - wx.CallAfter(self.spawnMenu) - - def spawnMenu(self): + def spawnMenu(self, event): context = (("implantEditor",),) # fuck good coding practices, passing a pointer to the character editor here for [reasons] =D # (see implantSets context class for info) From 9c79fb666b58e937e25f9b75e44a5f4b36c1af64 Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Sun, 24 Mar 2019 19:24:46 -0400 Subject: [PATCH 3/7] Convert context menu spawning of "affected by" listing --- gui/builtinItemStatsViews/itemAffectedBy.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/gui/builtinItemStatsViews/itemAffectedBy.py b/gui/builtinItemStatsViews/itemAffectedBy.py index 94808b734..cd25df1a9 100644 --- a/gui/builtinItemStatsViews/itemAffectedBy.py +++ b/gui/builtinItemStatsViews/itemAffectedBy.py @@ -65,13 +65,10 @@ class ItemAffectedBy(wx.Panel): self.SetSizer(mainSizer) self.PopulateTree() self.Layout() - self.affectedBy.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.scheduleMenu) + self.affectedBy.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu) - def scheduleMenu(self, event): - event.Skip() - wx.CallAfter(self.spawnMenu, event.Item) - - def spawnMenu(self, item): + def spawnMenu(self, event): + item, _ = self.affectedBy.HitTest(self.ScreenToClient(event.Position)) self.affectedBy.SelectItem(item) stuff = self.affectedBy.GetItemData(item) From f95420d7bf48d68b026fbb3a5eda1fd8a0e75aca Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Sun, 24 Mar 2019 20:59:40 -0400 Subject: [PATCH 4/7] Fix character editor context menu on Linux (#1895) --- gui/characterEditor.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/gui/characterEditor.py b/gui/characterEditor.py index a7a66ca97..14934910f 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -373,7 +373,7 @@ class SkillTreeView(wx.Panel): tree.Bind(wx.dataview.EVT_TREELIST_ITEM_ACTIVATED, self.expand) tree.Bind(wx.dataview.EVT_TREELIST_ITEM_EXPANDING, self.expandLookup) - tree.Bind(wx.dataview.EVT_TREELIST_ITEM_CONTEXT_MENU, self.scheduleMenu) + tree.Bind(wx.dataview.EVT_TREELIST_ITEM_CONTEXT_MENU, self.spawnMenu) bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) @@ -590,11 +590,8 @@ class SkillTreeView(wx.Panel): tree.SetItemText(childId, 1, "Level %d" % int(level) if isinstance(level, float) else level) - def scheduleMenu(self, event): - event.Skip() - wx.CallAfter(self.spawnMenu, event.GetItem()) - - def spawnMenu(self, item): + def spawnMenu(self, event): + item = event.GetItem() self.skillTreeListCtrl.Select(item) thing = self.skillTreeListCtrl.GetFirstChild(item).IsOk() if thing: From 26cba1c47ae5c6f9e68929715d011dd41195f836 Mon Sep 17 00:00:00 2001 From: Ryan Holmes Date: Sun, 24 Mar 2019 21:48:05 -0400 Subject: [PATCH 5/7] Fix a long standing bug due to misuse of context menu bindings in stats panels (see #651, and probably others) --- gui/builtinStatsViews/miningyieldViewFull.py | 1 - gui/statsPane.py | 10 +--------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/gui/builtinStatsViews/miningyieldViewFull.py b/gui/builtinStatsViews/miningyieldViewFull.py index 7793a2850..104a9ad2b 100644 --- a/gui/builtinStatsViews/miningyieldViewFull.py +++ b/gui/builtinStatsViews/miningyieldViewFull.py @@ -123,7 +123,6 @@ class MiningYieldViewFull(StatsView): # Get the TogglePanel tp = self.panel.GetParent() # Bind the new panel's children to allow context menu access - self.parent.applyBinding(self.parent, tp.content_panel) tp.SetLabel(view.getHeaderText(fit)) view.refreshPanel(fit) diff --git a/gui/statsPane.py b/gui/statsPane.py index b3984ccfa..ec13c5ff8 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -114,9 +114,7 @@ class StatsPane(wx.Panel): tp.SetLabel(view.getHeaderText(None)) view.refreshPanel(None) - contentPanel.Bind(wx.EVT_RIGHT_DOWN, self.contextHandler(contentPanel)) - for child in contentPanel.GetChildren(): - child.Bind(wx.EVT_RIGHT_DOWN, self.contextHandler(contentPanel)) + contentPanel.Bind(wx.EVT_CONTEXT_MENU, self.contextHandler(contentPanel)) mainSizer.Add(tp, 0, wx.EXPAND | wx.LEFT, 3) if i < maxviews - 1: @@ -143,9 +141,3 @@ class StatsPane(wx.Panel): event.Skip() return handler - - @staticmethod - def applyBinding(self, contentPanel): - pyfalog.debug("Attempt applyBinding to children of {0}", contentPanel.viewName) - for child in contentPanel.GetChildren(): - child.Bind(wx.EVT_RIGHT_DOWN, self.contextHandler(contentPanel)) From 5d012d6959ae8b27f01df65929cb05e1c422aa35 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Tue, 26 Mar 2019 07:57:51 +0300 Subject: [PATCH 6/7] Fix EFS export --- service/port/efs.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/service/port/efs.py b/service/port/efs.py index fc00d5dfb..71ea9660f 100755 --- a/service/port/efs.py +++ b/service/port/efs.py @@ -523,18 +523,18 @@ class EfsPort: tf.mode = fit.mode preTraitMultipliers = getCurrentMultipliers(tf) for effect in fit.ship.item.effects.values(): - if effect._Effect__effectModule is not None: + if effect.isImplemented: effect.handler(tf, tf.ship, []) # Factor in mode effects for T3 Destroyers if fit.mode is not None: for effect in fit.mode.item.effects.values(): - if effect._Effect__effectModule is not None: + if effect.isImplemented: effect.handler(tf, fit.mode, []) if fit.ship.item.groupID == getGroup("Strategic Cruiser").ID: subSystems = list(filter(lambda mod: mod.slot == FittingSlot.SUBSYSTEM and mod.item, fit.modules)) for sub in subSystems: for effect in sub.item.effects.values(): - if effect._Effect__effectModule is not None: + if effect.isImplemented: effect.handler(tf, sub, []) postTraitMultipliers = getCurrentMultipliers(tf) getMaxRatio = lambda dictA, dictB, key: max(map(lambda a, b: b / a, dictA[key], dictB[key])) From 6dd737cdd108843a79f92675583a866530d6195e Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Tue, 26 Mar 2019 07:58:53 +0300 Subject: [PATCH 7/7] Revert "Fix EFS export" This reverts commit 5d012d6959ae8b27f01df65929cb05e1c422aa35. --- service/port/efs.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/service/port/efs.py b/service/port/efs.py index 71ea9660f..fc00d5dfb 100755 --- a/service/port/efs.py +++ b/service/port/efs.py @@ -523,18 +523,18 @@ class EfsPort: tf.mode = fit.mode preTraitMultipliers = getCurrentMultipliers(tf) for effect in fit.ship.item.effects.values(): - if effect.isImplemented: + if effect._Effect__effectModule is not None: effect.handler(tf, tf.ship, []) # Factor in mode effects for T3 Destroyers if fit.mode is not None: for effect in fit.mode.item.effects.values(): - if effect.isImplemented: + if effect._Effect__effectModule is not None: effect.handler(tf, fit.mode, []) if fit.ship.item.groupID == getGroup("Strategic Cruiser").ID: subSystems = list(filter(lambda mod: mod.slot == FittingSlot.SUBSYSTEM and mod.item, fit.modules)) for sub in subSystems: for effect in sub.item.effects.values(): - if effect.isImplemented: + if effect._Effect__effectModule is not None: effect.handler(tf, sub, []) postTraitMultipliers = getCurrentMultipliers(tf) getMaxRatio = lambda dictA, dictB, key: max(map(lambda a, b: b / a, dictA[key], dictB[key]))