From c90dab16ba187c52ac82fad4cbd7a4e54e15d1a8 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Thu, 28 Oct 2010 16:16:59 +0200 Subject: [PATCH 1/4] Implement "Set as damage pattern" for ammo --- gui/builtinContextMenus/__init__.py | 3 ++- gui/builtinContextMenus/damagePattern.py | 1 - gui/marketBrowser.py | 2 +- service/fit.py | 19 +++++++++++++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/gui/builtinContextMenus/__init__.py b/gui/builtinContextMenus/__init__.py index 30df7603b..f1396d4cd 100644 --- a/gui/builtinContextMenus/__init__.py +++ b/gui/builtinContextMenus/__init__.py @@ -1 +1,2 @@ -__all__ = ["moduleAmmoPicker", "itemStats", "damagePattern", "marketJump", "droneSplit"] +__all__ = ["moduleAmmoPicker", "itemStats", "damagePattern", "marketJump", "droneSplit", + "ammoPattern"] diff --git a/gui/builtinContextMenus/damagePattern.py b/gui/builtinContextMenus/damagePattern.py index 2d5742f27..5eb144757 100644 --- a/gui/builtinContextMenus/damagePattern.py +++ b/gui/builtinContextMenus/damagePattern.py @@ -9,7 +9,6 @@ class DamagePattern(ContextMenu): def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance() - def display(self, context, selection): return context in ("resistancesViewFull",) and self.mainFrame.getActiveFit() is not None diff --git a/gui/marketBrowser.py b/gui/marketBrowser.py index 543bd5104..5a3eba276 100644 --- a/gui/marketBrowser.py +++ b/gui/marketBrowser.py @@ -311,7 +311,7 @@ class ItemView(d.Display): if sel == -1: return - menu = ContextMenu.getMenu(self.active[sel], "item" if self.searching is False else "itemSearch") + menu = ContextMenu.getMenu((self.active[sel],), "item" if self.searching is False else "itemSearch") self.PopupMenu(menu) def itemSort(self, item): diff --git a/service/fit.py b/service/fit.py index fc9cbf4a0..8589466da 100644 --- a/service/fit.py +++ b/service/fit.py @@ -338,6 +338,25 @@ class Fit(object): fit.clear() fit.calculateModifiedAttributes() + def setAsPattern(self, fitID, ammo): + if fitID is None: + return + + try: + sDP = DamagePattern.getInstance() + dp = sDP.getDamagePattern("Ammo") + except: + dp = eos.types.DamagePattern() + dp.name = "Ammo" + + fit = eos.db.getFit(fitID) + for attr in ("em", "thermal", "kinetic", "explosive"): + setattr(dp, "%sAmount" % attr, ammo.getAttribute("%sDamage" % attr)) + + fit.damagePattern = dp + fit.clear() + fit.calculateModifiedAttributes() + def exportFit(self, fitID): fit = eos.db.getFit(fitID) return fit.exportEft() From 218701be4719b18038c1e44b4dea50ecda3b1cd1 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Thu, 28 Oct 2010 18:12:43 +0300 Subject: [PATCH 2/4] Fixed ticket #194 , wx.DOUBLE_BORDER style applies only on wxMSW and wxMAC; using wx.SIMPLE_BORDER for wxMAC and wxGTK --- gui/builtinStatsViews/resistancesViewFull.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinStatsViews/resistancesViewFull.py b/gui/builtinStatsViews/resistancesViewFull.py index 4d68a12b0..629087ed9 100644 --- a/gui/builtinStatsViews/resistancesViewFull.py +++ b/gui/builtinStatsViews/resistancesViewFull.py @@ -89,7 +89,7 @@ class ResistancesViewFull(StatsView): bitmap.SetToolTip(tooltip) sizerResistances.Add(bitmap, wx.GBPosition( row, col ), wx.GBSpan( 1, 1 ), wx.ALIGN_CENTER) col+=1 - self.stEHPs = wx.StaticText(contentPanel, wx.ID_ANY, "EHP", style = wx.DOUBLE_BORDER) + self.stEHPs = wx.StaticText(contentPanel, wx.ID_ANY, "EHP", style = wx.SIMPLE_BORDER if 'wxGTK' in wx.PlatformInfo else wx.DOUBLE_BORDER) self.stEHPs.SetToolTip(wx.ToolTip("Click to toggle between effective HP and raw HP")) self.stEHPs.Bind(wx.EVT_LEFT_UP, self.toggleEHP) From 1eba77936d7046c33c067c0e429ecee5fb403c33 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Thu, 28 Oct 2010 18:06:01 +0200 Subject: [PATCH 3/4] Actualy add the new ammoPattern file --- gui/builtinContextMenus/ammoPattern.py | 45 ++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 gui/builtinContextMenus/ammoPattern.py diff --git a/gui/builtinContextMenus/ammoPattern.py b/gui/builtinContextMenus/ammoPattern.py new file mode 100755 index 000000000..fcbcabf4b --- /dev/null +++ b/gui/builtinContextMenus/ammoPattern.py @@ -0,0 +1,45 @@ +from gui.contextMenu import ContextMenu +import gui.mainFrame +import service +import gui.fittingView +import wx +import gui.fittingView +from gui import bitmapLoader + +class AmmoPattern(ContextMenu): + def __init__(self): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + + def display(self, context, selection): + if context not in ("item", "itemSearch") or self.mainFrame.getActiveFit() is None: + return False + + item = selection[0] + if context == "itemSearch": + item = service.Market.getInstance().getItem(item.ID) + + for attr in ("emDamage", "thermalDamage", "explosiveDamage", "kineticDamage"): + if item.getAttribute(attr) is not None: + return True + + return False + + def getText(self, context, selection): + return "Set as damage pattern" + + def activate(self, context, selection, i): + item = selection[0] + if context == "itemSearch": + item = service.Market.getInstance().getItem(item.ID) + + fit = self.mainFrame.getActiveFit() + sFit = service.Fit.getInstance() + sFit.setAsPattern(fit, item) + wx.PostEvent(self.mainFrame, gui.fittingView.FitChanged(fitID=fit)) + + def getBitmap(self, context, selection): + return None + + +AmmoPattern.register() From a4fde578e7af8162aac3d3d70c667b7d91ceeb0c Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Thu, 28 Oct 2010 18:54:33 +0200 Subject: [PATCH 4/4] Add a shipBrowserWorkerThread --- service/fit.py | 1 + service/market.py | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/service/fit.py b/service/fit.py index 8589466da..0aa76ac24 100644 --- a/service/fit.py +++ b/service/fit.py @@ -23,6 +23,7 @@ from eos.types import State, Slot import copy from service.damagePattern import DamagePattern + class Fit(object): instance = None @classmethod diff --git a/service/market.py b/service/market.py index e5fc4837a..6c2eac222 100644 --- a/service/market.py +++ b/service/market.py @@ -26,6 +26,26 @@ from sqlalchemy.orm.exc import NoResultFound import Queue import traceback +class ShipBrowserWorkerThread(threading.Thread): + def run(self): + self.queue = Queue.Queue() + self.processRequests() + + def processRequests(self): + queue = self.queue + sMarket = Market.getInstance() + while True: + try: + callback, id = queue.get() + wx.CallAfter(callback, sMarket.getShipList(id)) + except: + pass + finally: + try: + queue.task_done() + except: + pass + class PriceWorkerThread(threading.Thread): def run(self): self.queue = Queue.Queue() @@ -120,6 +140,10 @@ class Market(): self.searchWorkerThread.daemon = True self.searchWorkerThread.start() + self.shipBrowserWorkerThread = ShipBrowserWorkerThread() + self.shipBrowserWorkerThread.daemon = True + self.shipBrowserWorkerThread.start() + def getChildren(self, id): """ Get the children of the group or marketGroup with the passed id. @@ -153,6 +177,9 @@ class Market(): return ships + def getShipListDelayed(self, id, callback): + self.shipBrowserWorkerThread.queue.put((id, callback)) + def searchShips(self, name): results = eos.db.searchItems(name) ships = []