Merge branch 'master' of evefit.org:pyfa

This commit is contained in:
DarkPhoenix
2011-01-16 19:04:22 +03:00
6 changed files with 275 additions and 274 deletions

View File

@@ -26,6 +26,10 @@ class FleetView(wx.gizmos.TreeListCtrl):
wx.gizmos.TreeListCtrl.__init__(self, parent, size = size) wx.gizmos.TreeListCtrl.__init__(self, parent, size = size)
self.tabManager = parent self.tabManager = parent
self.fleetId = None
self.fleetImg = bitmapLoader.getImage("53_16", "pack")
self.imageList = wx.ImageList(16, 16) self.imageList = wx.ImageList(16, 16)
self.SetImageList(self.imageList) self.SetImageList(self.imageList)
@@ -39,17 +43,45 @@ class FleetView(wx.gizmos.TreeListCtrl):
self.icons[icon] = self.imageList.Add(bitmapLoader.getBitmap("fleet_%s_small" % icon, "icons")) self.icons[icon] = self.imageList.Add(bitmapLoader.getBitmap("fleet_%s_small" % icon, "icons"))
self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.checkNew) 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): def checkNew(self, event):
data = self.GetPyData(event.Item) data = self.GetPyData(event.Item)
if data and isinstance(data, tuple) and data[0] == "add": if data and isinstance(data, tuple) and data[0] == "add":
layer = data[1] layer = data[1]
def UpdateTab(self, name, img):
self.tabManager.SetPageTextIcon(self.tabManager.GetSelection(), name, img)
def populate(self, fleetID): def populate(self, fleetID):
sFleet = service.Fleet.getInstance() sFleet = service.Fleet.getInstance()
f = sFleet.getFleetByID(fleetID) f = sFleet.getFleetByID(fleetID)
self.tabManager.SetPageTextIcon(self.tabManager.GetSelection(), f.name) self.fleetId = fleetID
self.UpdateTab( f.name, self.fleetImg)
self.fleet = f self.fleet = f
self.DeleteAllItems() self.DeleteAllItems()
root = self.AddRoot("") root = self.AddRoot("")

View File

@@ -9,6 +9,7 @@
# --------------------------------------------------------------------------------- # # --------------------------------------------------------------------------------- #
import wx import wx
import wx.lib.newevent
import copy import copy
import time import time
import gui.utils.colorUtils as colorUtils import gui.utils.colorUtils as colorUtils

View File

