diff --git a/gui/builtinContextMenus/itemStats.py b/gui/builtinContextMenus/itemStats.py index 9cfe69545..f42b09c53 100644 --- a/gui/builtinContextMenus/itemStats.py +++ b/gui/builtinContextMenus/itemStats.py @@ -2,6 +2,7 @@ from gui.contextMenu import ContextMenu from gui.itemStats import ItemStatsDialog import gui.mainFrame import service +import wx class ItemStats(ContextMenu): def __init__(self): @@ -31,6 +32,28 @@ class ItemStats(ContextMenu): if context == "module" and stuff.isEmpty: return - dlg=ItemStatsDialog(stuff, context.capitalize() if context not in self.REPLACES else self.REPLACES[context]) + mstate = wx.GetMouseState() + reuse = False + + if mstate.ControlDown() or mstate.CmdDown(): + reuse = True + + if self.mainFrame.GetActiveStatsWindow() == None and reuse: + dlg=ItemStatsDialog(stuff, context.capitalize() if context not in self.REPLACES else self.REPLACES[context]) + + elif reuse: + lastWnd = self.mainFrame.GetActiveStatsWindow() + pos = lastWnd.GetPosition() + maximized = lastWnd.IsMaximized() + if not maximized: + size = lastWnd.GetSize() + else: + size = wx.DefaultSize + pos = wx.DefaultPosition + dlg=ItemStatsDialog(stuff, context.capitalize() if context not in self.REPLACES else self.REPLACES[context], pos, size, maximized) + lastWnd.closeEvent(None) + + else: + dlg=ItemStatsDialog(stuff, context.capitalize() if context not in self.REPLACES else self.REPLACES[context]) ItemStats.register() diff --git a/gui/builtinStatsViews/resourcesViewFull.py b/gui/builtinStatsViews/resourcesViewFull.py index eccbac060..80967805f 100644 --- a/gui/builtinStatsViews/resourcesViewFull.py +++ b/gui/builtinStatsViews/resourcesViewFull.py @@ -214,7 +214,7 @@ class ResourcesViewFull(StatsView): gauge = getattr(self, "gauge%s%s" % (panel, capitalizedType)) resUsed = getattr(fit,"%sUsed" % resourceType) - gauge.SetValueRange(resUsed, resMax[i]()) + gauge.SetValueRange(resUsed or 0, resMax[i]() or 0) i+=1 else: diff --git a/gui/builtinStatsViews/targetingMiscViewFull.py b/gui/builtinStatsViews/targetingMiscViewFull.py index 0ebd4059d..bbbbe83d4 100644 --- a/gui/builtinStatsViews/targetingMiscViewFull.py +++ b/gui/builtinStatsViews/targetingMiscViewFull.py @@ -122,9 +122,9 @@ class TargetingMiscViewFull(StatsView): if labelName is "labelScanRes": lockTime = "%s\n" % "Lock Times".center(28) for size, radius in RADII: - left = "%s [%d]" % (size, radius) - right = "%.1fs" % fit.calculateLockTime(radius) - lockTime += "%-19s : %+5s\n" % (left, right) + left = "%s [%d] " % (size, radius) + right = "% .1fs" % fit.calculateLockTime(radius) + lockTime += "%s\t%s\n" % (right,left) # print lockTime # THIS IS ALIGNED! label.SetToolTip(wx.ToolTip(lockTime)) elif labelName is "labelSensorStr": diff --git a/gui/chromeTabs.py b/gui/chromeTabs.py index 87722c9fe..e7a35fb6a 100644 --- a/gui/chromeTabs.py +++ b/gui/chromeTabs.py @@ -272,6 +272,7 @@ class PFTabRenderer: self.tabBackBitmap = None self.cbSize = 5 self.padding = 4 + self.font = wx.FontFromPixelSize((0, self.fontSize), wx.SWISS, wx.NORMAL, wx.NORMAL, False) self.tabImg = img self.position = (0, 0) # Not used internaly for rendering - helper for tab container @@ -355,8 +356,6 @@ class PFTabRenderer: self.tabRegion = None self.closeBtnRegion = None - self.font = wx.FontFromPixelSize((0, self.fontSize), wx.SWISS, wx.NORMAL, wx.NORMAL, False) - self.InitColors() self.InitBitmaps() diff --git a/gui/itemStats.py b/gui/itemStats.py index e070b5a97..6890c9079 100644 --- a/gui/itemStats.py +++ b/gui/itemStats.py @@ -18,10 +18,11 @@ #=============================================================================== import wx +import re import gui.mainFrame import bitmapLoader import sys -import wx.lib.mixins.listctrl as listmix +import wx.lib.mixins.listctrl as listmix import wx.html from eos.types import Ship, Module, Skill, Booster, Implant, Drone from util import formatAmount @@ -29,10 +30,10 @@ import service class ItemStatsDialog(wx.Dialog): counter = 0 - def __init__(self, victim, context = None): + def __init__(self, victim, context = None, pos = wx.DefaultPosition, size = wx.DefaultSize, maximized = False): wx.Dialog.__init__(self, gui.mainFrame.MainFrame.getInstance(), - wx.ID_ANY, title="Item stats", + wx.ID_ANY, title="Item stats", pos = pos, size = size, style = wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER| wx.SYSTEM_MENU) @@ -65,11 +66,11 @@ class ItemStatsDialog(wx.Dialog): self.mainSizer.Add(self.container, 1, wx.EXPAND) self.SetSizer(self.mainSizer) - parent = gui.mainFrame.MainFrame.getInstance() + self.parentWnd = gui.mainFrame.MainFrame.getInstance() dlgsize = self.GetSize() - psize = parent.GetSize() - ppos = parent.GetPosition() + psize = self.parentWnd.GetSize() + ppos = self.parentWnd.GetPosition() ItemStatsDialog.counter += 1 self.dlgOrder = ItemStatsDialog.counter @@ -81,18 +82,32 @@ class ItemStatsDialog(wx.Dialog): dlgx = ppos.x + counter * dlgStep dlgy = ppos.y + counter * dlgStep - self.SetPosition((dlgx,dlgy)) + if pos == wx.DefaultPosition: + self.SetPosition((dlgx,dlgy)) + else: + self.SetPosition(pos) + if maximized: + self.Maximize(True) + else: + if size != wx.DefaultSize: + self.SetSize(size) + self.parentWnd.RegisterStatsWindow(self) self.Show() self.Bind(wx.EVT_CLOSE, self.closeEvent) + self.Bind(wx.EVT_ACTIVATE, self.OnActivate) + + def OnActivate(self, event): + self.parentWnd.SetActiveStatsWindow(self) def closeEvent(self, event): if self.dlgOrder==ItemStatsDialog.counter: ItemStatsDialog.counter -= 1 + self.parentWnd.UnregisterStatsWindow(self) + self.Destroy() - event.Skip() ########################################################################### ## Class ItemStatsContainer @@ -172,8 +187,9 @@ class ItemDescription ( wx.Panel ): self.description = wx.html.HtmlWindow(self) - desc = item.description.replace("\r","
") + desc = re.sub("<( *)font( *)color( *)=(.*)>", "", desc) + desc = re.sub("<( *)/( *)font( *)>","", desc) self.description.SetPage(desc) diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 956e2a52b..f8268eaaa 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -124,6 +124,8 @@ class MainFrame(wx.Frame): self.closePageId = wx.NewId() self.graphFrame = None + self.statsWnds = [] + self.activeStatsWnd = None #Add menu self.SetMenuBar(MainMenuBar()) @@ -134,6 +136,25 @@ class MainFrame(wx.Frame): #Show ourselves self.Show() + def SetActiveStatsWindow(self, wnd): + self.activeStatsWnd = wnd + + def GetActiveStatsWindow(self): + + if self.activeStatsWnd in self.statsWnds: + return self.activeStatsWnd + + if len(self.statsWnds) > 0: + return self.statsWnds[len(self.statsWnds) - 1] + else: + return None + + def RegisterStatsWindow(self, wnd): + self.statsWnds.append(wnd) + + def UnregisterStatsWindow(self, wnd): + self.statsWnds.remove(wnd) + def getActiveFit(self): p = self.fitMultiSwitch.GetSelectedPage() m = getattr(p, "getActiveFit", None) diff --git a/gui/multiSwitch.py b/gui/multiSwitch.py index 0ad6364bb..e0a3bb886 100644 --- a/gui/multiSwitch.py +++ b/gui/multiSwitch.py @@ -19,7 +19,6 @@ import wx import gui.chromeTabs -import gui.mainFrame class MultiSwitch(gui.chromeTabs.PFNotebook): def __init__(self, parent): @@ -44,10 +43,9 @@ class MultiSwitch(gui.chromeTabs.PFNotebook): def DeletePage(self, n, *args, **kwargs): - if self.GetPageCount() > 1: - gui.chromeTabs.PFNotebook.DeletePage(self, n, *args, **kwargs) - else: - gui.mainFrame.MainFrame.getInstance().Close() + gui.chromeTabs.PFNotebook.DeletePage(self, n, *args, **kwargs) + if self.GetPageCount() == 0: + self.AddPage() class BlankPage(wx.Panel): def __init__(self, parent): diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index fdd1c71ba..9156cb584 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -842,7 +842,7 @@ class ShipItem(wx.Window): if shipID: self.shipBmp = bitmapLoader.getBitmap(str(shipID),"ships") if not self.shipBmp: - self.shipBmp = wx.EmptyBitmap(32, 32) + self.shipBmp = bitmapLoader.getBitmap("ship_no_image_big","icons") self.shipFittingInfo = shipFittingInfo self.shipName, self.shipFits = shipFittingInfo @@ -1195,7 +1195,7 @@ class FitItem(wx.Window): if shipID: self.shipBmp = bitmapLoader.getBitmap(str(shipID),"ships") if not self.shipBmp: - self.shipBmp = wx.EmptyBitmap(32, 32) + self.shipBmp = bitmapLoader.getBitmap("ship_no_image_big","icons") self.shipFittingInfo = shipFittingInfo self.shipName, self.fitName, self.timestamp = shipFittingInfo diff --git a/icons/ship_no_image_big.png b/icons/ship_no_image_big.png new file mode 100644 index 000000000..a66606d28 Binary files /dev/null and b/icons/ship_no_image_big.png differ