100 lines
3.7 KiB
Python
100 lines
3.7 KiB
Python
# noinspection PyPackageRequirements
|
|
import wx
|
|
|
|
from .helpers import AutoListCtrl
|
|
_t = wx.GetTranslation
|
|
|
|
class ItemProperties(wx.Panel):
|
|
def __init__(self, parent, stuff, item, context=None):
|
|
wx.Panel.__init__(self, parent)
|
|
mainSizer = wx.BoxSizer(wx.VERTICAL)
|
|
|
|
self.paramList = AutoListCtrl(self, wx.ID_ANY,
|
|
style=wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.LC_VRULES | wx.NO_BORDER)
|
|
mainSizer.Add(self.paramList, 1, wx.ALL | wx.EXPAND, 0)
|
|
self.SetSizer(mainSizer)
|
|
|
|
self.toggleView = 1
|
|
self.stuff = stuff
|
|
self.item = item
|
|
self.attrInfo = {}
|
|
self.attrValues = {}
|
|
self._fetchValues()
|
|
|
|
self.m_staticline = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL)
|
|
mainSizer.Add(self.m_staticline, 0, wx.EXPAND)
|
|
bSizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
|
|
self.totalAttrsLabel = wx.StaticText(self, wx.ID_ANY, " ", wx.DefaultPosition, wx.DefaultSize, 0)
|
|
bSizer.Add(self.totalAttrsLabel, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT)
|
|
|
|
mainSizer.Add(bSizer, 0, wx.ALIGN_RIGHT)
|
|
|
|
self.PopulateList()
|
|
|
|
def _fetchValues(self):
|
|
if self.stuff is None:
|
|
self.attrInfo.clear()
|
|
self.attrValues.clear()
|
|
self.attrInfo.update(self.item.attributes)
|
|
self.attrValues.update(self.item.attributes)
|
|
elif self.stuff.item == self.item:
|
|
self.attrInfo.clear()
|
|
self.attrValues.clear()
|
|
self.attrInfo.update(self.stuff.item.attributes)
|
|
self.attrValues.update(self.stuff.itemModifiedAttributes)
|
|
elif self.stuff.charge == self.item:
|
|
self.attrInfo.clear()
|
|
self.attrValues.clear()
|
|
self.attrInfo.update(self.stuff.charge.attributes)
|
|
self.attrValues.update(self.stuff.chargeModifiedAttributes)
|
|
# When item for stats window no longer exists, don't change anything
|
|
else:
|
|
return
|
|
|
|
def PopulateList(self):
|
|
self.paramList.InsertColumn(0, _t("Attribute"))
|
|
self.paramList.InsertColumn(1, _t("Current Value"))
|
|
self.paramList.SetColumnWidth(0, 110)
|
|
self.paramList.SetColumnWidth(1, 1500)
|
|
self.paramList.setResizeColumn(0)
|
|
|
|
if self.stuff:
|
|
names = dir(self.stuff)
|
|
else:
|
|
names = dir(self.item)
|
|
|
|
names = [a for a in names if not (a.startswith('__') and a.endswith('__'))]
|
|
|
|
idNameMap = {}
|
|
idCount = 0
|
|
for name in names:
|
|
try:
|
|
if self.stuff:
|
|
attrName = name.title()
|
|
value = getattr(self.stuff, name)
|
|
else:
|
|
attrName = name.title()
|
|
value = getattr(self.item, name)
|
|
|
|
index = self.paramList.InsertItem(self.paramList.GetItemCount(), attrName)
|
|
# index = self.paramList.InsertImageStringItem(sys.maxint, attrName)
|
|
idNameMap[idCount] = attrName
|
|
self.paramList.SetItemData(index, idCount)
|
|
idCount += 1
|
|
|
|
valueUnit = str(value)
|
|
|
|
self.paramList.SetItem(index, 1, valueUnit)
|
|
except (KeyboardInterrupt, SystemExit):
|
|
raise
|
|
except:
|
|
# TODO: Add logging to this.
|
|
# We couldn't get a property for some reason. Skip it for now.
|
|
continue
|
|
|
|
self.paramList.SortItems(lambda id1, id2: (idNameMap[id1] > idNameMap[id2]) - (idNameMap[id1] < idNameMap[id2]))
|
|
self.paramList.RefreshRows()
|
|
self.totalAttrsLabel.SetLabel(_t("%d attribute.", "%d attributes.", idCount) % idCount)
|
|
self.Layout()
|