137 lines
4.5 KiB
Python
137 lines
4.5 KiB
Python
import wx
|
|
import wx.propgrid as wxpg
|
|
import eos.db
|
|
|
|
import gui.PFSearchBox as SBox
|
|
from gui.marketBrowser import SearchBox
|
|
import gui.display as d
|
|
import service
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class AttributeEditor( wx.Frame ):
|
|
|
|
def __init__( self, parent ):
|
|
wx.Frame.__init__(self, parent, wx.ID_ANY, title="Attribute Editor", size=wx.Size(700,500))
|
|
|
|
self.panel = panel = wx.Panel(self, wx.ID_ANY)
|
|
topsizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
leftsizer = wx.BoxSizer(wx.VERTICAL)
|
|
|
|
self.searchBox = SearchBox(panel, style=wx.DOUBLE_BORDER if 'wxMSW' in wx.PlatformInfo else wx.SIMPLE_BORDER)
|
|
self.itemView = ItemView(panel)
|
|
self.pg = AttributeGrid(panel)
|
|
|
|
topsizer.Add(leftsizer, 1, wx.ALL|wx.EXPAND, 5)
|
|
topsizer.Add(self.pg, 1, wx.ALL|wx.EXPAND, 5)
|
|
|
|
leftsizer.Add(self.searchBox, 0, wx.EXPAND)
|
|
leftsizer.Add(self.itemView, 1, wx.EXPAND)
|
|
|
|
panel.SetSizer(topsizer)
|
|
topsizer.SetSizeHints(panel)
|
|
|
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
|
sizer.Add(panel, 1, wx.EXPAND)
|
|
self.SetSizer(sizer)
|
|
self.SetAutoLayout(True)
|
|
|
|
|
|
# This is literally a stripped down version of the market.
|
|
class ItemView(d.Display):
|
|
DEFAULT_COLS = ["Base Icon",
|
|
"Base Name",
|
|
"attr:power,,,True",
|
|
"attr:cpu,,,True"]
|
|
|
|
def __init__(self, parent):
|
|
d.Display.__init__(self, parent)
|
|
self.parent = parent
|
|
sMkt = service.Market.getInstance()
|
|
self.things = sMkt.getItemsWithOverrides()
|
|
self.items = self.things
|
|
|
|
# Bind search actions
|
|
parent.Parent.searchBox.Bind(SBox.EVT_TEXT_ENTER, self.scheduleSearch)
|
|
parent.Parent.searchBox.Bind(SBox.EVT_SEARCH_BTN, self.scheduleSearch)
|
|
parent.Parent.searchBox.Bind(SBox.EVT_CANCEL_BTN, self.clearSearch)
|
|
parent.Parent.searchBox.Bind(SBox.EVT_TEXT, self.scheduleSearch)
|
|
|
|
self.update(self.items)
|
|
|
|
def clearSearch(self, event=None):
|
|
if event:
|
|
self.parent.Parent.searchBox.Clear()
|
|
self.items = self.things
|
|
self.update(self.items)
|
|
|
|
def scheduleSearch(self, event=None):
|
|
sMkt = service.Market.getInstance()
|
|
|
|
search = self.parent.Parent.searchBox.GetLineText(0)
|
|
# Make sure we do not count wildcard as search symbol
|
|
realsearch = search.replace("*", "")
|
|
# Show nothing if query is too short
|
|
if len(realsearch) < 3:
|
|
self.clearSearch()
|
|
return
|
|
|
|
self.parent.searchMode = True
|
|
sMkt.searchItems(search, self.populateSearch, False)
|
|
|
|
def populateSearch(self, items):
|
|
self.items = list(items)
|
|
self.update(items)
|
|
|
|
|
|
class AttributeGrid(wxpg.PropertyGrid):
|
|
|
|
def __init__(self, parent):
|
|
wxpg.PropertyGrid.__init__(self, parent, style=wxpg.PG_HIDE_MARGIN|wxpg.PG_HIDE_CATEGORIES|wxpg.PG_BOLD_MODIFIED|wxpg.PG_TOOLTIPS)
|
|
self.parent = parent
|
|
|
|
self.Bind( wxpg.EVT_PG_CHANGED, self.OnPropGridChange )
|
|
self.Bind( wxpg.EVT_PG_SELECTED, self.OnPropGridSelect )
|
|
self.Bind( wxpg.EVT_PG_RIGHT_CLICK, self.OnPropGridRightClick )
|
|
|
|
parent.Parent.itemView.Bind(wx.EVT_LIST_ITEM_SELECTED, self.itemActivated)
|
|
parent.Parent.itemView.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.itemActivated)
|
|
|
|
def itemActivated(self, event):
|
|
self.Clear()
|
|
sel = event.EventObject.GetFirstSelected()
|
|
item = self.parent.Parent.itemView.items[sel]
|
|
|
|
for key in sorted(item.attributes.keys()):
|
|
override = item.overrides.get(key, None)
|
|
default = item.attributes[key].value
|
|
if override and override != item.attributes[key].value:
|
|
prop = wxpg.FloatProperty(key, value=override)
|
|
prop.defaultValue = default
|
|
prop.SetModifiedStatus(True)
|
|
else:
|
|
prop = wxpg.FloatProperty(key, value=default)
|
|
|
|
self.Append(prop)
|
|
|
|
def OnPropGridChange(self, event):
|
|
p = event.GetProperty()
|
|
if p:
|
|
logger.debug('%s changed to "%s"' % (p.GetName(), p.GetValueAsString()))
|
|
|
|
def OnPropGridSelect(self, event):
|
|
p = event.GetProperty()
|
|
if p:
|
|
logger.debug('%s selected' % (event.GetProperty().GetName()))
|
|
else:
|
|
logger.debug('Nothing selected')
|
|
|
|
def OnPropGridRightClick(self, event):
|
|
p = event.GetProperty()
|
|
if p:
|
|
logger.debug('%s right clicked' % (event.GetProperty().GetName()))
|
|
else:
|
|
logger.debug('Nothing right clicked')
|