Ensure right-clicked item is selected on Mac in Display list panels

This commit is contained in:
DarkPhoenix
2019-08-22 08:47:45 +03:00
parent 668a947543
commit 6fceda5f27
12 changed files with 52 additions and 17 deletions

View File

@@ -296,8 +296,10 @@ class SourceWrapperList(BaseWrapperList):
self._wrappers.append(SourceWrapper(item=item, colorID=colorID))
def spawnMenu(self, event):
selection = self.getSelectedWrappers()
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
selection = self.getSelectedWrappers()
mainItem = self.getWrapper(clickedPos)
itemContext = None if mainItem is None else 'Fit'
@@ -347,8 +349,10 @@ class TargetWrapperList(BaseWrapperList):
self._wrappers.append(TargetWrapper(item=item, lightnessID=lightnessID, lineStyleID=lineStyleID))
def spawnMenu(self, event):
selection = self.getSelectedWrappers()
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
selection = self.getSelectedWrappers()
mainItem = self.getWrapper(clickedPos)
itemContext = None if mainItem is None else 'Target'

View File

@@ -199,8 +199,10 @@ class BoosterView(d.Display):
event.Skip()
def spawnMenu(self, event):
selection = self.getSelectedBoosters()
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
selection = self.getSelectedBoosters()
mainBooster = None
if clickedPos != -1:
try:

View File

@@ -187,8 +187,10 @@ class CargoView(d.Display):
self.mainFrame.command.Submit(cmd.GuiRemoveCargosCommand(fitID=fitID, itemIDs=itemIDs))
def spawnMenu(self, event):
selection = self.getSelectedCargos()
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
selection = self.getSelectedCargos()
mainCargo = None
if clickedPos != -1:
try:

View File

@@ -185,8 +185,10 @@ class CommandView(d.Display):
event.Skip()
def spawnMenu(self, event):
selection = self.getSelectedCommandFits()
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
selection = self.getSelectedCommandFits()
mainCommandFit = None
if clickedPos != -1:
try:

View File

@@ -311,6 +311,8 @@ class DroneView(Display):
def spawnMenu(self, event):
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
mainDrone = None
if clickedPos != -1:
try:

View File

@@ -348,8 +348,10 @@ class FighterDisplay(d.Display):
event.Skip()
def spawnMenu(self, event):
selection = self.getSelectedFighters()
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
selection = self.getSelectedFighters()
mainFighter = None
if clickedPos != -1:
try:

View File

@@ -262,8 +262,10 @@ class ImplantDisplay(d.Display):
event.Skip()
def spawnMenu(self, event):
selection = self.getSelectedImplants()
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
selection = self.getSelectedImplants()
mainImplant = None
if clickedPos != -1:
try:

View File

@@ -283,6 +283,9 @@ class ProjectedView(d.Display):
event.Skip()
def spawnMenu(self, event):
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
fitID = self.mainFrame.getActiveFit()
if fitID is None:
return
@@ -290,7 +293,6 @@ class ProjectedView(d.Display):
if self.getColumn(self.screenToClientFixed(event.Position)) == self.getColIndex(State):
return
clickedPos = self.getRowByAbs(event.Position)
mainItem = self.get(clickedPos)
contexts = []

View File

@@ -15,6 +15,7 @@ pyfalog = Logger(__name__)
class ItemView(Display):
DEFAULT_COLS = ["Base Icon",
"Base Name",
"attr:power,,,True",
@@ -219,13 +220,14 @@ class ItemView(Display):
return catname, mktgrpid, parentname, metatab, metalvl, item.name
def contextMenu(self, event):
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
# Check if something is selected, if so, spawn the menu for it
sel = self.GetFirstSelected()
if sel == -1:
if clickedPos == -1:
return
item = self.active[sel]
item = self.active[clickedPos]
sMkt = self.sMkt
sourceContext = "marketItemMisc" if self.marketBrowser.mode in ("search", "recent") else "marketItemGroup"
itemContext = sMkt.getCategoryByItem(item).name

View File

@@ -18,6 +18,7 @@ pyfalog = Logger(__name__)
class ShipItem(SFItem.SFBrowserItem):
def __init__(self, parent, shipID=None, shipFittingInfo=("Test", "TestTrait", 2), itemData=None, graphicID=None,
id=wx.ID_ANY, pos=wx.DefaultPosition,
size=(0, 40), style=0):

View File

@@ -624,6 +624,9 @@ class FittingView(d.Display):
pyfalog.error("Caught dead object")
def spawnMenu(self, event):
clickedPos = self.getRowByAbs(event.Position)
self.ensureSelection(clickedPos)
if self.activeFitID is None or self.getColumn(self.screenToClientFixed(event.Position)) == self.getColIndex(State):
return
@@ -636,7 +639,6 @@ class FittingView(d.Display):
selection.append(mod)
fit = Fit.getInstance().getFit(self.activeFitID)
clickedPos = self.getRowByAbs(event.Position)
mainMod = None
if clickedPos != -1:
try:
@@ -647,10 +649,6 @@ class FittingView(d.Display):
if mod is not None and (mod in fit.modules or mod is fit.mode):
mainMod = mod
if mainMod is not None and mainMod not in selection:
self.unselectAll()
self.Select(clickedPos)
sMkt = Market.getInstance()
contexts = []
if isinstance(mainMod, Module) and not mainMod.isEmpty:

View File

@@ -298,3 +298,19 @@ class Display(wx.ListCtrl):
def getWidthProportion(self):
propWidth = sum(c.proportionWidth for c in self.activeColumns)
return propWidth
def ensureSelection(self, clickedPos):
"""
On mac, when right-click on any item happens, it doesn't get selected.
This method ensures that selection actually happens.
"""
if 'wxMac' in wx.PlatformInfo:
if clickedPos != -1:
selectedPoss = self.getSelectedRows()
if clickedPos not in selectedPoss:
self.unselectAll()
self.Select(clickedPos)
# Change focus only when we manipulate selection
focusedPos = self.GetFocusedItem()
if clickedPos != focusedPos:
self.Focus(clickedPos)