From c76d7af05c5ac28669ec876eb2a9881c61cf60e5 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Thu, 13 Jan 2011 20:07:28 +0200 Subject: [PATCH] Rewritten shipbrowser FitItem - basic functionality only (copy/delete) --- gui/shipBrowser.py | 216 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 210 insertions(+), 6 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index dd2967189..6d81765a0 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -1161,13 +1161,13 @@ class ShipItem(SBItem): self.animTimer = wx.Timer(self, self.animTimerId) self.animStep = 0 self.animPeriod = 10 - self.animDuration = 150 + self.animDuration = 100 self.Bind(wx.EVT_TIMER, self.OnTimer) self.animTimer.Start(self.animPeriod) def OnTimer(self, event): - step = self.OUT_QUAD(self.animStep, 0, 100, self.animDuration) - self.animCount = 100 - step + step = self.OUT_QUAD(self.animStep, 0, 10, self.animDuration) + self.animCount = 10 - step self.animStep += self.animPeriod if self.animStep > self.animDuration or self.animCount < 0 : self.animCount = 0 @@ -1193,7 +1193,11 @@ class ShipItem(SBItem): self.newBtn.SetBitmap(self.newBmp) self.Refresh() else: - wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back = -1 if self.shipBrowser.GetActiveStage() == 4 else 0)) + shipName, fittings = self.shipFittingInfo + if fittings > 0: + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back = -1 if self.shipBrowser.GetActiveStage() == 4 else 0)) + else: + self.newBtnCB() def newBtnCB(self): if self.tcFitName.IsShown(): @@ -1299,9 +1303,10 @@ class ShipItem(SBItem): mdc.SetFont(self.fontSmall) mdc.DrawText(self.toolbar.hoverLabel, self.thoverx, self.thovery) + mdc.SetFont(self.fontBig) + psname = drawUtils.GetPartialText(mdc, shipName, self.toolbarx - self.textStartx - self.padding * 2 - self.thoverw) - mdc.SetFont(self.fontBig) mdc.DrawText(psname, self.textStartx, self.shipNamey) if self.tcFitName.IsShown(): @@ -1403,7 +1408,206 @@ def GetRoundShape( w, h, r ): return wx.RegionFromBitmap( GetRoundBitmap(w,h,r) ) -class FitItem(wx.Window): +class FitItem(SBItem): + def __init__(self, parent, fitID=None, shipFittingInfo=("Test", "cnc's avatar", 0 ), shipID = None, itemData=None, + id=wx.ID_ANY, pos=wx.DefaultPosition, + size=(0, 40), style=0): + SBItem.__init__(self,parent,size = size) + + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self._itemData = itemData + self.fitID = fitID + self.shipID = shipID + self.shipBrowser = self.Parent.Parent + self.shipBmp = None + if shipID: + self.shipBmp = bitmapLoader.getBitmap(str(shipID),"ships") + if not self.shipBmp: + self.shipBmp = bitmapLoader.getBitmap("ship_no_image_big","icons") + + self.shipFittingInfo = shipFittingInfo + self.shipName, self.fitName, self.timestamp = shipFittingInfo + + self.copyBmp = bitmapLoader.getBitmap("fit_add_small", "icons") + self.renameBmp = bitmapLoader.getBitmap("fit_rename_small", "icons") + self.deleteBmp = bitmapLoader.getBitmap("fit_delete_small","icons") + + self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") + + self.dragTLFBmp = None + + self.bkBitmap = None + + self.padding = 4 + self.editWidth = 150 + + self.dragging = False + self.dragged = False + self.dragMotionTrail = 5 + self.dragMotionTrigger = self.dragMotionTrail + self.dragWindow = None + + self.fontBig = wx.FontFromPixelSize((0,15),wx.SWISS, wx.NORMAL, wx.BOLD, 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.toolbar.AddButton(self.copyBmp,"Copy", self.copyBtnCB) + self.toolbar.AddButton(self.renameBmp,"Rename", self.renameBtnCB) + self.toolbar.AddButton(self.deleteBmp, "Delete", self.deleteBtnCB) + + self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s" % self.fitName, wx.DefaultPosition, (self.editWidth,-1), wx.TE_PROCESS_ENTER) + self.tcFitName.Show(False) + + self.animTimerId = wx.NewId() + self.animCount = 100 + self.animTimer = wx.Timer(self, self.animTimerId) + self.animStep = 0 + self.animPeriod = 10 + self.animDuration = 100 + self.Bind(wx.EVT_TIMER, self.OnTimer) + self.animTimer.Start(self.animPeriod) + + def OnTimer(self, event): + step = self.OUT_QUAD(self.animStep, 0, 10, self.animDuration) + self.animCount = 10 - step + self.animStep += self.animPeriod + if self.animStep > self.animDuration or self.animCount < 0 : + self.animCount = 0 + self.animTimer.Stop() + self.Refresh() + + def OUT_QUAD (self, t, b, c, d): + t=float(t) + b=float(b) + c=float(c) + d=float(d) + + t/=d + + return -c *(t)*(t-2) + b + + + + def copyBtnCB(self): + self.copyFit() + + def copyFit(self, event=None): + sFit = service.Fit.getInstance() + fitID = sFit.copyFit(self.fitID) + self.shipBrowser.fitIDMustEditName = fitID + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back=True)) + wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID)) + + def renameBtnCB(self): + pass + + def deleteBtnCB(self): + self.deleteFit() + + def deleteFit(self, event=None): + sFit = service.Fit.getInstance() + sFit.deleteFit(self.fitID) + if self.shipBrowser.GetActiveStage() == 4: + wx.PostEvent(self.shipBrowser,SearchSelected(text=self.shipBrowser.hpane.lastSearch,back=True)) + else: + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back=True)) + + wx.PostEvent(self.mainFrame, FitRemoved(fitID=self.fitID)) + + def MouseLeftUp(self, event): + if self.tcFitName.IsShown(): + self.tcFitName.Show(False) + self.newBtn.SetBitmap(self.newBmp) + self.Refresh() + else: + activeFitID = self.mainFrame.getActiveFit() + if activeFitID != self.fitID: + self.selectFit() + + def selectFit(self, event=None): + wx.PostEvent(self.mainFrame, FitSelected(fitID=self.fitID)) +# self.Parent.RefreshList(True) + + def UpdateElementsPos(self, mdc): + rect = self.GetRect() + + self.toolbarx = rect.width - self.toolbar.GetWidth() - self.padding + self.toolbary = (rect.height - self.toolbar.GetHeight()) / 2 + + self.toolbarx = self.toolbarx + self.animCount + + self.shipEffx = self.padding + (rect.height - self.shipEffBk.GetWidth())/2 + self.shipEffy = (rect.height - self.shipEffBk.GetHeight())/2 + + self.shipEffx = self.shipEffx - self.animCount + + self.shipBmpx = self.padding + (rect.height - self.shipBmp.GetWidth()) / 2 + self.shipBmpy = (rect.height - self.shipBmp.GetHeight()) / 2 + + self.shipBmpx= self.shipBmpx - self.animCount + + self.textStartx = self.shipEffx + self.shipEffBk.GetWidth() + self.padding + + self.fitNamey = (rect.height - self.shipBmp.GetHeight()) / 2 + + mdc.SetFont(self.fontBig) + wtext, htext = mdc.GetTextExtent(self.fitName) + + self.timestampy = self.fitNamey + htext + + mdc.SetFont(self.fontSmall) + + 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() + + self.UpdateElementsPos(mdc) + + self.toolbar.SetPosition((self.toolbarx, self.toolbary)) + + mdc.DrawBitmap(self.shipEffBk, self.shipEffx, self.shipEffy, 0) + + mdc.DrawBitmap(self.shipBmp, self.shipBmpx, self.shipBmpy, 0) + + shipName, fittings, timestamp = self.shipFittingInfo + + mdc.SetFont(self.fontNormal) + + fitDate = time.localtime(self.timestamp) + fitLocalDate = "%02d/%02d %02d:%02d" % (fitDate[1], fitDate[2], fitDate[3], fitDate[4]) + + mdc.DrawText(fitLocalDate, self.textStartx, self.timestampy) + + mdc.SetFont(self.fontSmall) + mdc.DrawText(self.toolbar.hoverLabel, self.thoverx, self.thovery) + + mdc.SetFont(self.fontBig) + + psname = drawUtils.GetPartialText(mdc, self.fitName, self.toolbarx - self.textStartx - self.padding * 2 - self.thoverw) + + mdc.DrawText(psname, self.textStartx, self.fitNamey) + + if self.tcFitName.IsShown(): + self.AdjustControlSizePos(self.tcFitName, self.textStartx, self.toolbarx - self.editWidth - self.padding) + + def AdjustControlSizePos(self, editCtl, start, end): + fnEditSize = editCtl.GetSize() + wSize = self.GetSize() + fnEditPosX = end + fnEditPosY = (wSize.height - fnEditSize.height)/2 + if fnEditPosX < start: + editCtl.SetSize((self.editWidth + fnEditPosX - start,-1)) + editCtl.SetPosition((start,fnEditPosY)) + else: + editCtl.SetSize((self.editWidth,-1)) + editCtl.SetPosition((fnEditPosX,fnEditPosY)) + +class FitItem2(wx.Window): def __init__(self, parent, fitID=None, shipFittingInfo=("Test", "cnc's avatar", 0 ), shipID = None, itemData=None, id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, size=(0, 40), style=0):