@@ -8,7 +8,15 @@ from gui.utils.drawUtils import GetPartialText
from wx.lib.buttons import GenBitmapButton 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() 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() FleetItemSelect, EVT_FLEET_ITEM_SELECT = wx.lib.newevent.NewEvent()
FleetItemDelete, EVT_FLEET_ITEM_DELETE = wx.lib.newevent.NewEvent() FleetItemDelete, EVT_FLEET_ITEM_DELETE = wx.lib.newevent.NewEvent()
@@ -86,16 +94,19 @@ class FleetBrowser(wx.Panel):
newFleetName = event.fleetName newFleetName = event.fleetName
self.sFleet.renameFleet(fleet, newFleetName) self.sFleet.renameFleet(fleet, newFleetName)
wx.PostEvent(self.mainFrame, FleetRenamed(fleetID = fleet.ID))
def DeleteFleetItem(self, event): def DeleteFleetItem(self, event):
self.sFleet.deleteFleetByID(event.fleetID) self.sFleet.deleteFleetByID(event.fleetID)
self.PopulateFleetList() self.PopulateFleetList()
wx.PostEvent(self.mainFrame, FleetRemoved(fleetID = event.fleetID))
def AddItem (self, ID, name, count): def AddItem (self, ID, name, count):
self.fleetItemContainer.AddWidget(FleetItem(self, ID, name, count)) self.fleetItemContainer.AddWidget(FleetItem(self, ID, name, count))
widget = self.fleetItemContainer.GetWidgetByFleetID(ID) widget = self.fleetItemContainer.GetWidgetByFleetID(ID)
self.fleetItemContainer.RefreshList(True) self.fleetItemContainer.RefreshList(True)
self.fleetItemContainer.ScrollChildIntoView(widget) self.fleetItemContainer.ScrollChildIntoView(widget)
wx.PostEvent(self, FleetItemSelect(fleetID = ID))
def PopulateFleetList(self): def PopulateFleetList(self):
self.Freeze() self.Freeze()
@@ -234,31 +245,22 @@ class PFFleetItemContainer(PFListPane):
def OnLeftUp(self, event): def OnLeftUp(self, event):
event.Skip() event.Skip()
class FleetItem(wx.Window): class FleetItem(SFItem.SFBrowserItem):
def __init__(self, parent, fleetID, fleetName, fleetCount, def __init__(self, parent, fleetID, fleetName, fleetCount,
id=wx.ID_ANY, pos=wx.DefaultPosition, id=wx.ID_ANY, pos=wx.DefaultPosition,
size=(0,32), style=0): size=(0,40), style=0):
wx.Window.__init__(self, parent, id, pos, size, style) 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.fleetBrowser = self.Parent
self.fleetID = fleetID self.fleetID = fleetID
self.fleetName = fleetName self.fleetName = fleetName
self.fleetCount = fleetCount self.fleetCount = fleetCount
self.highlighted = 0
self.buttonsTip = "" self.padding = 4
self.selected = False
self.padding = 5
self.editHasFocus = False
self.cleanupTimer = None
self.cleanupTimerId = wx.NewId()
self.fontBig = wx.FontFromPixelSize((0,15),wx.SWISS, wx.NORMAL, wx.BOLD, False) 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.copyBmp = bitmapLoader.getBitmap("fit_add_small", "icons")
self.renameBmp = bitmapLoader.getBitmap("fit_rename_small", "icons") self.renameBmp = bitmapLoader.getBitmap("fit_rename_small", "icons")
@@ -266,29 +268,18 @@ class FleetItem(wx.Window):
self.acceptBmp = bitmapLoader.getBitmap("faccept_small", "icons") self.acceptBmp = bitmapLoader.getBitmap("faccept_small", "icons")
self.fleetBmp = bitmapLoader.getBitmap("fleet_item_big", "icons") self.fleetBmp = bitmapLoader.getBitmap("fleet_item_big", "icons")
self.copyBmpGrey = self.GreyBitmap(self.copyBmp) fleetImg = self.fleetBmp.ConvertToImage()
self.renameBmpGrey = self.GreyBitmap(self.renameBmp) fleetImg = fleetImg.Blur(2)
self.deleteBmpGrey = self.GreyBitmap(self.deleteBmp)
self.acceptBmpGrey = self.GreyBitmap(self.acceptBmp)
self.btnSize = (18,18) if not fleetImg.HasAlpha():
fleetImg.InitAlpha()
if 'wxMac' in wx.PlatformInfo: fleetImg = fleetImg.AdjustChannels(1, 1, 1, 0.5)
self.btnbgcolour = wx.Colour(0, 0, 0, 0) self.fleetEffBmp = wx.BitmapFromImage(fleetImg)
else:
self.btnbgcolour = wx.SystemSettings.GetColour( wx.SYS_COLOUR_3DFACE)
self.btnCopy = PFGenBitmapButton( self, wx.ID_ANY, self.copyBmp, wx.DefaultPosition, self.btnSize, wx.BORDER_NONE ) self.toolbar.AddButton(self.copyBmp, "Copy", self.CopyFleetCB)
self.btnCopy.Show(False) self.toolbar.AddButton(self.renameBmp, "Rename", self.RenameFleetCB)
self.btnCopy.SetBackgroundColour( self.btnbgcolour ) self.toolbar.AddButton(self.deleteBmp, "Delete", self.DeleteFleetCB)
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.editWidth = 150 self.editWidth = 150
self.tcFleetName = wx.TextCtrl(self, wx.ID_ANY, "%s" % self.fleetName, wx.DefaultPosition, (self.editWidth,-1), wx.TE_PROCESS_ENTER) self.tcFleetName = wx.TextCtrl(self, wx.ID_ANY, "%s" % self.fleetName, wx.DefaultPosition, (self.editWidth,-1), wx.TE_PROCESS_ENTER)
@@ -298,270 +289,147 @@ class FleetItem(wx.Window):
else: else:
self.tcFleetName.SetFocus() self.tcFleetName.SetFocus()
self.tcFleetName.SelectAll() self.tcFleetName.SelectAll()
self.btnRename.SetBitmapLabel(self.acceptBmp, False)
self.editHasFocus = True
self.fleetBrowser.fleetIDMustEditName = -1 self.fleetBrowser.fleetIDMustEditName = -1
self.selected = True
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.tcFleetName.Bind(wx.EVT_KILL_FOCUS, self.OnEditLostFocus) 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.tcFleetName.Bind(wx.EVT_KEY_DOWN, self.EditCheckEsc)
self.Bind(wx.EVT_TIMER, self.OnTimer)
def OnSelect(self, event): self.animCount = 0
if self.editHasFocus:
self.HideEdit() def MouseLeftUp(self, event):
if self.tcFleetName.IsShown():
self.tcFleetName.Show(False)
else: else:
wx.PostEvent(self.fleetBrowser, FleetItemSelect(fleetID = self.fleetID)) wx.PostEvent(self.fleetBrowser, FleetItemSelect(fleetID = self.fleetID))
event.Skip()
def OnRenameBtn(self, event): def CopyFleetCB(self):
if self.tcFleetName.IsShown(): if self.tcFleetName.IsShown():
self.HideEdit() self.tcFleetName.Show(False)
self.btnRename.SetBitmapLabel(self.renameBmp, False) return
self.RenameFit(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()
def OnDeleteBtn(self, event): wx.PostEvent(self.fleetBrowser, FleetItemCopy(fleetID = self.fleetID))
if self.editHasFocus:
self.HideEdit()
else:
wx.PostEvent(self.fleetBrowser, FleetItemDelete(fleetID = self.fleetID))
event.Skip()
def OnCopyBtn(self, event): def RenameFleetCB(self):
if self.editHasFocus:
self.HideEdit()
else:
wx.PostEvent(self.fleetBrowser, FleetItemCopy(fleetID = self.fleetID))
event.Skip()
def RenameFit(self, event): if self.tcFleetName.IsShown():
self.HideEdit() self.tcFleetName.Show(False)
self.RenameFleet(None)
else:
self.tcFleetName.SetValue(self.fleetName)
self.tcFleetName.Show()
self.tcFleetName.SetFocus()
self.tcFleetName.SelectAll()
self.Refresh()
def RenameFleet(self, event):
newFleetName = self.tcFleetName.GetValue() newFleetName = self.tcFleetName.GetValue()
self.fleetName = newFleetName self.fleetName = newFleetName
self.tcFleetName.Show(False)
wx.PostEvent(self.fleetBrowser, FleetItemRename(fleetID = self.fleetID, fleetName = self.fleetName)) wx.PostEvent(self.fleetBrowser, FleetItemRename(fleetID = self.fleetID, fleetName = self.fleetName))
self.Refresh() 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):
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): def IsSelected(self):
return self.selected return self.selected
def SetSelected(self, state = True): def UpdateElementsPos(self, mdc):
self.selected = state
def OnPaint(self, event):
rect = self.GetRect() rect = self.GetRect()
#Bitmap for our buffered DC self.toolbarx = rect.width - self.toolbar.GetWidth() - self.padding
canvas = wx.EmptyBitmap(rect.width, rect.height) self.toolbary = (rect.height - self.toolbar.GetHeight()) / 2
#Buffered DC self.toolbarx = self.toolbarx + self.animCount
bdc = wx.BufferedPaintDC(self)
bdc.SelectObject(canvas)
#gradient rect - clear the window self.fleetBmpx = self.padding + (rect.height - self.fleetBmp.GetWidth()) / 2
grect = copy.copy(rect) self.fleetBmpy = (rect.height - self.fleetBmp.GetHeight()) / 2
grect.top = grect.left = 0
grect.height = grect.height / 2 self.fleetBmpx -= self.animCount
if self.highlighted: self.textStartx = self.fleetBmpx + self.fleetBmp.GetWidth() + self.padding
sr = 221 self.fleetNamey = (rect.height - self.fleetBmp.GetHeight()) / 2
sg = 221
sb = 221
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) self.fleetCounty = self.fleetNamey + htext
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 ))
else: mdc.SetFont(self.fontSmall)
if self.selected:
bkcolor = wx.Colour(221,221,221)
else:
bkcolor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)
bdc.SetBackground(wx.Brush(bkcolor)) wlabel,hlabel = mdc.GetTextExtent(self.toolbar.hoverLabel)
bdc.SetTextForeground(wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT ))
bdc.Clear() 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" 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 = "Fleet size: %s" % suffix
fleetCount = drawUtils.GetPartialText(mdc, fleetCount, self.toolbarx - self.textStartx - self.padding * 2 - self.thoverw)
btnWidth,btnHeight = self.btnSize mdc.DrawText(fleetCount, self.textStartx, self.fleetCounty)
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
bdc.SetFont(self.fontSmall) mdc.SetFont(self.fontSmall)
tx,ty = bdc.GetTextExtent(self.buttonsTip) mdc.DrawText(self.toolbar.hoverLabel, self.thoverx, self.thovery)
bdc.SetFont(self.fontBig) mdc.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)
bdc.SetFont(self.fontSmall) pfname = drawUtils.GetPartialText(mdc, self.fleetName, self.toolbarx - self.textStartx - self.padding * 2 - self.thoverw)
fcx,fcy = bdc.GetTextExtent(fleetCount) mdc.DrawText(pfname, self.textStartx, self.fleetNamey)
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) if self.tcFleetName.IsShown():
self.AdjustControlSizePos(self.tcFleetName, self.textStartx, self.toolbarx - self.editWidth - self.padding)
if self.highlighted: def AdjustControlSizePos(self, editCtl, start, end):
brush = wx.Brush(self.btnbgcolour) fnEditSize = editCtl.GetSize()
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()
wSize = self.GetSize() wSize = self.GetSize()
fnEditPosX = end fnEditPosX = end
fnEditPosY = (wSize.height - fnEditSize.height)/2 fnEditPosY = (wSize.height - fnEditSize.height)/2
if fnEditPosX < start: if fnEditPosX < start:
self.tcFleetName.SetSize((self.editWidth + fnEditPosX - start,-1)) editCtl.SetSize((self.editWidth + fnEditPosX - start,-1))
self.tcFleetName.SetPosition((start,fnEditPosY)) editCtl.SetPosition((start,fnEditPosY))
else: else:
self.tcFleetName.SetSize((self.editWidth,-1)) editCtl.SetSize((self.editWidth,-1))
self.tcFleetName.SetPosition((fnEditPosX,fnEditPosY)) 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): class PFGenBitmapButton(GenBitmapButton):
def __init__(self, parent, id, bitmap, pos, size, style): def __init__(self, parent, id, bitmap, pos, size, style):

