From 6bbcd84574dfe7c96d954dde2960d0140ba12d8c Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 16 Jan 2011 14:49:43 +0200 Subject: [PATCH 1/6] Changed fit backup busy animation --- gui/mainFrame.py | 20 ++--------- gui/utils/animUtils.py | 76 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 17 deletions(-) create mode 100644 gui/utils/animUtils.py diff --git a/gui/mainFrame.py b/gui/mainFrame.py index d22b2ed06..df6b751e4 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -451,8 +451,6 @@ class MainFrame(wx.Frame): saveDialog.Destroy() def closeWaitDialog(self): - if self.waitDialog.timer.IsRunning(): - self.waitDialog.timer.Stop() self.waitDialog.Destroy() def openGraphFrame(self, event): @@ -477,31 +475,19 @@ class MainFrame(wx.Frame): if not wnd: wnd = self InspectionTool().Show(wnd, True) - +import utils.animUtils as animUtils class WaitDialog(wx.Dialog): def __init__(self, parent): - wx.Dialog.__init__ (self, parent, id=wx.ID_ANY, title=u"Please wait ...", size=(200,30), + wx.Dialog.__init__ (self, parent, id=wx.ID_ANY, title=u"Please wait ...", size=(300,30), style=wx.NO_BORDER) mainSizer = wx.BoxSizer( wx.HORIZONTAL ) - self.progress = wx.Gauge( self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL | wx.GA_SMOOTH ) + self.progress = animUtils.LoadAnimation(self,label = "Processing", size=(300,30)) mainSizer.Add( self.progress, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 0 ) - self.progress.SetRange(20) - self.progress.SetValue(0) - self.cycle = 0 self.SetSizer( mainSizer ) self.Layout() - self.timer = wx.Timer(self,wx.ID_ANY) - self.timer.Start(100) self.Bind(wx.EVT_CLOSE,self.OnClose) - self.Bind(wx.EVT_TIMER,self.OnTimer) self.CenterOnParent() - def OnTimer(self, event): - self.cycle += 1 - if self.cycle > self.progress.GetRange(): - self.cycle = 0 - self.progress.SetValue(self.cycle) - def OnClose(self, event): pass diff --git a/gui/utils/animUtils.py b/gui/utils/animUtils.py new file mode 100644 index 000000000..a8e5265d7 --- /dev/null +++ b/gui/utils/animUtils.py @@ -0,0 +1,76 @@ +import wx +import gui.utils.colorUtils as colorUtils + +class LoadAnimation(wx.Window): + def __init__ (self, parent, id = wx.ID_ANY, label = "", pos = wx.DefaultPosition, size = wx.DefaultSize, style = 0): + wx.Window.__init__(self, parent, id, pos = pos, size = size, style = style) + + self.label = label + + self.animTimerId = wx.NewId() + self.animTimer = wx.Timer(self, self.animTimerId) + self.animTimerPeriod = 50 + + self.animCount = 0 + self.animDir = 1 + self.bars = 10 + self.padding = 2 + + + self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) + self.Bind(wx.EVT_TIMER, self.OnTimer) + self.Bind(wx.EVT_PAINT, self.OnPaint) + + self.animTimer.Start(self.animTimerPeriod) + + def OnTimer(self, event): + self.animCount += self.animDir + + if self.animCount >= self.bars: + self.animCount = self.bars - 1 + self.animDir = -1 + + if self.animCount < 0: + self.animCount = 0 + self.animDir = 1 + + self.Refresh() + + def OnEraseBackground(self, event): + pass + + def OnPaint(self, event): + rect = self.GetClientRect() + dc = wx.BufferedPaintDC(self) + windowColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW) + dc.SetBackground(wx.Brush(windowColor)) + dc.Clear() + + barColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOWTEXT) + shadeColor = colorUtils.GetSuitableColor(barColor, 0.75) + + barWidth = (rect.width) / self.bars + barHeight = rect.height - self.padding * 2 + + x = self.padding + + for bar in xrange(self.bars): + if bar != self.animCount: + dc.SetPen(wx.Pen(shadeColor)) + dc.SetBrush(wx.Brush(shadeColor)) + bh = barHeight + y = self.padding + else: + barColor = colorUtils.GetSuitableColor(barColor,float(self.animCount/2)/10) + dc.SetPen(wx.Pen(barColor)) + dc.SetBrush(wx.Brush(barColor)) + bh = rect.height + y = 0 + + dc.DrawRectangle(x, y, barWidth, bh) + x += barWidth + + textColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOWTEXT) + dc.SetTextForeground(textColor) + dc.DrawLabel(self.label,rect,wx.ALIGN_CENTER) + From 07d70c2cc7b082f94a1111aa0d12f77e11d9818f Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 16 Jan 2011 15:19:00 +0200 Subject: [PATCH 2/6] Added loading animation for shipbrowser stage 2 --- gui/shipBrowser.py | 22 ++++++++++++++++++++++ gui/utils/animUtils.py | 10 ++++++++++ 2 files changed, 32 insertions(+) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 66a54a6a8..57c28e8f3 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -11,6 +11,7 @@ from wx.lib.buttons import GenBitmapButton import gui.utils.colorUtils as colorUtils import gui.utils.drawUtils as drawUtils +import gui.utils.animUtils as animUtils import gui.sfBrowserItem as SFItem FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() @@ -26,6 +27,23 @@ class PFWidgetsContainer(PFListPane): def __init__(self,parent): PFListPane.__init__(self,parent) + self.anim = animUtils.LoadAnimation(self,label = "", size=(100,12)) + self.anim.Stop() + self.anim.Show(False) + + def ShowLoading(self, mode = True): + if mode: + aweight,aheight = self.anim.GetSize() + cweight,cheight = self.GetSize() + ax = (cweight - aweight)/2 + ay = (cheight - aheight)/2 + self.anim.SetPosition((ax,ay)) + self.anim.Show() + self.anim.Play() + else: + self.anim.Stop() + self.anim.Show(False) + def IsWidgetSelectedByContext(self, widget): mainFrame = gui.mainFrame.MainFrame.getInstance() stage = self.Parent.GetActiveStage() @@ -162,6 +180,7 @@ class ShipBrowser(wx.Panel): else: self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race)) + self.lpane.ShowLoading(False) self.lpane.RefreshList() def stage2(self, event): @@ -175,6 +194,9 @@ class ShipBrowser(wx.Panel): self.lpane.RemoveAllChildren() + + self.lpane.ShowLoading() + sMarket = service.Market.getInstance() sMarket.getShipListDelayed(self.stage2Callback, categoryID) diff --git a/gui/utils/animUtils.py b/gui/utils/animUtils.py index a8e5265d7..c225d0b13 100644 --- a/gui/utils/animUtils.py +++ b/gui/utils/animUtils.py @@ -23,6 +23,16 @@ class LoadAnimation(wx.Window): self.animTimer.Start(self.animTimerPeriod) + def Play(self): + if self.animTimer.IsRunning(): + self.animTimer.Stop() + self.animCount = 0 + self.animTimer.Start(self.animTimerPeriod) + + def Stop(self): + if self.animTimer.IsRunning(): + self.animTimer.Stop() + def OnTimer(self, event): self.animCount += self.animDir From d27c600257d428f31322bb67eb08e83dfc55a16c Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 16 Jan 2011 15:26:31 +0200 Subject: [PATCH 3/6] Minor cleanup in gui.mainframe --- gui/chromeTabs.py | 1 + gui/mainFrame.py | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/gui/chromeTabs.py b/gui/chromeTabs.py index dde1648c1..c80272510 100644 --- a/gui/chromeTabs.py +++ b/gui/chromeTabs.py @@ -9,6 +9,7 @@ # --------------------------------------------------------------------------------- # import wx +import wx.lib.newevent import copy import time import gui.utils.colorUtils as colorUtils diff --git a/gui/mainFrame.py b/gui/mainFrame.py index df6b751e4..35339c98e 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -18,11 +18,21 @@ #=============================================================================== import sys +import os.path + import sqlalchemy import wx +from wx._core import PyDeadObjectError +from wx.lib.wordwrap import wordwrap + import service import config + +import gui.aboutData +import gui.chromeTabs +import gui.utils.animUtils as animUtils + from gui import bitmapLoader from gui.mainMenuBar import MainMenuBar from gui.additionsPane import AdditionsPane @@ -30,20 +40,15 @@ from gui.marketBrowser import MarketBrowser from gui.multiSwitch import MultiSwitch from gui.statsPane import StatsPane from gui.shipBrowser import ShipBrowser, FitSelected -from wx.lib.wordwrap import wordwrap from gui.characterEditor import CharacterEditor from gui.characterSelection import CharacterSelection from gui.patternEditor import DmgPatternEditorDlg from gui.preferenceDialog import PreferenceDialog from gui.graphFrame import GraphFrame from gui.copySelectDialog import CopySelectDialog -import gui.aboutData -from wx._core import PyDeadObjectError -import os.path -import gui.chromeTabs from gui.utils.clipboard import toClipboard, fromClipboard -from builtinViews import * from gui.fleetBrowser import FleetBrowser +from builtinViews import * #dummy panel no paint no erasebk class PFPanel(wx.Panel): @@ -475,7 +480,8 @@ class MainFrame(wx.Frame): if not wnd: wnd = self InspectionTool().Show(wnd, True) -import utils.animUtils as animUtils + + class WaitDialog(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__ (self, parent, id=wx.ID_ANY, title=u"Please wait ...", size=(300,30), From cb207cbe17e4a36af7698c86ba5efbf9ce358311 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 16 Jan 2011 16:44:36 +0200 Subject: [PATCH 4/6] Rewriten fleet browser item --- gui/fleetBrowser.py | 354 +++++++++++++------------------------------- 1 file changed, 105 insertions(+), 249 deletions(-) diff --git a/gui/fleetBrowser.py b/gui/fleetBrowser.py index 5fc5cd95c..34d2cd6a4 100644 --- a/gui/fleetBrowser.py +++ b/gui/fleetBrowser.py @@ -8,6 +8,11 @@ from gui.utils.drawUtils import GetPartialText from wx.lib.buttons import GenBitmapButton +import gui.utils.colorUtils as colorUtils +import gui.utils.drawUtils as drawUtils + +import gui.sfBrowserItem as SFItem + FleetSelected, EVT_FLEET_SELECTED = wx.lib.newevent.NewEvent() FleetItemSelect, EVT_FLEET_ITEM_SELECT = wx.lib.newevent.NewEvent() @@ -96,6 +101,7 @@ class FleetBrowser(wx.Panel): widget = self.fleetItemContainer.GetWidgetByFleetID(ID) self.fleetItemContainer.RefreshList(True) self.fleetItemContainer.ScrollChildIntoView(widget) + wx.PostEvent(self, FleetItemSelect(fleetID = ID)) def PopulateFleetList(self): self.Freeze() @@ -234,31 +240,22 @@ class PFFleetItemContainer(PFListPane): def OnLeftUp(self, event): event.Skip() -class FleetItem(wx.Window): +class FleetItem(SFItem.SFBrowserItem): def __init__(self, parent, fleetID, fleetName, fleetCount, id=wx.ID_ANY, pos=wx.DefaultPosition, - size=(0,32), style=0): - wx.Window.__init__(self, parent, id, pos, size, style) + size=(0,40), style=0): + SFItem.SFBrowserItem.__init__(self, parent, size = size) -# self.mainFrame = gui.mainFrame.MainFrame.getInstance() -# self.fleetBrowser = self.mainFrame.fleetBrowser -# print self.fleetBrowser self.fleetBrowser = self.Parent self.fleetID = fleetID self.fleetName = fleetName self.fleetCount = fleetCount - self.highlighted = 0 - self.buttonsTip = "" - self.selected = False - self.padding = 5 - self.editHasFocus = False - - self.cleanupTimer = None - self.cleanupTimerId = wx.NewId() + self.padding = 4 self.fontBig = wx.FontFromPixelSize((0,15),wx.SWISS, wx.NORMAL, wx.BOLD, False) - self.fontSmall = wx.FontFromPixelSize((0,13),wx.SWISS, wx.NORMAL, wx.NORMAL, False) + self.fontNormal = wx.FontFromPixelSize((0,14),wx.SWISS, wx.NORMAL, wx.NORMAL, False) + self.fontSmall = wx.FontFromPixelSize((0,12),wx.SWISS, wx.NORMAL, wx.NORMAL, False) self.copyBmp = bitmapLoader.getBitmap("fit_add_small", "icons") self.renameBmp = bitmapLoader.getBitmap("fit_rename_small", "icons") @@ -266,29 +263,18 @@ class FleetItem(wx.Window): self.acceptBmp = bitmapLoader.getBitmap("faccept_small", "icons") self.fleetBmp = bitmapLoader.getBitmap("fleet_item_big", "icons") - self.copyBmpGrey = self.GreyBitmap(self.copyBmp) - self.renameBmpGrey = self.GreyBitmap(self.renameBmp) - self.deleteBmpGrey = self.GreyBitmap(self.deleteBmp) - self.acceptBmpGrey = self.GreyBitmap(self.acceptBmp) + fleetImg = self.fleetBmp.ConvertToImage() + fleetImg = fleetImg.Blur(2) - self.btnSize = (18,18) + if not fleetImg.HasAlpha(): + fleetImg.InitAlpha() - if 'wxMac' in wx.PlatformInfo: - self.btnbgcolour = wx.Colour(0, 0, 0, 0) - else: - self.btnbgcolour = wx.SystemSettings.GetColour( wx.SYS_COLOUR_3DFACE) + fleetImg = fleetImg.AdjustChannels(1, 1, 1, 0.5) + self.fleetEffBmp = wx.BitmapFromImage(fleetImg) - self.btnCopy = PFGenBitmapButton( self, wx.ID_ANY, self.copyBmp, wx.DefaultPosition, self.btnSize, wx.BORDER_NONE ) - self.btnCopy.Show(False) - self.btnCopy.SetBackgroundColour( self.btnbgcolour ) - - self.btnRename = PFGenBitmapButton( self, wx.ID_ANY, self.renameBmp, wx.DefaultPosition, self.btnSize, wx.BORDER_NONE ) - self.btnRename.Show(False) - self.btnRename.SetBackgroundColour( self.btnbgcolour ) - - self.btnDelete = PFGenBitmapButton( self, wx.ID_ANY, self.deleteBmp, wx.DefaultPosition, self.btnSize, wx.BORDER_NONE ) - self.btnDelete.Show(False) - self.btnDelete.SetBackgroundColour( self.btnbgcolour ) + self.toolbar.AddButton(self.copyBmp, "Copy", self.CopyFleetCB) + self.toolbar.AddButton(self.renameBmp, "Rename", self.RenameFleetCB) + self.toolbar.AddButton(self.deleteBmp, "Delete", self.DeleteFleetCB) self.editWidth = 150 self.tcFleetName = wx.TextCtrl(self, wx.ID_ANY, "%s" % self.fleetName, wx.DefaultPosition, (self.editWidth,-1), wx.TE_PROCESS_ENTER) @@ -298,270 +284,140 @@ class FleetItem(wx.Window): else: self.tcFleetName.SetFocus() self.tcFleetName.SelectAll() - self.btnRename.SetBitmapLabel(self.acceptBmp, False) - self.editHasFocus = True self.fleetBrowser.fleetIDMustEditName = -1 - - self.Bind(wx.EVT_PAINT, self.OnPaint) - self.Bind(wx.EVT_ERASE_BACKGROUND, lambda event: None) - - self.Bind(wx.EVT_LEAVE_WINDOW, self.LeaveWindow) - self.Bind(wx.EVT_ENTER_WINDOW, self.EnterWindow) - self.Bind(wx.EVT_LEFT_UP, self.OnSelect) - - self.btnCopy.Bind(wx.EVT_ENTER_WINDOW, self.OnBtnEnterWindow) - self.btnRename.Bind(wx.EVT_ENTER_WINDOW, self.OnBtnEnterWindow) - self.btnDelete.Bind(wx.EVT_ENTER_WINDOW, self.OnBtnEnterWindow) - - self.btnDelete.Bind(wx.EVT_BUTTON, self.OnDeleteBtn) - self.btnCopy.Bind(wx.EVT_BUTTON, self.OnCopyBtn) - self.btnRename.Bind(wx.EVT_BUTTON, self.OnRenameBtn) + self.selected = True self.tcFleetName.Bind(wx.EVT_KILL_FOCUS, self.OnEditLostFocus) - self.tcFleetName.Bind(wx.EVT_TEXT_ENTER, self.RenameFit) + self.tcFleetName.Bind(wx.EVT_TEXT_ENTER, self.RenameFleet) self.tcFleetName.Bind(wx.EVT_KEY_DOWN, self.EditCheckEsc) - self.Bind(wx.EVT_TIMER, self.OnTimer) - def OnSelect(self, event): - if self.editHasFocus: - self.HideEdit() + self.animCount = 0 + + def MouseLeftUp(self, event): + if self.tcFleetName.IsShown(): + self.tcFleetName.Show(False) else: wx.PostEvent(self.fleetBrowser, FleetItemSelect(fleetID = self.fleetID)) - event.Skip() - def OnRenameBtn(self, event): + def CopyFleetCB(self): + wx.PostEvent(self.fleetBrowser, FleetItemCopy(fleetID = self.fleetID)) + + def RenameFleetCB(self): + if self.tcFleetName.IsShown(): - self.HideEdit() - self.btnRename.SetBitmapLabel(self.renameBmp, False) - self.RenameFit(None) + self.tcFleetName.Show(False) + self.RenameFleet(None) else: - if not self.editHasFocus: - self.btnRename.SetBitmapLabel(self.acceptBmp,False) - self.tcFleetName.Show(True) - self.tcFleetName.SetFocus() - self.tcFleetName.SelectAll() - self.editHasFocus = True - event.Skip() + self.tcFleetName.SetValue(self.fleetName) + self.tcFleetName.Show() - def OnDeleteBtn(self, event): - if self.editHasFocus: - self.HideEdit() - else: - wx.PostEvent(self.fleetBrowser, FleetItemDelete(fleetID = self.fleetID)) - event.Skip() + self.tcFleetName.SetFocus() + self.tcFleetName.SelectAll() - def OnCopyBtn(self, event): - if self.editHasFocus: - self.HideEdit() - else: - wx.PostEvent(self.fleetBrowser, FleetItemCopy(fleetID = self.fleetID)) - event.Skip() + self.Refresh() - def RenameFit(self, event): - self.HideEdit() + def RenameFleet(self, event): newFleetName = self.tcFleetName.GetValue() self.fleetName = newFleetName + self.tcFleetName.Show(False) + wx.PostEvent(self.fleetBrowser, FleetItemRename(fleetID = self.fleetID, fleetName = self.fleetName)) self.Refresh() + def DeleteFleetCB(self): + wx.PostEvent(self.fleetBrowser, FleetItemDelete(fleetID = self.fleetID)) + + def OnEditLostFocus(self, event): + self.tcFleetName.Show(False) + self.Refresh() + + def EditCheckEsc(self, event): + if event.GetKeyCode() == wx.WXK_ESCAPE: + self.tcFleetName.Show(False) + else: + event.Skip() + def IsSelected(self): return self.selected - def SetSelected(self, state = True): - self.selected = state - - def OnPaint(self, event): + def UpdateElementsPos(self, mdc): rect = self.GetRect() - #Bitmap for our buffered DC - canvas = wx.EmptyBitmap(rect.width, rect.height) + self.toolbarx = rect.width - self.toolbar.GetWidth() - self.padding + self.toolbary = (rect.height - self.toolbar.GetHeight()) / 2 - #Buffered DC - bdc = wx.BufferedPaintDC(self) - bdc.SelectObject(canvas) + self.toolbarx = self.toolbarx + self.animCount - #gradient rect - clear the window - grect = copy.copy(rect) - grect.top = grect.left = 0 + self.fleetBmpx = self.padding + (rect.height - self.fleetBmp.GetWidth()) / 2 + self.fleetBmpy = (rect.height - self.fleetBmp.GetHeight()) / 2 - grect.height = grect.height / 2 + self.fleetBmpx -= self.animCount - if self.highlighted: + self.textStartx = self.fleetBmpx + self.fleetBmp.GetWidth() + self.padding - sr = 221 - sg = 221 - sb = 221 + self.fleetNamey = (rect.height - self.fleetBmp.GetHeight()) / 2 - startColor = (sr,sg,sb) + mdc.SetFont(self.fontBig) + wtext, htext = mdc.GetTextExtent(self.fleetName) - bdc.GradientFillLinear(grect, startColor, wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.SOUTH) - grect.top = grect.height - bdc.GradientFillLinear(grect, startColor, wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) - bdc.SetTextForeground(wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT )) + self.fleetCounty = self.fleetNamey + htext - else: - if self.selected: - bkcolor = wx.Colour(221,221,221) - else: - bkcolor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW) + mdc.SetFont(self.fontSmall) - bdc.SetBackground(wx.Brush(bkcolor)) - bdc.SetTextForeground(wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT )) - bdc.Clear() + wlabel,hlabel = mdc.GetTextExtent(self.toolbar.hoverLabel) + + self.thoverx = self.toolbarx - self.padding - wlabel + self.thovery = (rect.height - hlabel)/2 + self.thoverw = wlabel + + def DrawItem(self, mdc): + rect = self.GetRect() + + windowColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW) + textColor = colorUtils.GetSuitableColor(windowColor, 1) + + mdc.SetTextForeground(textColor) + + self.UpdateElementsPos(mdc) + + self.toolbar.SetPosition((self.toolbarx, self.toolbary)) + mdc.DrawBitmap(self.fleetEffBmp, self.fleetBmpx + 3, self.fleetBmpy + 2) + mdc.DrawBitmap(self.fleetBmp, self.fleetBmpx,self.fleetBmpy) + + mdc.SetFont(self.fontNormal) - bdc.DrawBitmap(self.fleetBmp, 0, (rect.height - self.fleetBmp.GetHeight())/2) - textStart = self.padding + self.fleetBmp.GetWidth() suffix = "%d ships" % self.fleetCount if self.fleetCount >1 else "%d ship" % self.fleetCount if self.fleetCount == 1 else "No ships" fleetCount = "Fleet size: %s" % suffix + fleetCount = drawUtils.GetPartialText(mdc, fleetCount, self.toolbarx - self.textStartx - self.padding * 2 - self.thoverw) - btnWidth,btnHeight = self.btnSize - self.deletePosX = rect.width - btnWidth - self.padding - self.renamePosX = self.deletePosX - btnWidth - # - self.padding - self.copyPosX = self.renamePosX - btnWidth - # - self.padding - self.renamePosY = self.deletePosY = self.copyPosY = (rect.height - btnHeight) / 2 + mdc.DrawText(fleetCount, self.textStartx, self.fleetCounty) - bdc.SetFont(self.fontSmall) - tx,ty = bdc.GetTextExtent(self.buttonsTip) + mdc.SetFont(self.fontSmall) + mdc.DrawText(self.toolbar.hoverLabel, self.thoverx, self.thovery) - bdc.SetFont(self.fontBig) - fnx,fny = bdc.GetTextExtent(self.fleetName) - pfn = GetPartialText(bdc, self.fleetName, self.copyPosX - 16 - self.padding - tx - textStart) - bdc.DrawText(pfn, textStart, (rect.height/2 - fny) / 2) + mdc.SetFont(self.fontBig) - bdc.SetFont(self.fontSmall) - fcx,fcy = bdc.GetTextExtent(fleetCount) - pfc = GetPartialText(bdc, fleetCount, self.copyPosX - 16 - self.padding - tx - textStart) - bdc.DrawText(pfc, textStart, rect.height/2 + (rect.height/2 -fcy) / 2 ) + pfname = drawUtils.GetPartialText(mdc, self.fleetName, self.toolbarx - self.textStartx - self.padding * 2 - self.thoverw) + mdc.DrawText(pfname, self.textStartx, self.fleetNamey) - bdc.SetFont(self.fontSmall) + if self.tcFleetName.IsShown(): + self.AdjustControlSizePos(self.tcFleetName, self.textStartx, self.toolbarx - self.editWidth - self.padding) - if self.highlighted: - brush = wx.Brush(self.btnbgcolour) - pen = wx.Pen(self.btnbgcolour) - - bdc.SetPen(pen) - bdc.SetBrush(brush) - - bdc.DrawRoundedRectangle(self.copyPosX - 8 - tx - self.padding, self.copyPosY-1, rect.width,20, 8) - bdc.DrawText(self.buttonsTip,self.copyPosX - tx - self.padding, self.copyPosY + 8 - ty/2) - - self.btnCopy.SetPosition((self.copyPosX, self.copyPosY)) - self.btnRename.SetPosition((self.renamePosX, self.renamePosY)) - self.btnDelete.SetPosition((self.deletePosX, self.deletePosY)) - - self.btnCopy.Show() - self.btnRename.Show() - self.btnDelete.Show() - - else: - self.btnCopy.Show(False) - self.btnRename.Show(False) - self.btnDelete.Show(False) - - bdc.DrawBitmap(self.copyBmpGrey, self.copyPosX + 1, self.copyPosY + 1 ) - - if self.editHasFocus: - bdc.DrawBitmap(self.acceptBmpGrey, self.renamePosX + 1, self.renamePosY + 1 ) - else: - bdc.DrawBitmap(self.renameBmpGrey, self.renamePosX + 1, self.renamePosY + 1 ) - - bdc.DrawBitmap(self.deleteBmpGrey, self.deletePosX + 1, self.deletePosY + 1 ) - - - self.AdjustFleetNameEditSize(textStart, self.copyPosX - self.editWidth - self.padding) - - def AdjustFleetNameEditSize(self, start,end): - fnEditSize = self.tcFleetName.GetSize() + def AdjustControlSizePos(self, editCtl, start, end): + fnEditSize = editCtl.GetSize() wSize = self.GetSize() fnEditPosX = end fnEditPosY = (wSize.height - fnEditSize.height)/2 if fnEditPosX < start: - self.tcFleetName.SetSize((self.editWidth + fnEditPosX - start,-1)) - self.tcFleetName.SetPosition((start,fnEditPosY)) + editCtl.SetSize((self.editWidth + fnEditPosX - start,-1)) + editCtl.SetPosition((start,fnEditPosY)) else: - self.tcFleetName.SetSize((self.editWidth,-1)) - self.tcFleetName.SetPosition((fnEditPosX,fnEditPosY)) + editCtl.SetSize((self.editWidth,-1)) + editCtl.SetPosition((fnEditPosX,fnEditPosY)) - def OnEditLostFocus(self, event): - if self.highlighted == 1: - self.editHasFocus = True - else: - self.HideEdit() - event.Skip() - - def EditCheckEsc(self, event): - if event.GetKeyCode() == wx.WXK_ESCAPE: - self.HideEdit() - else: - event.Skip() - - def HideEdit(self): - self.tcFleetName.Show(False) - self.editHasFocus = False - self.btnRename.SetBitmapLabel(self.renameBmp, False) - self.Refresh() - - - def OnBtnEnterWindow(self, event): - btn = event.GetEventObject() - if btn == self.btnCopy: - self.buttonsTip = "Copy Fleet" - elif btn == self.btnDelete: - self.buttonsTip = "Delete Fleet" - elif btn == self.btnRename: - self.buttonsTip = "Rename Fleet" - else: - self.buttonsTip = "" - self.Refresh() - event.Skip() - - - def EnterWindow(self, event): - if not self.cleanupTimer: - self.cleanupTimer = wx.Timer(self, self.cleanupTimerId) - if not self.cleanupTimer.IsRunning(): - self.cleanupTimer.Start(50) - - self.highlighted = 1 - self.buttonsTip = "" - self.Refresh() - event.Skip() - - def LeaveWindow(self, event): - mposx, mposy = wx.GetMousePosition() - rect = self.GetRect() - rect.top = rect.left = 0 - cx,cy = self.ScreenToClient((mposx,mposy)) - if not rect.Contains((cx,cy)): - self.highlighted = 0 - self.Refresh() - if self.cleanupTimer: - if self.cleanupTimer.IsRunning(): - self.cleanupTimer.Stop() - - event.Skip() - - def OnTimer(self, event): - if event.GetId() == self.cleanupTimerId: - mposx, mposy = wx.GetMousePosition() - rect = self.GetRect() - rect.top = rect.left = 0 - cx,cy = self.ScreenToClient((mposx,mposy)) - if not rect.Contains((cx,cy)): - self.highlighted = 0 - self.Refresh() - self.cleanupTimer.Stop() - event.Skip() - - def GreyBitmap(self, bitmap): - img = bitmap.ConvertToImage() - img = img.ConvertToGreyscale() - return wx.BitmapFromImage(img) class PFGenBitmapButton(GenBitmapButton): def __init__(self, parent, id, bitmap, pos, size, style): From e1a6861944dc8d214ac0bc5f2ca2c3a9f34c01a8 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 16 Jan 2011 17:06:32 +0200 Subject: [PATCH 5/6] Added tab img for fleet view --- gui/builtinViews/fleetView.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gui/builtinViews/fleetView.py b/gui/builtinViews/fleetView.py index cda729d5c..1fab389c5 100644 --- a/gui/builtinViews/fleetView.py +++ b/gui/builtinViews/fleetView.py @@ -44,12 +44,13 @@ class FleetView(wx.gizmos.TreeListCtrl): data = self.GetPyData(event.Item) if data and isinstance(data, tuple) and data[0] == "add": layer = data[1] - + def populate(self, fleetID): sFleet = service.Fleet.getInstance() f = sFleet.getFleetByID(fleetID) - self.tabManager.SetPageTextIcon(self.tabManager.GetSelection(), f.name) + fleetBmp = bitmapLoader.getImage("53_16", "pack") + self.tabManager.SetPageTextIcon(self.tabManager.GetSelection(), f.name, fleetBmp) self.fleet = f self.DeleteAllItems() root = self.AddRoot("") From 4199b167952ec3e115cb08f4d0732ee4940884c1 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Sun, 16 Jan 2011 17:56:54 +0200 Subject: [PATCH 6/6] Connected FleetRemoved/Renamed events in fleetviewer --- gui/builtinViews/fleetView.py | 35 +++++++++++++++++++++++++++++++++-- gui/fleetBrowser.py | 12 ++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/gui/builtinViews/fleetView.py b/gui/builtinViews/fleetView.py index 1fab389c5..fa9916d63 100644 --- a/gui/builtinViews/fleetView.py +++ b/gui/builtinViews/fleetView.py @@ -26,6 +26,10 @@ class FleetView(wx.gizmos.TreeListCtrl): wx.gizmos.TreeListCtrl.__init__(self, parent, size = size) self.tabManager = parent + + self.fleetId = None + self.fleetImg = bitmapLoader.getImage("53_16", "pack") + self.imageList = wx.ImageList(16, 16) self.SetImageList(self.imageList) @@ -39,6 +43,29 @@ class FleetView(wx.gizmos.TreeListCtrl): self.icons[icon] = self.imageList.Add(bitmapLoader.getBitmap("fleet_%s_small" % icon, "icons")) self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.checkNew) + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + self.mainFrame.Bind(gui.fleetBrowser.EVT_FLEET_RENAMED, self.fleetRenamed) + self.mainFrame.Bind(gui.fleetBrowser.EVT_FLEET_REMOVED, self.fleetRemoved) + + def Destroy(self): + self.mainFrame.Unbind(gui.fleetBrowser.EVT_FLEET_REMOVED, handler = self.fleetRemoved) + self.mainFrame.Unbind(gui.fleetBrowser.EVT_FLEET_RENAMED, handler = self.fleetRenamed) + wx.gizmos.TreeListCtrl.Destroy(self) + + def fleetRenamed(self, event): + if event.fleetID == self.fleetId: + sFleet = service.Fleet.getInstance() + f = sFleet.getFleetByID(event.fleetID) + self.UpdateTab(f.name, self.fleetImg) + + event.Skip() + + def fleetRemoved(self, event): + if event.fleetID == self.fleetId: + self.tabManager.DeletePage(self.tabManager.GetPageIndex(self)) + + event.Skip() def checkNew(self, event): data = self.GetPyData(event.Item) @@ -46,11 +73,15 @@ class FleetView(wx.gizmos.TreeListCtrl): layer = data[1] + def UpdateTab(self, name, img): + self.tabManager.SetPageTextIcon(self.tabManager.GetSelection(), name, img) + def populate(self, fleetID): sFleet = service.Fleet.getInstance() f = sFleet.getFleetByID(fleetID) - fleetBmp = bitmapLoader.getImage("53_16", "pack") - self.tabManager.SetPageTextIcon(self.tabManager.GetSelection(), f.name, fleetBmp) + self.fleetId = fleetID + + self.UpdateTab( f.name, self.fleetImg) self.fleet = f self.DeleteAllItems() root = self.AddRoot("") diff --git a/gui/fleetBrowser.py b/gui/fleetBrowser.py index 34d2cd6a4..b081096f1 100644 --- a/gui/fleetBrowser.py +++ b/gui/fleetBrowser.py @@ -14,6 +14,9 @@ import gui.utils.drawUtils as drawUtils import gui.sfBrowserItem as SFItem FleetSelected, EVT_FLEET_SELECTED = wx.lib.newevent.NewEvent() +FleetRenamed, EVT_FLEET_RENAMED = wx.lib.newevent.NewEvent() +FleetRemoved, EVT_FLEET_REMOVED = wx.lib.newevent.NewEvent() + FleetItemSelect, EVT_FLEET_ITEM_SELECT = wx.lib.newevent.NewEvent() FleetItemDelete, EVT_FLEET_ITEM_DELETE = wx.lib.newevent.NewEvent() @@ -91,10 +94,12 @@ class FleetBrowser(wx.Panel): newFleetName = event.fleetName self.sFleet.renameFleet(fleet, newFleetName) + wx.PostEvent(self.mainFrame, FleetRenamed(fleetID = fleet.ID)) def DeleteFleetItem(self, event): self.sFleet.deleteFleetByID(event.fleetID) self.PopulateFleetList() + wx.PostEvent(self.mainFrame, FleetRemoved(fleetID = event.fleetID)) def AddItem (self, ID, name, count): self.fleetItemContainer.AddWidget(FleetItem(self, ID, name, count)) @@ -301,6 +306,10 @@ class FleetItem(SFItem.SFBrowserItem): wx.PostEvent(self.fleetBrowser, FleetItemSelect(fleetID = self.fleetID)) def CopyFleetCB(self): + if self.tcFleetName.IsShown(): + self.tcFleetName.Show(False) + return + wx.PostEvent(self.fleetBrowser, FleetItemCopy(fleetID = self.fleetID)) def RenameFleetCB(self): @@ -328,6 +337,9 @@ class FleetItem(SFItem.SFBrowserItem): self.Refresh() def DeleteFleetCB(self): + if self.tcFleetName.IsShown(): + self.tcFleetName.Show(False) + return wx.PostEvent(self.fleetBrowser, FleetItemDelete(fleetID = self.fleetID)) def OnEditLostFocus(self, event):