Ensure right-clicked item is selected on Mac in Display list panels
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user