View File

@@ -18,11 +18,21 @@
#=============================================================================== #===============================================================================
import sys import sys
import os.path
import sqlalchemy import sqlalchemy
import wx import wx
from wx._core import PyDeadObjectError
from wx.lib.wordwrap import wordwrap
import service import service
import config import config
import gui.aboutData
import gui.chromeTabs
import gui.utils.animUtils as animUtils
from gui import bitmapLoader from gui import bitmapLoader
from gui.mainMenuBar import MainMenuBar from gui.mainMenuBar import MainMenuBar
from gui.additionsPane import AdditionsPane from gui.additionsPane import AdditionsPane
@@ -30,20 +40,15 @@ from gui.marketBrowser import MarketBrowser
from gui.multiSwitch import MultiSwitch from gui.multiSwitch import MultiSwitch
from gui.statsPane import StatsPane from gui.statsPane import StatsPane
from gui.shipBrowser import ShipBrowser, FitSelected from gui.shipBrowser import ShipBrowser, FitSelected
from wx.lib.wordwrap import wordwrap
from gui.characterEditor import CharacterEditor from gui.characterEditor import CharacterEditor
from gui.characterSelection import CharacterSelection from gui.characterSelection import CharacterSelection
from gui.patternEditor import DmgPatternEditorDlg from gui.patternEditor import DmgPatternEditorDlg
from gui.preferenceDialog import PreferenceDialog from gui.preferenceDialog import PreferenceDialog
from gui.graphFrame import GraphFrame from gui.graphFrame import GraphFrame
from gui.copySelectDialog import CopySelectDialog 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 gui.utils.clipboard import toClipboard, fromClipboard
from builtinViews import *
from gui.fleetBrowser import FleetBrowser from gui.fleetBrowser import FleetBrowser
from builtinViews import *
#dummy panel no paint no erasebk #dummy panel no paint no erasebk
class PFPanel(wx.Panel): class PFPanel(wx.Panel):
@@ -451,8 +456,6 @@ class MainFrame(wx.Frame):
saveDialog.Destroy() saveDialog.Destroy()
def closeWaitDialog(self): def closeWaitDialog(self):
if self.waitDialog.timer.IsRunning():
self.waitDialog.timer.Stop()
self.waitDialog.Destroy() self.waitDialog.Destroy()
def openGraphFrame(self, event): def openGraphFrame(self, event):
@@ -478,30 +481,19 @@ class MainFrame(wx.Frame):
wnd = self wnd = self
InspectionTool().Show(wnd, True) InspectionTool().Show(wnd, True)
class WaitDialog(wx.Dialog): class WaitDialog(wx.Dialog):
def __init__(self, parent): 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) style=wx.NO_BORDER)
mainSizer = wx.BoxSizer( wx.HORIZONTAL ) 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 ) 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.SetSizer( mainSizer )
self.Layout() 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_CLOSE,self.OnClose)
self.Bind(wx.EVT_TIMER,self.OnTimer)
self.CenterOnParent() 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): def OnClose(self, event):
pass pass

