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