Show implant description in tooltip of implant editor
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import re
|
||||
|
||||
# noinspection PyPackageRequirements
|
||||
import wx
|
||||
# noinspection PyPackageRequirements
|
||||
@@ -10,6 +12,12 @@ from gui.marketBrowser import SearchBox
|
||||
from service.market import Market
|
||||
|
||||
|
||||
def stripHtml(text):
|
||||
text = re.sub('<\s*br\s*/?\s*>', '\n', text)
|
||||
text = re.sub('</?[^/]+?(/\s*)?>', '', text)
|
||||
return text
|
||||
|
||||
|
||||
class BaseImplantEditorView(wx.Panel):
|
||||
|
||||
def addMarketViewImage(self, iconFile):
|
||||
@@ -68,8 +76,10 @@ class BaseImplantEditorView(wx.Panel):
|
||||
|
||||
self.SetSizer(pmainSizer)
|
||||
|
||||
# Populate the market tree
|
||||
self.hoveredLeftTreeTypeID = None
|
||||
self.hoveredRightListRow = None
|
||||
|
||||
# Populate the market tree
|
||||
sMkt = Market.getInstance()
|
||||
for mktGrp in sMkt.getImplantTree():
|
||||
iconId = self.addMarketViewImage(sMkt.getIconByMarketGroup(mktGrp))
|
||||
@@ -82,9 +92,13 @@ class BaseImplantEditorView(wx.Panel):
|
||||
# Bind the event to replace dummies by real data
|
||||
self.availableImplantsTree.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup)
|
||||
self.availableImplantsTree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.itemSelected)
|
||||
self.availableImplantsTree.Bind(wx.EVT_MOTION, self.OnLeftTreeMouseMove)
|
||||
self.availableImplantsTree.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeftTreeMouseLeave)
|
||||
|
||||
self.itemView.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.itemSelected)
|
||||
|
||||
self.pluggedImplantsTree.Bind(wx.EVT_MOTION, self.OnRightListMouseMove)
|
||||
|
||||
# Bind add & remove buttons
|
||||
self.btnAdd.Bind(wx.EVT_BUTTON, self.itemSelected)
|
||||
self.btnRemove.Bind(wx.EVT_BUTTON, self.removeItem)
|
||||
@@ -193,6 +207,55 @@ class BaseImplantEditorView(wx.Panel):
|
||||
self.removeImplantFromContext(self.implants[pos])
|
||||
self.update()
|
||||
|
||||
# Due to https://github.com/wxWidgets/Phoenix/issues/1372 we cannot set tooltips on
|
||||
# tree itself; work this around with following two methods, by setting tooltip to
|
||||
# parent window
|
||||
def OnLeftTreeMouseMove(self, event):
|
||||
event.Skip()
|
||||
treeItemId, _ = self.availableImplantsTree.HitTest(event.Position)
|
||||
if not treeItemId:
|
||||
if self.hoveredLeftTreeTypeID is not None:
|
||||
self.hoveredLeftTreeTypeID = None
|
||||
self.SetToolTip(None)
|
||||
return
|
||||
item = self.availableImplantsTree.GetItemData(treeItemId)
|
||||
isImplant = getattr(item, 'isImplant', False)
|
||||
if not isImplant:
|
||||
if self.hoveredLeftTreeTypeID is not None:
|
||||
self.hoveredLeftTreeTypeID = None
|
||||
self.SetToolTip(None)
|
||||
return
|
||||
if self.hoveredLeftTreeTypeID == item.ID:
|
||||
return
|
||||
if self.ToolTip is not None:
|
||||
self.SetToolTip(None)
|
||||
else:
|
||||
self.hoveredLeftTreeTypeID = item.ID
|
||||
toolTip = wx.ToolTip(stripHtml(item.description))
|
||||
toolTip.SetMaxWidth(self.GetSize().Width)
|
||||
self.SetToolTip(toolTip)
|
||||
|
||||
def OnLeftTreeMouseLeave(self, event):
|
||||
event.Skip()
|
||||
self.SetToolTip(None)
|
||||
|
||||
def OnRightListMouseMove(self, event):
|
||||
event.Skip()
|
||||
row, _, col = self.pluggedImplantsTree.HitTestSubItem(event.Position)
|
||||
if row != self.hoveredRightListRow:
|
||||
if self.pluggedImplantsTree.ToolTip is not None:
|
||||
self.pluggedImplantsTree.SetToolTip(None)
|
||||
else:
|
||||
self.hoveredRightListRow = row
|
||||
try:
|
||||
implant = self.implants[row]
|
||||
except IndexError:
|
||||
self.pluggedImplantsTree.SetToolTip(None)
|
||||
else:
|
||||
toolTip = wx.ToolTip(stripHtml(implant.item.description))
|
||||
toolTip.SetMaxWidth(self.pluggedImplantsTree.GetSize().Width)
|
||||
self.pluggedImplantsTree.SetToolTip(toolTip)
|
||||
|
||||
|
||||
class AvailableImplantsView(d.Display):
|
||||
DEFAULT_COLS = ["attr:implantness",
|
||||
@@ -212,6 +275,7 @@ class ItemView(d.Display):
|
||||
self.parent = parent
|
||||
self.searchBox = parent.searchBox
|
||||
|
||||
self.hoveredRow = None
|
||||
self.items = []
|
||||
|
||||
# Bind search actions
|
||||
@@ -220,6 +284,8 @@ class ItemView(d.Display):
|
||||
self.searchBox.Bind(SBox.EVT_CANCEL_BTN, self.clearSearch)
|
||||
self.searchBox.Bind(SBox.EVT_TEXT, self.scheduleSearch)
|
||||
|
||||
self.Bind(wx.EVT_MOTION, self.OnMouseMove)
|
||||
|
||||
def clearSearch(self, event=None):
|
||||
if self.IsShown():
|
||||
self.parent.availableImplantsTree.Show()
|
||||
@@ -255,3 +321,20 @@ class ItemView(d.Display):
|
||||
self.items = sorted(list(items), key=lambda i: i.name)
|
||||
|
||||
self.update(self.items)
|
||||
|
||||
def OnMouseMove(self, event):
|
||||
event.Skip()
|
||||
row, _, col = self.HitTestSubItem(event.Position)
|
||||
if row != self.hoveredRow:
|
||||
if self.ToolTip is not None:
|
||||
self.SetToolTip(None)
|
||||
else:
|
||||
self.hoveredRow = row
|
||||
try:
|
||||
item = self.items[row]
|
||||
except IndexError:
|
||||
self.SetToolTip(None)
|
||||
else:
|
||||
toolTip = wx.ToolTip(stripHtml(item.description))
|
||||
toolTip.SetMaxWidth(self.GetSize().Width)
|
||||
self.SetToolTip(toolTip)
|
||||
|
||||
@@ -155,8 +155,8 @@ class CharacterEditor(AuxiliaryFrame):
|
||||
|
||||
def __init__(self, parent):
|
||||
super().__init__(
|
||||
parent, id=wx.ID_ANY, title="Character Editor", resizeable=True,
|
||||
pos=wx.DefaultPosition, size=wx.Size(640, 600))
|
||||
parent, id=wx.ID_ANY, title="Character Editor", resizeable=True, pos=wx.DefaultPosition,
|
||||
size=wx.Size(950, 650) if "wxGTK" in wx.PlatformInfo else wx.Size(850, 600))
|
||||
|
||||
i = wx.Icon(BitmapLoader.getBitmap("character_small", "gui"))
|
||||
self.SetIcon(i)
|
||||
@@ -209,6 +209,7 @@ class CharacterEditor(AuxiliaryFrame):
|
||||
self.SetSizer(mainSizer)
|
||||
self.Layout()
|
||||
|
||||
self.SetMinSize(self.GetSize())
|
||||
self.Centre(wx.BOTH)
|
||||
|
||||
self.Bind(wx.EVT_CLOSE, self.OnClose)
|
||||
|
||||
Reference in New Issue
Block a user