From 3dd18340f7c0a5ee9cfea6058ef65f90ebbb61d5 Mon Sep 17 00:00:00 2001 From: Corollax Date: Sat, 27 Nov 2010 17:56:07 -0600 Subject: [PATCH 01/22] Update staticdata repo Version 207554, at cncfanatics's request. Obviously, revert if I misunderstood... --- staticdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staticdata b/staticdata index b7f1a1517..380041178 160000 --- a/staticdata +++ b/staticdata @@ -1 +1 @@ -Subproject commit b7f1a15178e678e04241b1b2184346fa7ab5b596 +Subproject commit 380041178dec26f36dfbda60ebd84aba88c6dacf From abbf1cadcc0e809b391746fd085441b7e0bd8751 Mon Sep 17 00:00:00 2001 From: Corollax Date: Sun, 28 Nov 2010 01:37:09 -0600 Subject: [PATCH 02/22] Revert "Update staticdata repo" This reverts commit 3dd18340f7c0a5ee9cfea6058ef65f90ebbb61d5. --- staticdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staticdata b/staticdata index 380041178..b7f1a1517 160000 --- a/staticdata +++ b/staticdata @@ -1 +1 @@ -Subproject commit 380041178dec26f36dfbda60ebd84aba88c6dacf +Subproject commit b7f1a15178e678e04241b1b2184346fa7ab5b596 From c20f84bc440fcb3355d7272e56f9d85c141a49e8 Mon Sep 17 00:00:00 2001 From: Corollax Date: Sun, 28 Nov 2010 01:42:56 -0600 Subject: [PATCH 03/22] Revert "Revert "Update staticdata repo"" This reverts commit abbf1cadcc0e809b391746fd085441b7e0bd8751. Going to let cnc do this because apparently I can't do it right. --- staticdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staticdata b/staticdata index b7f1a1517..380041178 160000 --- a/staticdata +++ b/staticdata @@ -1 +1 @@ -Subproject commit b7f1a15178e678e04241b1b2184346fa7ab5b596 +Subproject commit 380041178dec26f36dfbda60ebd84aba88c6dacf From c9583df9b827363c13b06e5dae9b135dae3bd073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20B=C3=B6lter?= Date: Sun, 28 Nov 2010 08:55:49 +0100 Subject: [PATCH 04/22] Fixed Staticdata --- staticdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staticdata b/staticdata index 380041178..c7e9b570e 160000 --- a/staticdata +++ b/staticdata @@ -1 +1 @@ -Subproject commit 380041178dec26f36dfbda60ebd84aba88c6dacf +Subproject commit c7e9b570e2abc69a0e65369b8ee5114bf0239460 From 34fe62196edec6beecb66ba48213b62bdf0046d3 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 11:07:26 +0200 Subject: [PATCH 05/22] Graph frame layout improvement --- gui/graphFrame.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/gui/graphFrame.py b/gui/graphFrame.py index aba6eeba8..5c30b127c 100644 --- a/gui/graphFrame.py +++ b/gui/graphFrame.py @@ -37,32 +37,38 @@ import gui.mainFrame class GraphFrame(wx.Frame): def __init__(self, parent, style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE | wx.FRAME_FLOAT_ON_PARENT): - wx.Frame.__init__(self, parent, title=u"pyfa: Graph Generator", style=style, size=(640, 480)) + wx.Frame.__init__(self, parent, title=u"pyfa: Graph Generator", style=style, size=(520, 390)) i = wx.IconFromBitmap(bitmapLoader.getBitmap("graphs_small", "icons")) self.SetIcon(i) - + self.SetMinSize((520,390)) self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.CreateStatusBar() - horSizer = wx.BoxSizer(wx.HORIZONTAL) - self.SetSizer(horSizer) self.mainSizer = wx.BoxSizer(wx.VERTICAL) - horSizer.Add(self.mainSizer, 1, wx.EXPAND) + self.SetSizer(self.mainSizer) sFit = service.Fit.getInstance() fit = sFit.getFit(self.mainFrame.getActiveFit()) self.fits = [fit] if fit is not None else [] self.fitList = FitList(self) - self.fitList.SetMinSize((320, -1)) - horSizer.Add(self.fitList, 0, wx.EXPAND) + self.fitList.SetMinSize((270, -1)) + self.fitList.fitList.update(self.fits) self.graphSelection = wx.Choice(self, wx.ID_ANY, style=0) self.mainSizer.Add(self.graphSelection, 0, wx.EXPAND) self.figure = Figure(figsize=(4, 3)) + + rgbtuple = wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ).Get() + clr = [c/255. for c in rgbtuple] + self.figure.set_facecolor( clr ) + self.figure.set_edgecolor( clr ) + self.canvas = Canvas(self, -1, self.figure) + self.canvas.SetBackgroundColour( wx.Colour( *rgbtuple ) ) + self.subplot = self.figure.add_subplot(111) self.subplot.grid(True) @@ -75,7 +81,7 @@ class GraphFrame(wx.Frame): dummyBox = wx.BoxSizer(wx.VERTICAL) self.gridPanel.SetSizer(dummyBox) - self.gridSizer = wx.FlexGridSizer(0, 2) + self.gridSizer = wx.FlexGridSizer(0, 4) self.gridSizer.AddGrowableCol(1) dummyBox.Add(self.gridSizer, 0, wx.EXPAND) @@ -86,6 +92,9 @@ class GraphFrame(wx.Frame): self.graphSelection.SetSelection(0) self.fields = {} self.select(0) + self.sl1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + self.mainSizer.Add(self.sl1,0, wx.EXPAND) + self.mainSizer.Add(self.fitList, 0, wx.EXPAND) self.fitList.fitList.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) self.mainFrame.Bind(gui.builtinViews.fittingView.FIT_CHANGED, self.draw) @@ -212,5 +221,5 @@ class FitDisplay(gui.display.Display): "Base Name"] def __init__(self, parent): - gui.display.Display.__init__(self, parent, style = wx.SIMPLE_BORDER) + gui.display.Display.__init__(self, parent) From 95e68c069d5890537e65501bd4d63b9fb6dd92cf Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 11:12:04 +0200 Subject: [PATCH 06/22] Let wx autosize Graphframe --- gui/graphFrame.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gui/graphFrame.py b/gui/graphFrame.py index 5c30b127c..ba447b77a 100644 --- a/gui/graphFrame.py +++ b/gui/graphFrame.py @@ -41,7 +41,6 @@ class GraphFrame(wx.Frame): i = wx.IconFromBitmap(bitmapLoader.getBitmap("graphs_small", "icons")) self.SetIcon(i) - self.SetMinSize((520,390)) self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.CreateStatusBar() @@ -100,6 +99,9 @@ class GraphFrame(wx.Frame): self.mainFrame.Bind(gui.builtinViews.fittingView.FIT_CHANGED, self.draw) self.Bind(wx.EVT_CLOSE, self.close) + self.Fit() + self.SetMinSize(self.GetSize()) + def handleDrag(self, type, fitID): if type == "fit": self.AppendFitToList(fitID) From c06e164fb18ee31142b74a8e46a8763dee776119 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 11:43:32 +0200 Subject: [PATCH 07/22] Use NumCtrl instead of IntCtrl (we want floats in dmg pattern editor), ignore bad data in dmg pattern import service --- gui/patternEditor.py | 23 ++++++++++------------- service/damagePattern.py | 19 +++++++++++-------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/gui/patternEditor.py b/gui/patternEditor.py index bdd79e16a..7e0e3d857 100644 --- a/gui/patternEditor.py +++ b/gui/patternEditor.py @@ -20,6 +20,7 @@ import wx import bitmapLoader from wx.lib.intctrl import IntCtrl +from wx.lib.masked.numctrl import NumCtrl import service from util import toClipboard, fromClipboard ########################################################################### @@ -103,22 +104,26 @@ class DmgPatternEditorDlg (wx.Dialog): self.bmpEM = wx.StaticBitmap(self, wx.ID_ANY, self.embitmap) dmgeditSizer.Add(self.bmpEM, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, 5) - self.editEm = IntCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize) + self.editEm = NumCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize) + self.editEm.SetFractionWidth(2) dmgeditSizer.Add(self.editEm, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL, 5) self.bmpTHERM = wx.StaticBitmap(self, wx.ID_ANY, self.thermbitmap) dmgeditSizer.Add(self.bmpTHERM, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT, 25) - self.editThermal = IntCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize, 0) + self.editThermal = NumCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize, 0) + self.editThermal.SetFractionWidth(2) dmgeditSizer.Add(self.editThermal, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL, 5) self.bmpKIN = wx.StaticBitmap(self, wx.ID_ANY, self.kinbitmap) dmgeditSizer.Add(self.bmpKIN, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, 5) - self.editKinetic = IntCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize) + self.editKinetic = NumCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize) + self.editKinetic.SetFractionWidth(2) dmgeditSizer.Add(self.editKinetic, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL, 5) self.bmpEXP = wx.StaticBitmap(self, wx.ID_ANY, self.expbitmap) dmgeditSizer.Add(self.bmpEXP, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT, 25) - self.editExplosive = IntCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize, 0) + self.editExplosive = NumCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize, 0) + self.editExplosive.SetFractionWidth(2) dmgeditSizer.Add(self.editExplosive, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL, 5) contentSizer.Add(dmgeditSizer, 1, wx.EXPAND | wx.ALL, 5) @@ -136,12 +141,6 @@ class DmgPatternEditorDlg (wx.Dialog): self.totSizer = wx.BoxSizer(wx.VERTICAL) -# self.stTotal = wx.StaticText(self, wx.ID_ANY, u"LOL") -# self.stTotal.Wrap(-1) -# self.totSizer.Add(self.stTotal, 0, wx.ALIGN_RIGHT | wx.BOTTOM | wx.RIGHT, 5) - -# footerSizer.Add(self.totSizer, 1, 0, 5) - contentSizer.Add(footerSizer, 0, wx.EXPAND, 5) mainSizer.Add(contentSizer, 1, wx.EXPAND, 0) @@ -214,9 +213,7 @@ class DmgPatternEditorDlg (wx.Dialog): else: ltext = format %(0, 0, 0, 0) - #ttext = "Total: % 6d" % (total) self.stPercentages.SetLabel(ltext) - #self.stTotal.SetLabel(ttext) self.totSizer.Layout() if event is not None: @@ -297,7 +294,7 @@ class DmgPatternEditorDlg (wx.Dialog): def processRename(self, event): newName = self.namePicker.GetLineText(0) self.stPercentages.SetLabel("") -# self.stTotal.SetLabel("") + p = self.getActivePattern() for pattern in self.choices: if pattern.name == newName and p != pattern: diff --git a/service/damagePattern.py b/service/damagePattern.py index e67746ee2..0b96c7a2f 100644 --- a/service/damagePattern.py +++ b/service/damagePattern.py @@ -69,14 +69,17 @@ class DamagePattern(): current = self.getDamagePatternList() for pattern in current: lookup[pattern.name] = pattern - imports = eos.types.DamagePattern.importPatterns(text) - for pattern in imports: - if pattern.name in lookup: - match = lookup[pattern.name] - match.__dict__.update(pattern.__dict__) - else: - eos.db.save(pattern) - eos.db.commit() + try: + imports = eos.types.DamagePattern.importPatterns(text) + for pattern in imports: + if pattern.name in lookup: + match = lookup[pattern.name] + match.__dict__.update(pattern.__dict__) + else: + eos.db.save(pattern) + eos.db.commit() + except: + pass def exportPatterns(self): patterns = self.getDamagePatternList() From ae34992acf56a01b789348113e93fcdf6b7a47b4 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 12:09:36 +0200 Subject: [PATCH 08/22] Use a better FloatCtrl in patternEditor --- gui/patternEditor.py | 27 ++---- util.py | 221 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 231 insertions(+), 17 deletions(-) diff --git a/gui/patternEditor.py b/gui/patternEditor.py index 7e0e3d857..f65657222 100644 --- a/gui/patternEditor.py +++ b/gui/patternEditor.py @@ -19,10 +19,9 @@ import wx import bitmapLoader -from wx.lib.intctrl import IntCtrl -from wx.lib.masked.numctrl import NumCtrl import service -from util import toClipboard, fromClipboard +from util import toClipboard, fromClipboard, FloatCtrl + ########################################################################### ## Class DmgPatternEditorDlg ########################################################################### @@ -104,26 +103,26 @@ class DmgPatternEditorDlg (wx.Dialog): self.bmpEM = wx.StaticBitmap(self, wx.ID_ANY, self.embitmap) dmgeditSizer.Add(self.bmpEM, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, 5) - self.editEm = NumCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize) - self.editEm.SetFractionWidth(2) + self.editEm = FloatCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize) + self.editEm.SetPrecision(2) dmgeditSizer.Add(self.editEm, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL, 5) self.bmpTHERM = wx.StaticBitmap(self, wx.ID_ANY, self.thermbitmap) dmgeditSizer.Add(self.bmpTHERM, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT, 25) - self.editThermal = NumCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize, 0) - self.editThermal.SetFractionWidth(2) + self.editThermal = FloatCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize, 0) + self.editThermal.SetPrecision(2) dmgeditSizer.Add(self.editThermal, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL, 5) self.bmpKIN = wx.StaticBitmap(self, wx.ID_ANY, self.kinbitmap) dmgeditSizer.Add(self.bmpKIN, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, 5) - self.editKinetic = NumCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize) - self.editKinetic.SetFractionWidth(2) + self.editKinetic = FloatCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize) + self.editKinetic.SetPrecision(2) dmgeditSizer.Add(self.editKinetic, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL, 5) self.bmpEXP = wx.StaticBitmap(self, wx.ID_ANY, self.expbitmap) dmgeditSizer.Add(self.bmpEXP, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT, 25) - self.editExplosive = NumCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize, 0) - self.editExplosive.SetFractionWidth(2) + self.editExplosive = FloatCtrl(self, wx.ID_ANY, 0, wx.DefaultPosition, defSize, 0) + self.editExplosive.SetPrecision(2) dmgeditSizer.Add(self.editExplosive, 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL, 5) contentSizer.Add(dmgeditSizer, 1, wx.EXPAND | wx.ALL, 5) @@ -166,12 +165,6 @@ class DmgPatternEditorDlg (wx.Dialog): bsize = self.GetBestSize() self.SetSize((-1,bsize.height)) - self.editEm.SetLimited(True) - self.editThermal.SetLimited(True) - self.editKinetic.SetLimited(True) - self.editExplosive.SetLimited(True) - - self.editEm.SetMin(0) self.editThermal.SetMin(0) self.editKinetic.SetMin(0) diff --git a/util.py b/util.py index f5a359979..a9d1eb396 100644 --- a/util.py +++ b/util.py @@ -1,5 +1,6 @@ import math import wx +import fpformat def formatAmount(val, prec=3, lowest=0, highest=0): """ @@ -91,3 +92,223 @@ def fromClipboard(): else: clip.Close() return None + + +def set_float(val,default=None): + """ utility to set a floating value, useful for converting from strings """ + if val in (None,''): return default + try: + return float(val) + except: + return default + +class closure: + """A very simple callback class to emulate a closure (reference to + a function with arguments) in python. + + This class holds a user-defined function to be executed when the + class is invoked as a function. This is useful in many situations, + especially for 'callbacks' where lambda's are quite enough. + Many Tkinter 'actions' can use such callbacks. + + >>>def my_action(x=None): + ... print 'my action: x = ', x + >>>c = closure(my_action,x=1) + ..... sometime later ... + >>>c() + my action: x = 1 + >>>c(x=2) + my action: x = 2 + + based on Command class from J. Grayson's Tkinter book. + """ + def __init__(self,func=None,*args, **kw): + self.func = func + self.kw = kw + self.args = args + def __call__(self, *args, **kw): + self.kw.update(kw) + if (self.func == None): return None + self.args = args + return apply(self.func,self.args,self.kw) + + +class FloatCtrl(wx.TextCtrl): + """ Numerical Float Control:: + a wx.TextCtrl that allows only numerical input, can take a precision argument + and optional upper / lower bounds + """ + def __init__(self, parent, value='', min='', max='', + action=None, precision=3, action_kw={}, **kwargs): + + self.__digits = '0123456789.-' + self.__prec = precision + if precision is None: self.__prec = 0 + self.format = '%%.%if' % self.__prec + + self.__val = set_float(value) + self.__max = set_float(max) + self.__min = set_float(min) + + self.fgcol_valid = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOWTEXT) + self.bgcol_valid = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW) + self.fgcol_invalid ="Red" + self.bgcol_invalid =(254,254,80) + + + # set up action + self.__action = closure() + if callable(action): self.__action.func = action + if len(action_kw.keys())>0: self.__action.kw = action_kw + + this_sty = wx.TE_PROCESS_ENTER + kw = kwargs + if kw.has_key('style'): this_sty = this_sty | kw['style'] + kw['style'] = this_sty + + wx.TextCtrl.__init__(self, parent, wx.ID_ANY, **kw) + + self.__CheckValid(self.__val) + self.SetValue(self.__val) + + self.Bind(wx.EVT_CHAR, self.onChar) + # self.Bind(wx.EVT_CHAR, self.CharEvent) + self.Bind(wx.EVT_TEXT, self.onText) + + self.Bind(wx.EVT_SET_FOCUS, self.onSetFocus) + self.Bind(wx.EVT_KILL_FOCUS, self.onKillFocus) + self.Bind(wx.EVT_SIZE, self.onResize) + self.__GetMark() + + def SetAction(self,action,action_kw={}): + self.__action = closure() + if callable(action): self.__action.func = action + if len(action_kw.keys())>0: self.__action.kw = action_kw + + def SetPrecision(self,p): + if p is None: p = 0 + self.__prec = p + self.format = '%%.%if' % p + + def __GetMark(self): + " keep track of cursor position within text" + try: + self.__mark = min(wx.TextCtrl.GetSelection(self)[0], + len(wx.TextCtrl.GetValue(self).strip())) + except: + self.__mark = 0 + + def __SetMark(self,m=None): + " " + if m==None: m = self.__mark + self.SetSelection(m,m) + + def SetValue(self,value=None,act=True): + " main method to set value " + # print 'Set Value ' + if value == None: value = wx.TextCtrl.GetValue(self).strip() + self.__CheckValid(value) + self.__GetMark() + if self.__valid: + self.__Text_SetValue(self.__val) + self.SetForegroundColour(self.fgcol_valid) + self.SetBackgroundColour(self.bgcol_valid) + if callable(self.__action) and act: self.__action(value=self.__val) + else: + self.__val = self.__bound_val + self.__Text_SetValue(self.__val) + self.__CheckValid(self.__val) + self.SetForegroundColour(self.fgcol_invalid) + self.SetBackgroundColour(self.bgcol_invalid) + self.__SetMark() + + def onKillFocus(self, event): + self.__GetMark() + event.Skip() + + def onResize(self, event): + event.Skip() + + def onSetFocus(self, event=None): + self.__SetMark() + if event: event.Skip() + + def onChar(self, event): + """ on Character event""" + key = event.GetKeyCode() + entry = wx.TextCtrl.GetValue(self).strip() + pos = wx.TextCtrl.GetSelection(self) + # really, the order here is important: + # 1. return sends to ValidateEntry + if (key == wx.WXK_RETURN): + self.SetValue(entry) + return + + # 2. other non-text characters are passed without change + if (key < wx.WXK_SPACE or key == wx.WXK_DELETE or key > 255): + event.Skip() + return + + # 3. check for multiple '.' and out of place '-' signs and ignore these + # note that chr(key) will now work due to return at #2 + + has_minus = '-' in entry + ckey = chr(key) + if ((ckey == '.' and (self.__prec == 0 or '.' in entry) ) or + (ckey == '-' and (has_minus or pos[0] != 0)) or + (ckey != '-' and has_minus and pos[0] == 0)): + return + # 4. allow digits, but not other characters + if (chr(key) in self.__digits): + event.Skip() + return + # return without event.Skip() : do not propagate event + return + + def onText(self, event=None): + try: + if event.GetString() != '': + self.__CheckValid(event.GetString()) + except: + pass + event.Skip() + + def GetValue(self): + if self.__prec > 0: + return set_float(fpformat.fix(self.__val, self.__prec)) + else: + return int(self.__val) + + def GetMin(self): return self.__min + def GetMax(self): return self.__max + def SetMin(self,min): self.__min = set_float(min) + def SetMax(self,max): self.__max = set_float(max) + + def __Text_SetValue(self,value): + wx.TextCtrl.SetValue(self, self.format % set_float(value)) + self.Refresh() + + def __CheckValid(self,value): + # print ' Check valid ', value + v = self.__val + try: + self.__valid = True + v = set_float(value) + if self.__min != None and (v < self.__min): + self.__valid = False + v = self.__min + if self.__max != None and (v > self.__max): + self.__valid = False + v = self.__max + except: + self.__valid = False + self.__bound_val = v + if self.__valid: + self.__bound_val = self.__val = v + self.SetForegroundColour(self.fgcol_valid) + self.SetBackgroundColour(self.bgcol_valid) + else: + self.SetForegroundColour(self.fgcol_invalid) + self.SetBackgroundColour(self.bgcol_invalid) + self.Refresh() + From ae6cc539f1182dc72a2b5edde5e4836529192185 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 15:02:16 +0200 Subject: [PATCH 09/22] Fixed a visual bug in shipbrowser - fititem --- gui/shipBrowser.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 9156cb584..455354e64 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -1483,6 +1483,7 @@ class FitItem(wx.Window): def selectFit(self, event=None): wx.PostEvent(self.mainFrame, FitSelected(fitID=self.fitID)) + self.Parent.RefreshList(True) def NHitTest(self, target, position, area): x, y = target From 99c2661b4573329f928e50fe0518459bdb9e8516 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 17:31:29 +0200 Subject: [PATCH 10/22] Rewritten GetPartialText; moved in util.py --- gui/fleetBrowser.py | 17 +++-------------- util.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/gui/fleetBrowser.py b/gui/fleetBrowser.py index ecbd8bc87..e96dca5fe 100644 --- a/gui/fleetBrowser.py +++ b/gui/fleetBrowser.py @@ -4,6 +4,7 @@ from gui import bitmapLoader import gui.mainFrame from gui.PFListPane import PFListPane import service.fleet +from util import GetPartialText from wx.lib.buttons import GenBitmapButton @@ -429,12 +430,12 @@ class FleetItem(wx.Window): bdc.SetFont(self.fontBig) fnx,fny = bdc.GetTextExtent(self.fleetName) - pfn = self.GetPartialText(self.fleetName, bdc, self.copyPosX - 16 - self.padding - tx - textStart, 1) + pfn = GetPartialText(bdc, self.fleetName, self.copyPosX - 16 - self.padding - tx - textStart) bdc.DrawText(pfn, textStart, (rect.height/2 - fny) / 2) bdc.SetFont(self.fontSmall) fcx,fcy = bdc.GetTextExtent(fleetCount) - pfc = self.GetPartialText(fleetCount, bdc, self.copyPosX - 16 - self.padding - tx - textStart, 1) + pfc = GetPartialText(bdc, fleetCount, self.copyPosX - 16 - self.padding - tx - textStart) bdc.DrawText(pfc, textStart, rect.height/2 + (rect.height/2 -fcy) / 2 ) bdc.SetFont(self.fontSmall) @@ -474,18 +475,6 @@ class FleetItem(wx.Window): self.AdjustFleetNameEditSize(textStart, self.copyPosX - self.editWidth - self.padding) - def GetPartialText(self, text, dc , maxWidth, minChars): - textwidths = dc.GetPartialTextExtents(text + "...") - count = 0 - - for i in textwidths: - if i <= maxWidth: - count +=1 - else: - break - - return "%s%s" % (text[:count if count > minChars else minChars], "..." if len(text) > count else "" ) - def AdjustFleetNameEditSize(self, start,end): fnEditSize = self.tcFleetName.GetSize() wSize = self.GetSize() diff --git a/util.py b/util.py index a9d1eb396..21df79ac6 100644 --- a/util.py +++ b/util.py @@ -94,6 +94,37 @@ def fromClipboard(): return None + + +def GetPartialText(dc, text , maxWidth): + ellipsis = "..." + base_w, h = dc.GetTextExtent(ellipsis) + + lenText = len(text) + drawntext = text + w, dummy = dc.GetTextExtent(text) + + while lenText > 1: + + if w + base_w <= maxWidth: + break + + w_c, h_c = dc.GetTextExtent(drawntext[-1]) + drawntext = drawntext[0:-1] + lenText -= 1 + w -= w_c + + while len(ellipsis) > 0 and w + base_w > maxWidth: + ellipsis = ellipsis[0:-1] + base_w, h = dc.GetTextExtent(ellipsis) + if len(text) > lenText: + return drawntext + ellipsis + else: + return text + + + + def set_float(val,default=None): """ utility to set a floating value, useful for converting from strings """ if val in (None,''): return default From 1c820e3859077b7e9b7c3312431a0bc4d37b4aba Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 20:04:45 +0200 Subject: [PATCH 11/22] Fixed PFNotebook not sending PageChanged event when deleting a tab (if it's the case); multiSwitch uses a smarter BlankPage that responds to PageChanged event, now pyfa is behaving correctly when switching betwen fittingView tabs and empty tabs; FIT_CHANGED event moved to globalEvents.py since it is used a lot in different locations;... --- gui/boosterView.py | 4 ++-- gui/builtinViews/emptyView.py | 26 ++++++++++++++++++++++++++ gui/builtinViews/fittingView.py | 16 ++++++++-------- gui/characterSelection.py | 6 +++--- gui/chromeTabs.py | 10 +++++++--- gui/droneView.py | 4 ++-- gui/globalEvents.py | 3 +++ gui/graphFrame.py | 5 +++-- gui/implantView.py | 4 ++-- gui/mainMenuBar.py | 3 ++- gui/multiSwitch.py | 7 ++----- gui/projectedView.py | 4 ++-- gui/shipBrowser.py | 4 ++-- gui/statsPane.py | 5 +++-- 14 files changed, 67 insertions(+), 34 deletions(-) create mode 100644 gui/builtinViews/emptyView.py create mode 100644 gui/globalEvents.py diff --git a/gui/boosterView.py b/gui/boosterView.py index 98d4513e0..c86bc918e 100644 --- a/gui/boosterView.py +++ b/gui/boosterView.py @@ -20,7 +20,7 @@ import wx import service import gui.display as d -import gui.builtinViews.fittingView as fv +import gui.globalEvents as GE import gui.marketBrowser as mb from gui.builtinViewColumns.state import State from gui.contextMenu import ContextMenu @@ -32,7 +32,7 @@ class BoosterView(d.Display): def __init__(self, parent): d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL) - self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) + self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem) self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) self.Bind(wx.EVT_LEFT_DOWN, self.click) diff --git a/gui/builtinViews/emptyView.py b/gui/builtinViews/emptyView.py new file mode 100644 index 000000000..a57021efa --- /dev/null +++ b/gui/builtinViews/emptyView.py @@ -0,0 +1,26 @@ +import wx +import gui.globalEvents as GE +import gui.chromeTabs +import gui.mainFrame +import service + +class BlankPage(wx.Panel): + def __init__(self, parent): + wx.Panel.__init__(self, parent, size=(0, 0)) + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.parent = parent + self.parent.Bind(gui.chromeTabs.EVT_NOTEBOOK_PAGE_CHANGED, self.pageChanged) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=None)) + + def Destroy(self): + self.parent.Unbind(gui.chromeTabs.EVT_NOTEBOOK_PAGE_CHANGED, handler=self.pageChanged) + wx.Panel.Destroy(self) + + def pageChanged(self, event): + if self.parent.IsActive(self): + fitID = None +# sFit = service.Fit.getInstance() +# sFit.switchFit(fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + + event.Skip() \ No newline at end of file diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index 8ca0583fc..7d1909737 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -30,7 +30,7 @@ from eos.types import Slot from gui.builtinViewColumns.state import State from gui import bitmapLoader -FitChanged, FIT_CHANGED = wx.lib.newevent.NewEvent() +import gui.globalEvents as GE #Tab spawning handler class FitSpawner(gui.multiSwitch.TabSpawner): @@ -108,7 +108,7 @@ class FittingView(d.Display): d.Display.__init__(self, parent, size = (0,0)) self.Show(False) self.parent = parent - self.mainFrame.Bind(FIT_CHANGED, self.fitChanged) + self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(gui.shipBrowser.EVT_FIT_RENAMED, self.fitRenamed) self.mainFrame.Bind(gui.shipBrowser.EVT_FIT_REMOVED, self.fitRemoved) self.mainFrame.Bind(gui.marketBrowser.ITEM_SELECTED, self.appendItem) @@ -138,7 +138,7 @@ class FittingView(d.Display): def Destroy(self): self.parent.Unbind(gui.chromeTabs.EVT_NOTEBOOK_PAGE_CHANGED, handler=self.pageChanged) - self.mainFrame.Unbind(FIT_CHANGED, handler=self.fitChanged) + self.mainFrame.Unbind(GE.FIT_CHANGED, handler=self.fitChanged) self.mainFrame.Unbind(gui.shipBrowser.EVT_FIT_RENAMED, handler=self.fitRenamed) self.mainFrame.Unbind(gui.shipBrowser.EVT_FIT_REMOVED, handler=self.fitRemoved) self.mainFrame.Unbind(gui.marketBrowser.ITEM_SELECTED, handler=self.appendItem) @@ -150,7 +150,7 @@ class FittingView(d.Display): fitID = self.getActiveFit() sFit = service.Fit.getInstance() sFit.switchFit(fitID) - wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) event.Skip() @@ -216,7 +216,7 @@ class FittingView(d.Display): self.slotsChanged() sFit = service.Fit.getInstance() sFit.switchFit(fitID) - wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) self.updateTab() event.Skip() @@ -242,13 +242,13 @@ class FittingView(d.Display): sel = self.GetNextSelected(sel) cFit.setAmmo(fitID, itemID, modules) - wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) else: populate = cFit.appendModule(fitID, itemID) if populate: self.slotsChanged() if populate is not None: - wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) event.Skip() @@ -262,7 +262,7 @@ class FittingView(d.Display): if populate is not None: if populate: self.slotsChanged() - wx.PostEvent(self.mainFrame, FitChanged(fitID=self.activeFitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.activeFitID)) event.Skip() diff --git a/gui/characterSelection.py b/gui/characterSelection.py index f9434017b..27d797c98 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -21,7 +21,7 @@ import wx import service from gui import characterEditor as ce from gui import bitmapLoader -from gui.builtinViews import fittingView as fv +import gui.globalEvents as GE import gui.mainFrame class CharacterSelection(wx.Panel): @@ -49,7 +49,7 @@ class CharacterSelection(wx.Panel): self.skillReqsStaticBitmap.SetBitmap(self.cleanSkills) self.Bind(wx.EVT_CHOICE, self.charChanged) self.mainFrame.Bind(ce.CHAR_LIST_UPDATED, self.refreshCharacterList) - self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) + self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) panelSize = wx.Size(-1,30) self.SetMinSize(panelSize) @@ -93,7 +93,7 @@ class CharacterSelection(wx.Panel): cFit = service.Fit.getInstance() cFit.changeChar(fitID, charID) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def selectChar(self, charID): choice = self.charChoice diff --git a/gui/chromeTabs.py b/gui/chromeTabs.py index e7a35fb6a..8fcc38da3 100644 --- a/gui/chromeTabs.py +++ b/gui/chromeTabs.py @@ -150,10 +150,11 @@ class PFNotebook(wx.Panel): def GetPageCount(self): return len(self.pages) - def AddPage(self, tabWnd, tabTitle ="Empty Tab", tabImage = None, showClose = True): + def AddPage(self, tabWnd = None, tabTitle ="Empty Tab", tabImage = None, showClose = True): if self.activePage: self.activePage.Hide() - + if not tabWnd: + tabWnd = wx.Panel(self) tabWnd.Reparent(self.pageContainer) self.pageContainer.Layout() @@ -796,6 +797,9 @@ class PFTabsContainer(wx.Panel): index = self.GetTabIndex(tab) self.DeleteTab(index) wx.PostEvent(self.Parent, PageClosed(index=index)) + sel = self.GetSelected() + if sel: + wx.PostEvent(self.Parent, PageChanged(-1, sel)) return True return False @@ -811,7 +815,7 @@ class PFTabsContainer(wx.Panel): if ev.isVetoed(): return False - self.Parent.AddPage(wx.Panel(self.Parent, size = (0,0))) + self.Parent.AddPage() wx.PostEvent(self.Parent, PageAdded()) return True diff --git a/gui/droneView.py b/gui/droneView.py index 0b400c1a0..b21837fe9 100644 --- a/gui/droneView.py +++ b/gui/droneView.py @@ -20,7 +20,7 @@ import wx import service -import gui.builtinViews.fittingView as fv +import gui.globalEvents as GE import gui.marketBrowser as mb import gui.display as d from gui.builtinViewColumns.state import State @@ -50,7 +50,7 @@ class DroneView(d.Display): def __init__(self, parent): d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL) - self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) + self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem) self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) self.Bind(wx.EVT_LEFT_DOWN, self.click) diff --git a/gui/globalEvents.py b/gui/globalEvents.py new file mode 100644 index 000000000..a0d4bedad --- /dev/null +++ b/gui/globalEvents.py @@ -0,0 +1,3 @@ +import wx.lib.newevent + +FitChanged, FIT_CHANGED = wx.lib.newevent.NewEvent() \ No newline at end of file diff --git a/gui/graphFrame.py b/gui/graphFrame.py index ba447b77a..04c4d6eb6 100644 --- a/gui/graphFrame.py +++ b/gui/graphFrame.py @@ -20,6 +20,7 @@ import wx import bitmapLoader import gui.display +import gui.globalEvents as GE try: import matplotlib as mpl @@ -96,7 +97,7 @@ class GraphFrame(wx.Frame): self.mainSizer.Add(self.fitList, 0, wx.EXPAND) self.fitList.fitList.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) - self.mainFrame.Bind(gui.builtinViews.fittingView.FIT_CHANGED, self.draw) + self.mainFrame.Bind(GE.FIT_CHANGED, self.draw) self.Bind(wx.EVT_CLOSE, self.close) self.Fit() @@ -108,7 +109,7 @@ class GraphFrame(wx.Frame): def close(self, event): self.fitList.fitList.Unbind(wx.EVT_LEFT_DCLICK, handler=self.removeItem) - self.mainFrame.Unbind(gui.builtinViews.fittingView.FIT_CHANGED, handler=self.draw) + self.mainFrame.Unbind(GE.FIT_CHANGED, handler=self.draw) event.Skip() def getView(self): diff --git a/gui/implantView.py b/gui/implantView.py index 24d6557e3..c7eddcc34 100644 --- a/gui/implantView.py +++ b/gui/implantView.py @@ -24,7 +24,7 @@ import gui.builtinViews.fittingView as fv import gui.marketBrowser as mb from gui.builtinViewColumns.state import State from gui.contextMenu import ContextMenu - +import globalEvents as GE class ImplantView(d.Display): DEFAULT_COLS = ["State", "attr:implantness", @@ -32,7 +32,7 @@ class ImplantView(d.Display): def __init__(self, parent): d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL) - self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) + self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem) self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) self.Bind(wx.EVT_KEY_UP, self.kbEvent) diff --git a/gui/mainMenuBar.py b/gui/mainMenuBar.py index b442589c2..7dcdbc21e 100644 --- a/gui/mainMenuBar.py +++ b/gui/mainMenuBar.py @@ -21,6 +21,7 @@ import wx import bitmapLoader import gui.mainFrame import gui.graphFrame +import gui.globalEvents as GE class MainMenuBar(wx.MenuBar): def __init__(self): @@ -90,7 +91,7 @@ class MainMenuBar(wx.MenuBar): - self.mainFrame.Bind(gui.builtinViews.fittingView.FIT_CHANGED, self.fitChanged) + self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) def fitChanged(self, event): enable = event.fitID is not None diff --git a/gui/multiSwitch.py b/gui/multiSwitch.py index e0a3bb886..dd37e9d56 100644 --- a/gui/multiSwitch.py +++ b/gui/multiSwitch.py @@ -19,6 +19,7 @@ import wx import gui.chromeTabs +import gui.builtinViews.emptyView class MultiSwitch(gui.chromeTabs.PFNotebook): def __init__(self, parent): @@ -36,7 +37,7 @@ class MultiSwitch(gui.chromeTabs.PFNotebook): def AddPage(self, tabWnd=None, tabTitle="Empty Tab", tabImage=None): if tabWnd is None: - tabWnd = BlankPage(self) + tabWnd = gui.builtinViews.emptyView.BlankPage(self) tabWnd.handleDrag = lambda type, info: self.handleDrag(type, info) gui.chromeTabs.PFNotebook.AddPage(self, tabWnd, tabTitle, tabImage, True) @@ -47,10 +48,6 @@ class MultiSwitch(gui.chromeTabs.PFNotebook): if self.GetPageCount() == 0: self.AddPage() -class BlankPage(wx.Panel): - def __init__(self, parent): - wx.Panel.__init__(self, parent, size=(0, 0)) - class TabSpawner(object): tabTypes = [] @classmethod diff --git a/gui/projectedView.py b/gui/projectedView.py index 10a0c2291..bc53471e6 100644 --- a/gui/projectedView.py +++ b/gui/projectedView.py @@ -19,7 +19,7 @@ import wx import gui.display as d -import gui.builtinViews.fittingView as fv +import gui.globalEvents as GE import service import gui.droneView from gui.builtinViewColumns.state import State @@ -49,7 +49,7 @@ class ProjectedView(d.Display): def __init__(self, parent): d.Display.__init__(self, parent, style = wx.LC_SINGLE_SEL) - self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) + self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.Bind(wx.EVT_LEFT_DOWN, self.click) self.Bind(wx.EVT_RIGHT_DOWN, self.click) self.Bind(wx.EVT_LEFT_DCLICK, self.remove) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 455354e64..5375b74fa 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -2,7 +2,7 @@ import wx import copy from gui import bitmapLoader import gui.mainFrame -import gui.builtinViews.fittingView +import gui.globalEvents as GE import time from gui.PFListPane import PFListPane import service @@ -76,7 +76,7 @@ class ShipBrowser(wx.Panel): self.Bind(EVT_SB_STAGE3_SEL, self.stage3) self.Bind(EVT_SB_SEARCH_SEL, self.searchStage) - self.mainFrame.Bind(gui.builtinViews.fittingView.FIT_CHANGED, self.RefreshList) + self.mainFrame.Bind(GE.FIT_CHANGED, self.RefreshList) self.stage1(None) diff --git a/gui/statsPane.py b/gui/statsPane.py index 260a047c8..ac8a43ae2 100644 --- a/gui/statsPane.py +++ b/gui/statsPane.py @@ -23,8 +23,9 @@ import service from gui.pyfatogglepanel import TogglePanel import gui.builtinStatsViews from gui.contextMenu import ContextMenu -import gui.builtinViews.fittingView as fv +#import gui.builtinViews.fittingView as fv import gui.mainFrame +import gui.globalEvents as GE class StatsPane(wx.Panel): DEFAULT_VIEWS = ["resourcesViewFull", "resistancesViewFull" ,"rechargeViewFull", "firepowerViewFull", @@ -84,7 +85,7 @@ class StatsPane(wx.Panel): self.mainFrame = gui.mainFrame.MainFrame.getInstance() - self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) + self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) def contextHandler(self, contentPanel): viewName = contentPanel.viewName From 39f1665ef085466d4c672880bc552a65c0ae6352 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 20:13:53 +0200 Subject: [PATCH 12/22] Fixed an oopsie when closing a tab --- gui/chromeTabs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/chromeTabs.py b/gui/chromeTabs.py index 8fcc38da3..6083935bb 100644 --- a/gui/chromeTabs.py +++ b/gui/chromeTabs.py @@ -798,7 +798,7 @@ class PFTabsContainer(wx.Panel): self.DeleteTab(index) wx.PostEvent(self.Parent, PageClosed(index=index)) sel = self.GetSelected() - if sel: + if sel is not None: wx.PostEvent(self.Parent, PageChanged(-1, sel)) return True return False From 17bf3e25d692159180cbdd756056a4dad32b776f Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 20:52:03 +0200 Subject: [PATCH 13/22] Cleaned up pyfatogglepanel.py (removed useless comments / unused functions) --- gui/pyfatogglepanel.py | 84 ++++++------------------------------------ 1 file changed, 11 insertions(+), 73 deletions(-) diff --git a/gui/pyfatogglepanel.py b/gui/pyfatogglepanel.py index 565ca5c01..a8fd031f1 100644 --- a/gui/pyfatogglepanel.py +++ b/gui/pyfatogglepanel.py @@ -4,7 +4,7 @@ ## pyfatogllepanel.py ## ## Author: Darriele - HomeWorld -## Serial: 2010092801 (YYYYMMDDII) +## ## Project home: http://www.evefit.org - pyfa project ## http://www.evefit.org is the home for pyfa / eos / aurora ## Some portions of code are based on @@ -41,34 +41,24 @@ class TogglePanel ( wx.Panel ): self.forceLayout = forceLayout self.bkColour = self.GetBackgroundColour() -# Odd stuff :S -# self.SetBackgroundColour( self.bkColour ) - -# Create the main sizer of this panel + # Create the main sizer of this panel self.mainSizer = wx.BoxSizer( wx.VERTICAL ) self.SetSizer( self.mainSizer ) parentSize = parent.GetMinSize() -# Create the header panel + # Create the header panel self.headerPanel = wx.Panel(self) -# self.headerPanel.SetBackgroundColour( self.bkColour) - self.mainSizer.Add(self.headerPanel,0,wx.EXPAND | wx.TOP|wx.BOTTOM|wx.RIGHT, 1) -# Attempt to use native treeitembitmaps - fails on some linux distros / w.mangers -# self.bmpExpanded = self.GetNativeTreeItemBitmap("expanded") -# self.bmpCollapsed = self.GetNativeTreeItemBitmap("") -# - -# Load expanded/collapsed bitmaps from the icons folder + # Load expanded/collapsed bitmaps from the icons folder self.bmpExpanded = bitmapLoader.getBitmap("down-arrow2","icons") self.bmpCollapsed = bitmapLoader.getBitmap("up-arrow2","icons") -# Make the bitmaps have the same color as window text + # Make the bitmaps have the same color as window text sysTextColour = wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT ) @@ -80,12 +70,10 @@ class TogglePanel ( wx.Panel ): img.Replace(0, 0, 0, sysTextColour[0], sysTextColour[1], sysTextColour[2]) self.bmpCollapsed = wx.BitmapFromImage(img) -# Assign the bitmaps to the header static bitmap control - self.headerBmp = wx.StaticBitmap(self.headerPanel ) self.headerBmp.SetBitmap( self.bmpExpanded) -# Create the header sizer and append the static bitmap and static text controls + # Create the header sizer and add static bitmap and static text controls to it headerSizer = wx.BoxSizer( wx.HORIZONTAL ) self.headerPanel.SetSizer( headerSizer) @@ -103,14 +91,13 @@ class TogglePanel ( wx.Panel ): headerSizer.Add( hlblSizer, 0, wx.RIGHT, 5 ) headerSizer.Add( self.hcntSizer, 0, wx.RIGHT, 5) -# Set the static text font weight to BOLD + # Set the static text font weight to BOLD headerFont=parent.GetFont() headerFont.SetWeight(wx.BOLD) self.headerLabel.SetFont(headerFont) -# Create the content panel and its main sizer - + # Create the content panel and its main sizer self.contentSizer = wx.BoxSizer( wx.VERTICAL ) self.contentPanel = wx.Panel(self) @@ -121,25 +108,15 @@ class TogglePanel ( wx.Panel ): self.Layout() + # Connect Events - - # Connect Events self.headerLabel.Bind( wx.EVT_LEFT_UP, self.toggleContent ) self.headerBmp.Bind( wx.EVT_LEFT_UP, self.toggleContent ) self.headerPanel.Bind( wx.EVT_LEFT_UP, self.toggleContent ) -# self.Bind(wx.EVT_PAINT, self.OnPaint) -# self.headerPanel.Bind(wx.EVT_PAINT, self.OnPaint) -# self.contentPanel.Bind(wx.EVT_PAINT, self.OnPaint) - def __del__( self ): pass -# def OnPaint(self, event): -# self.contentPanel.Layout() -# self.headerPanel.Layout() -# event.Skip() - def AddToggleItem(self, hitem): hitem.Bind( wx.EVT_LEFT_UP, self.toggleContent ) @@ -148,9 +125,11 @@ class TogglePanel ( wx.Panel ): def GetHeaderPanel(self): return self.headerPanel + def InsertItemInHeader(self, item): self.hcntSizer.Add(item,0,0,0) self.Layout() + def AddSizer(self, sizer): self.contentSizer.Add(sizer, 0, wx.EXPAND | wx.ALL, 0) self.Layout() @@ -161,22 +140,6 @@ class TogglePanel ( wx.Panel ): def SetLabel(self, label): self.headerLabel.SetLabel(label) - def GetNativeTreeItemBitmap(self, mode): - - bitmap = wx.EmptyBitmap(24, 24) - dc = wx.MemoryDC() - dc.SelectObject(bitmap) - dc.SetBackground(wx.TheBrushList.FindOrCreateBrush(self.parent.GetBackgroundColour(), wx.SOLID)) - dc.Clear() - - wx.RendererNative.Get().DrawTreeItemButton(self, dc, wx.Rect(0, 0, 24, 24), wx.CONTROL_EXPANDED if mode == "expanded" else 0) - - dc.Destroy() - - return bitmap - - # Virtual event handlers, overide them in your derived class - def IsCollapsed(self): """ Returns ``True`` if the pane window is currently hidden. """ if self._toggle == 1: @@ -229,22 +192,17 @@ class TogglePanel ( wx.Panel ): self.parent.Fit() - - - # Toggle the content panel (hide/show) def toggleContent( self, event ): self.Freeze() if self._toggle == 1: -# self.contentPanel.Hide() self.contentMinSize = self.contentPanel.GetSize() self.contentPanel.SetMinSize(wx.Size(self.contentMinSize[0],0)) self.headerBmp.SetBitmap( self.bmpCollapsed) else: -# self.contentPanel.Show() self.contentPanel.SetMinSize(self.contentMinSize) self.headerBmp.SetBitmap( self.bmpExpanded) @@ -257,23 +215,3 @@ class TogglePanel ( wx.Panel ): self.OnStateChange(self.GetBestSize()) else: self.parent.Layout() - -# self.parent.Layout() - - - # Highlight stuff, not used for now - - def enterWindow( self, event ): - - self.headerPanel.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_HIGHLIGHT ) ) - self.headerPanel.Refresh() - - event.Skip() - - def leaveWindow( self, event ): - - self.headerPanel.SetBackgroundColour( self.bkColour ) - self.headerPanel.Refresh() - - event.Skip() - From a5b40dbac00519fe4ff7282c6fb47f9c195bf7b1 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 21:35:37 +0200 Subject: [PATCH 14/22] Send FIT_CHANGED event too when a fit is selected in shipbrowser and that fit is already present in multiSwitch --- gui/builtinViews/fittingView.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index 7d1909737..b70830c72 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -48,6 +48,7 @@ class FitSpawner(gui.multiSwitch.TabSpawner): if page.activeFitID == event.fitID: count +=1 self.multiSwitch.SetSelection(index) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=event.fitID)) break except: pass From bedebb94f508b03e85de0ea109533ca0bb98e825 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 22:16:51 +0200 Subject: [PATCH 15/22] Fixed some tracebacks in fittingView (forgot to change from FitChanged to GE.FitChanged in 2 loc.) --- gui/builtinViews/fittingView.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index b70830c72..9819fa283 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -191,7 +191,7 @@ class FittingView(d.Display): if populate is not None: self.Select(firstSel) if populate: self.slotsChanged() - wx.PostEvent(self.mainFrame, FitChanged(fitID=self.activeFitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.activeFitID)) event.Skip() @@ -369,7 +369,7 @@ class FittingView(d.Display): sFit = service.Fit.getInstance() fitID = self.mainFrame.getActiveFit() sFit.toggleModulesState(fitID, self.mods[self.GetItemData(row)], mods, "right" if event.Button == 3 else "left") - wx.PostEvent(self.mainFrame, FitChanged(fitID=self.mainFrame.getActiveFit())) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit())) else: event.Skip() From f3729f028728a3c12eaf42178a0d8c1c5cc1eb35 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 22:51:08 +0200 Subject: [PATCH 16/22] Updated FitChanged in all files --- gui/boosterView.py | 6 +++--- gui/builtinContextMenus/ammoPattern.py | 3 ++- gui/builtinContextMenus/damagePattern.py | 4 ++-- gui/builtinContextMenus/droneSplit.py | 4 ++-- gui/builtinContextMenus/factorReload.py | 4 ++-- gui/builtinContextMenus/moduleAmmoPicker.py | 4 ++-- gui/builtinContextMenus/project.py | 4 ++-- gui/characterEditor.py | 4 ++-- gui/droneView.py | 8 ++++---- gui/implantView.py | 9 ++++----- gui/projectedView.py | 8 ++++---- 11 files changed, 29 insertions(+), 29 deletions(-) diff --git a/gui/boosterView.py b/gui/boosterView.py index c86bc918e..a095e72a1 100644 --- a/gui/boosterView.py +++ b/gui/boosterView.py @@ -55,7 +55,7 @@ class BoosterView(d.Display): fitID = self.mainFrame.getActiveFit() trigger = cFit.addBooster(fitID, event.itemID) if trigger: - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) self.mainFrame.additionsPane.select("Boosters") event.Skip() @@ -66,7 +66,7 @@ class BoosterView(d.Display): fitID = self.mainFrame.getActiveFit() cFit = service.Fit.getInstance() cFit.removeBooster(fitID, self.GetItemData(row)) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def click(self, event): event.Skip() @@ -77,7 +77,7 @@ class BoosterView(d.Display): fitID = self.mainFrame.getActiveFit() cFit = service.Fit.getInstance() cFit.toggleBooster(fitID, row) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def scheduleMenu(self, event): diff --git a/gui/builtinContextMenus/ammoPattern.py b/gui/builtinContextMenus/ammoPattern.py index dcee923e5..dbccefc08 100644 --- a/gui/builtinContextMenus/ammoPattern.py +++ b/gui/builtinContextMenus/ammoPattern.py @@ -2,6 +2,7 @@ from gui.contextMenu import ContextMenu import gui.mainFrame import service import wx +import gui.globalEvents as GE from gui import bitmapLoader class AmmoPattern(ContextMenu): @@ -28,7 +29,7 @@ class AmmoPattern(ContextMenu): fit = self.mainFrame.getActiveFit() sFit = service.Fit.getInstance() sFit.setAsPattern(fit, item) - wx.PostEvent(self.mainFrame, gui.builtinViews.fittingView.FitChanged(fitID=fit)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fit)) def getBitmap(self, context, selection): return None diff --git a/gui/builtinContextMenus/damagePattern.py b/gui/builtinContextMenus/damagePattern.py index ff8e741eb..3e60fc662 100644 --- a/gui/builtinContextMenus/damagePattern.py +++ b/gui/builtinContextMenus/damagePattern.py @@ -1,7 +1,7 @@ from gui.contextMenu import ContextMenu import gui.mainFrame import service -import gui.builtinViews.fittingView +import gui.globalEvents as GE import wx from gui import bitmapLoader @@ -26,7 +26,7 @@ class DamagePattern(ContextMenu): fitID = self.mainFrame.getActiveFit() sFit.setDamagePattern(fitID, self.patterns[i]) setattr(self.mainFrame,"_activeDmgPattern",self.patterns[i]) - wx.PostEvent(self.mainFrame, gui.builtinViews.fittingView.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def getBitmap(self, context, selection): sFit = service.Fit.getInstance() diff --git a/gui/builtinContextMenus/droneSplit.py b/gui/builtinContextMenus/droneSplit.py index a48fd5023..c954d7964 100644 --- a/gui/builtinContextMenus/droneSplit.py +++ b/gui/builtinContextMenus/droneSplit.py @@ -1,7 +1,7 @@ from gui.contextMenu import ContextMenu from gui.itemStats import ItemStatsDialog import gui.mainFrame -import gui.builtinViews.fittingView +import gui.globalEvents import service import wx @@ -54,5 +54,5 @@ class DroneSpinner(wx.Dialog): sFit.splitDroneStack(fitID, self.drone, self.spinner.GetValue()) else: sFit.splitProjectedDroneStack(fitID, self.drone, self.spinner.GetValue()) - wx.PostEvent(mainFrame, gui.builtinViews.fittingView.FitChanged(fitID=fitID)) + wx.PostEvent(mainFrame, GE.FitChanged(fitID=fitID)) event.Skip() diff --git a/gui/builtinContextMenus/factorReload.py b/gui/builtinContextMenus/factorReload.py index fbf2ad0bf..7a033fc77 100644 --- a/gui/builtinContextMenus/factorReload.py +++ b/gui/builtinContextMenus/factorReload.py @@ -1,7 +1,7 @@ from gui.contextMenu import ContextMenu import gui.mainFrame import service -import gui.builtinViews.fittingView +import gui.globalEvents as GE import wx from gui import bitmapLoader @@ -19,7 +19,7 @@ class FactorReload(ContextMenu): sFit = service.Fit.getInstance() fitID = self.mainFrame.getActiveFit() sFit.toggleFactorReload(fitID) - wx.PostEvent(self.mainFrame, gui.builtinViews.fittingView.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def getBitmap(self, context, selection): sFit = service.Fit.getInstance() diff --git a/gui/builtinContextMenus/moduleAmmoPicker.py b/gui/builtinContextMenus/moduleAmmoPicker.py index 3b172b313..ed3e4fa93 100644 --- a/gui/builtinContextMenus/moduleAmmoPicker.py +++ b/gui/builtinContextMenus/moduleAmmoPicker.py @@ -4,7 +4,7 @@ import service import wx from gui import bitmapLoader from eos.types import Hardpoint -import gui.builtinViews.fittingView +import gui.globalEvents as GE class ModuleAmmoPicker(ContextMenu): def __init__(self): @@ -179,6 +179,6 @@ class ModuleAmmoPicker(ContextMenu): fitID = self.mainFrame.getActiveFit() sFit.setAmmo(fitID, charge.ID if charge is not None else None, self.modules) - wx.PostEvent(self.mainFrame, gui.builtinViews.fittingView.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) ModuleAmmoPicker.register() diff --git a/gui/builtinContextMenus/project.py b/gui/builtinContextMenus/project.py index ec9d5747c..8d8ee98cb 100644 --- a/gui/builtinContextMenus/project.py +++ b/gui/builtinContextMenus/project.py @@ -1,7 +1,7 @@ from gui.contextMenu import ContextMenu import gui.mainFrame import service -import gui.builtinViews.fittingView +import gui.globalEvents as GE import wx class Project(ContextMenu): @@ -22,6 +22,6 @@ class Project(ContextMenu): sFit = service.Fit.getInstance() fitID = self.mainFrame.getActiveFit() sFit.project(fitID, selection[0]) - wx.PostEvent(self.mainFrame, gui.builtinViews.fittingView.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) Project.register() diff --git a/gui/characterEditor.py b/gui/characterEditor.py index 351742d16..6590003d6 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -27,7 +27,7 @@ import service import gui.display as d from gui.contextMenu import ContextMenu import sys -import gui.builtinViews.fittingView as fv +import gui.globalEvents as GE CharListUpdated, CHAR_LIST_UPDATED = wx.lib.newevent.NewEvent() CharChanged, CHAR_CHANGED = wx.lib.newevent.NewEvent() @@ -247,7 +247,7 @@ class CharacterEditor(wx.Frame): fitID = self.mainFrame.getActiveFit() if fitID is not None: cFit.clearFit(fitID) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) wx.Frame.Destroy(self) diff --git a/gui/droneView.py b/gui/droneView.py index b21837fe9..592a8dff4 100644 --- a/gui/droneView.py +++ b/gui/droneView.py @@ -83,7 +83,7 @@ class DroneView(d.Display): sFit = service.Fit.getInstance() fitID = self.mainFrame.getActiveFit() if sFit.mergeDrones(fitID, self.drones[src], self.drones[dst]): - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) DRONE_ORDER = ('Light Scout Drones', 'Medium Scout Drones', 'Heavy Attack Drones', 'Sentry Drones', 'Fighters', @@ -115,7 +115,7 @@ class DroneView(d.Display): fitID = self.mainFrame.getActiveFit() trigger = cFit.addDrone(fitID, event.itemID) if trigger: - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) self.mainFrame.additionsPane.select("Drones") event.Skip() @@ -129,7 +129,7 @@ class DroneView(d.Display): cFit = service.Fit.getInstance() drone = self.drones[self.GetItemData(row)] cFit.removeDrone(fitID, self.original.index(drone)) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def click(self, event): event.Skip() @@ -141,7 +141,7 @@ class DroneView(d.Display): cFit = service.Fit.getInstance() drone = self.drones[row] cFit.toggleDrone(fitID, self.original.index(drone)) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def scheduleMenu(self, event): event.Skip() diff --git a/gui/implantView.py b/gui/implantView.py index c7eddcc34..89217f322 100644 --- a/gui/implantView.py +++ b/gui/implantView.py @@ -20,7 +20,6 @@ import wx import service import gui.display as d -import gui.builtinViews.fittingView as fv import gui.marketBrowser as mb from gui.builtinViewColumns.state import State from gui.contextMenu import ContextMenu @@ -51,7 +50,7 @@ class ImplantView(d.Display): if row != -1: cFit.removeImplant(fitID, self.GetItemData(row)) row = self.GetNextSelected(row) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def fitChanged(self, event): cFit = service.Fit.getInstance() @@ -69,7 +68,7 @@ class ImplantView(d.Display): fitID = self.mainFrame.getActiveFit() trigger = cFit.addImplant(fitID, event.itemID) if trigger: - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) self.mainFrame.additionsPane.select("Implants") event.Skip() @@ -81,7 +80,7 @@ class ImplantView(d.Display): cFit = service.Fit.getInstance() implant = self.implants[self.GetItemData(row)] cFit.removeImplant(fitID, self.original.index(implant)) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def click(self, event): event.Skip() @@ -92,7 +91,7 @@ class ImplantView(d.Display): fitID = self.mainFrame.getActiveFit() cFit = service.Fit.getInstance() cFit.toggleImplant(fitID, row) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def scheduleMenu(self, event): event.Skip() diff --git a/gui/projectedView.py b/gui/projectedView.py index bc53471e6..021958719 100644 --- a/gui/projectedView.py +++ b/gui/projectedView.py @@ -66,7 +66,7 @@ class ProjectedView(d.Display): sFit = service.Fit.getInstance() draggedFit = sFit.getFit(fitID) sFit.project(activeFit,draggedFit) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=activeFit)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=activeFit)) def startDrag(self, event): row = event.GetIndex() @@ -90,7 +90,7 @@ class ProjectedView(d.Display): sFit = service.Fit.getInstance() fitID = self.mainFrame.getActiveFit() if sFit.mergeDrones(fitID, self.get(src), dstDrone, True): - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) def moduleSort(self, module): @@ -148,7 +148,7 @@ class ProjectedView(d.Display): fitID = self.mainFrame.getActiveFit() cFit = service.Fit.getInstance() cFit.toggleProjected(fitID, item, "right" if event.Button == 3 else "left") - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) elif event.Button == 3: if isinstance(item, eos.types.Drone): context = ("projectedDrone",) @@ -172,4 +172,4 @@ class ProjectedView(d.Display): fitID = self.mainFrame.getActiveFit() cFit = service.Fit.getInstance() cFit.removeProjected(fitID, self.get(row)) - wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) From 5c2f3b00f662272ab5acc2db0dc65e3d7e44047d Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 23:00:01 +0200 Subject: [PATCH 17/22] Ommited by mistake import gui.globalEvents 'as GE' in droneSplit.py --- gui/builtinContextMenus/droneSplit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinContextMenus/droneSplit.py b/gui/builtinContextMenus/droneSplit.py index c954d7964..517760d82 100644 --- a/gui/builtinContextMenus/droneSplit.py +++ b/gui/builtinContextMenus/droneSplit.py @@ -1,7 +1,7 @@ from gui.contextMenu import ContextMenu from gui.itemStats import ItemStatsDialog import gui.mainFrame -import gui.globalEvents +import gui.globalEvents as GE import service import wx From a9bd89f5c5de31daf2efc73040820fbdfb8f5b33 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 28 Nov 2010 23:23:34 +0200 Subject: [PATCH 18/22] Fixed stats refresh when closing CharacterEditor, also properly re-enable all windows by deleting the WindowDisabler right before calling CharacterEditor.Destroy --- gui/characterEditor.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gui/characterEditor.py b/gui/characterEditor.py index 6590003d6..a43b4ae85 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -40,7 +40,7 @@ class CharacterEditor(wx.Frame): i = wx.IconFromBitmap(bitmapLoader.getBitmap("character_small", "icons")) self.SetIcon(i) - self.disableWin=wx.WindowDisabler(self) + self.disableWin= wx.WindowDisabler(self) self.SetSizeHintsSz(wx.Size(640, 600), wx.DefaultSize) self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) @@ -126,16 +126,18 @@ class CharacterEditor(wx.Frame): self.mainFrame = gui.mainFrame.MainFrame.getInstance() def editingFinished(self, event): + del self.disableWin wx.PostEvent(self.mainFrame, CharListUpdated()) self.Destroy() - event.Skip() def registerEvents(self): self.Bind(wx.EVT_CLOSE, self.closeEvent) self.skillTreeChoice.Bind(wx.EVT_CHOICE, self.charChanged) def closeEvent(self, event): - event.Skip() + del self.disableWin + wx.PostEvent(self.mainFrame, CharListUpdated()) + self.Destroy() def restrict(self): self.btnRename.Enable(False) From 9dd5c402d83c01500e5c28d91c14e580cbf8662a Mon Sep 17 00:00:00 2001 From: Corollax Date: Mon, 29 Nov 2010 00:53:53 -0600 Subject: [PATCH 19/22] Various refinements to tooltips Implemented a Probe Size tooltip for signature radius that gives the TargetSize. If it's < 1.08, you're unprobeable :) --- gui/builtinStatsViews/targetingMiscViewFull.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/gui/builtinStatsViews/targetingMiscViewFull.py b/gui/builtinStatsViews/targetingMiscViewFull.py index bbbbe83d4..0734a7f14 100644 --- a/gui/builtinStatsViews/targetingMiscViewFull.py +++ b/gui/builtinStatsViews/targetingMiscViewFull.py @@ -99,7 +99,7 @@ class TargetingMiscViewFull(StatsView): stats = (("labelTargets", lambda: fit.maxTargets, 3, 0, 0, ""), ("labelRange", lambda: fit.maxTargetRange / 1000, 3, 0, 0, "km"), - ("labelScanRes", lambda: fit.ship.getModifiedItemAttr('scanResolution'), 3, 0, 0, "mm"), + ("labelScanRes", lambda: fit.ship.getModifiedItemAttr("scanResolution"), 3, 0, 0, "mm"), ("labelSensorStr", lambda: fit.scanStrength, 3, 0, 0, ""), ("labelCtrlRange", lambda: fit.extraAttributes["droneControlRange"] / 1000, 3, 0, 0, "km"), ("labelFullSpeed", lambda: fit.ship.getModifiedItemAttr("maxVelocity"), 3, 0, 0, "m/s"), @@ -120,15 +120,20 @@ class TargetingMiscViewFull(StatsView): ("Destroyer", 83), ("Cruiser", 130), ("Battlecruiser", 265), ("Battleship",420)] if labelName is "labelScanRes": - lockTime = "%s\n" % "Lock Times".center(28) + lockTime = "%s\n" % "Lock Times".center(26) for size, radius in RADII: - left = "%s [%d] " % (size, radius) - right = "% .1fs" % fit.calculateLockTime(radius) - lockTime += "%s\t%s\n" % (right,left) + left = "%.1fs" % fit.calculateLockTime(radius) + right = "%s [%d]" % (size, radius) + lockTime += "%5s\t%s\n" % (left,right) # print lockTime # THIS IS ALIGNED! label.SetToolTip(wx.ToolTip(lockTime)) elif labelName is "labelSensorStr": label.SetToolTip(wx.ToolTip("Type: %s - %.1f" % (fit.scanType, value))) + elif labelName is "labelFullSigRadius": + pass + label.SetToolTip(wx.ToolTip("Probe Size: %.1f" % + ( float(fit.ship.getModifiedItemAttr("signatureRadius")) + / fit.ship.getModifiedItemAttr("scanResolution")) )) elif fit is not None: label.SetToolTip(wx.ToolTip("%.1f" % value)) self._cachedValues[counter] = value From 087aeab91f6865473f532efb9bf189486b40d3ed Mon Sep 17 00:00:00 2001 From: Corollax Date: Mon, 29 Nov 2010 01:18:40 -0600 Subject: [PATCH 20/22] Accidentally used scan res instead for Probe Size Swapped for sensor strength, as it should be. *facepalm* --- gui/builtinStatsViews/targetingMiscViewFull.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/gui/builtinStatsViews/targetingMiscViewFull.py b/gui/builtinStatsViews/targetingMiscViewFull.py index 0734a7f14..ec172e3e5 100644 --- a/gui/builtinStatsViews/targetingMiscViewFull.py +++ b/gui/builtinStatsViews/targetingMiscViewFull.py @@ -120,7 +120,7 @@ class TargetingMiscViewFull(StatsView): ("Destroyer", 83), ("Cruiser", 130), ("Battlecruiser", 265), ("Battleship",420)] if labelName is "labelScanRes": - lockTime = "%s\n" % "Lock Times".center(26) + lockTime = "%s\n" % "Lock Times".center(30) for size, radius in RADII: left = "%.1fs" % fit.calculateLockTime(radius) right = "%s [%d]" % (size, radius) @@ -130,10 +130,9 @@ class TargetingMiscViewFull(StatsView): elif labelName is "labelSensorStr": label.SetToolTip(wx.ToolTip("Type: %s - %.1f" % (fit.scanType, value))) elif labelName is "labelFullSigRadius": - pass - label.SetToolTip(wx.ToolTip("Probe Size: %.1f" % + label.SetToolTip(wx.ToolTip("Probe Size: %.3f" % ( float(fit.ship.getModifiedItemAttr("signatureRadius")) - / fit.ship.getModifiedItemAttr("scanResolution")) )) + / fit.scanStrength) )) elif fit is not None: label.SetToolTip(wx.ToolTip("%.1f" % value)) self._cachedValues[counter] = value From c93b4c9f4e347689540603a5abe241940d00f1f1 Mon Sep 17 00:00:00 2001 From: Corollax Date: Mon, 29 Nov 2010 02:44:07 -0600 Subject: [PATCH 21/22] Added tooltips for max warp dist and probe size Updated eos to include the new property functions that drive those tooltips. Also fixed an error on showing the ship stats attribute when an icon couldn't be found. --- eos | 2 +- gui/builtinStatsViews/targetingMiscViewFull.py | 7 ++++--- gui/itemStats.py | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/eos b/eos index 61bb6cf13..7cfbc8ff2 160000 --- a/eos +++ b/eos @@ -1 +1 @@ -Subproject commit 61bb6cf132acb549c5722d231ef7c21ac9058e9a +Subproject commit 7cfbc8ff29b43d8a029553d3e51cbe1fa22d294b diff --git a/gui/builtinStatsViews/targetingMiscViewFull.py b/gui/builtinStatsViews/targetingMiscViewFull.py index ec172e3e5..1c6f45eb3 100644 --- a/gui/builtinStatsViews/targetingMiscViewFull.py +++ b/gui/builtinStatsViews/targetingMiscViewFull.py @@ -130,9 +130,10 @@ class TargetingMiscViewFull(StatsView): elif labelName is "labelSensorStr": label.SetToolTip(wx.ToolTip("Type: %s - %.1f" % (fit.scanType, value))) elif labelName is "labelFullSigRadius": - label.SetToolTip(wx.ToolTip("Probe Size: %.3f" % - ( float(fit.ship.getModifiedItemAttr("signatureRadius")) - / fit.scanStrength) )) + label.SetToolTip(wx.ToolTip("Probe Size: %.3f" % fit.probeSize)) + elif labelName is "labelFullWarpSpeed": + label.SetToolTip(wx.ToolTip("Max Warp Distance: %.1f AU" % + fit.maxWarpDistance)) elif fit is not None: label.SetToolTip(wx.ToolTip("%.1f" % value)) self._cachedValues[counter] = value diff --git a/gui/itemStats.py b/gui/itemStats.py index 6890c9079..3aaab545e 100644 --- a/gui/itemStats.py +++ b/gui/itemStats.py @@ -569,7 +569,8 @@ class ItemAffectedBy (wx.Panel): if afflictorType == Ship: itemIcon = self.imageList.Add(bitmapLoader.getBitmap("ship_small", "icons")) elif baseAfflictor.item.icon: - itemIcon = self.imageList.Add(bitmapLoader.getBitmap(baseAfflictor.item.icon.iconFile, "pack")) + bitmap = bitmapLoader.getBitmap(baseAfflictor.item.icon.iconFile, "pack") + itemIcon = self.imageList.Add(bitmap) if bitmap else -1 else: itemIcon = -1 From 3a5face2a57ab5010f0b05f00bd28e74f9b18179 Mon Sep 17 00:00:00 2001 From: Corollax Date: Mon, 29 Nov 2010 03:01:57 -0600 Subject: [PATCH 22/22] Pulling in a fix to eos for tooltips --- eos | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eos b/eos index 7cfbc8ff2..996dbac73 160000 --- a/eos +++ b/eos @@ -1 +1 @@ -Subproject commit 7cfbc8ff29b43d8a029553d3e51cbe1fa22d294b +Subproject commit 996dbac731ee858a36d46379bd68cd2c9c4fe567