View File

@@ -11,6 +11,7 @@ from wx.lib.buttons import GenBitmapButton
import gui.utils.colorUtils as colorUtils import gui.utils.colorUtils as colorUtils
import gui.utils.drawUtils as drawUtils import gui.utils.drawUtils as drawUtils
import gui.utils.animUtils as animUtils
import gui.sfBrowserItem as SFItem import gui.sfBrowserItem as SFItem
FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent()
@@ -26,6 +27,23 @@ class PFWidgetsContainer(PFListPane):
def __init__(self,parent): def __init__(self,parent):
PFListPane.__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): def IsWidgetSelectedByContext(self, widget):
mainFrame = gui.mainFrame.MainFrame.getInstance() mainFrame = gui.mainFrame.MainFrame.getInstance()
stage = self.Parent.GetActiveStage() stage = self.Parent.GetActiveStage()
@@ -162,6 +180,7 @@ class ShipBrowser(wx.Panel):
else: else:
self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race)) self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race))
self.lpane.ShowLoading(False)
self.lpane.RefreshList() self.lpane.RefreshList()
def stage2(self, event): def stage2(self, event):
@@ -175,6 +194,9 @@ class ShipBrowser(wx.Panel):
self.lpane.RemoveAllChildren() self.lpane.RemoveAllChildren()
self.lpane.ShowLoading()
sMarket = service.Market.getInstance() sMarket = service.Market.getInstance()
sMarket.getShipListDelayed(self.stage2Callback, categoryID) sMarket.getShipListDelayed(self.stage2Callback, categoryID)

86
gui/utils/animUtils.py Normal file
View File

@@ -0,0 +1,86 @@
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 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
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)