diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 4d28ec1d3..222dfec1e 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -1866,478 +1866,3 @@ class FitItem(SBItem): self.bkBitmap.eFactor = eFactor self.bkBitmap.mFactor = mFactor - -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): - wx.Window.__init__(self, parent, id, pos, size, style) - - 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.renamePosX = 0 - self.renamePosY = 0 - - self.deletePosX = 0 - self.deletePosY = 0 - - self.copyPosX = 0 - self.copyPosY = 0 - - self.highlighted = 0 - self.editWasShown = 0 - - self.btnsStatus = "" - 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.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s" % self.fitName, wx.DefaultPosition, (self.editWidth,-1), wx.TE_PROCESS_ENTER) - if self.shipBrowser.fitIDMustEditName != self.fitID: - self.tcFitName.Show(False) - else: - self.tcFitName.SetFocus() - self.tcFitName.SelectAll() - self.shipBrowser.fitIDMustEditName = -1 - - self.selTimerID = wx.NewId() - self.cleanupTimerID = wx.NewId() - self.cleanupTimer = None - self.selTimer = None - - self.selectedDelta = 0 - - self.Bind(wx.EVT_PAINT, self.OnPaint) - self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) - - self.Bind(wx.EVT_LEFT_UP, self.checkPosition) - self.Bind(wx.EVT_MIDDLE_DOWN, self.selectFit) - self.Bind(wx.EVT_LEFT_DOWN, self.prepareDragging) - self.Bind(wx.EVT_MOTION, self.cursorCheck) - self.Bind(wx.EVT_MOUSE_CAPTURE_LOST, self.OnCaptureLost) - - - self.Bind(wx.EVT_ENTER_WINDOW, self.enterW) - self.Bind(wx.EVT_LEAVE_WINDOW, self.leaveW) - - self.tcFitName.Bind(wx.EVT_TEXT_ENTER, self.renameFit) - self.tcFitName.Bind(wx.EVT_KILL_FOCUS, self.editLostFocus) - self.tcFitName.Bind(wx.EVT_KEY_DOWN, self.editCheckEsc) - self.Bind(wx.EVT_TIMER,self.OnTimer) - self.StartSelectedTimer() - - def OnCaptureLost(self, event): - self.dragging = self.dragged = False - self.dragMotionTrigger = self.dragMotionTrail - if self.dragWindow: - self.dragWindow.Show(False) - - def prepareDragging(self, event): - self.dragging = True - event.Skip() - - def OnTimer(self, event): - if self.selTimerID == event.GetId(): - ctimestamp = time.time() - interval = 10 - if ctimestamp < self.timestamp + interval: - delta = (ctimestamp - self.timestamp) / interval - self.selectedDelta = self.CalculateDelta(0x0,0x66,delta) - self.Refresh() - else: - self.selectedDelta = 0x66 - self.selTimer.Stop() - if self.cleanupTimerID == event.GetId(): - if self.btnsStatus: - self.btnsStatus = "" - self.Refresh() - self.cleanupTimer.Stop() - else: - self.cleanupTimer.Stop() - event.Skip() - - def StartSelectedTimer(self): - if not self.selTimer: - self.selTimer = wx.Timer(self,self.selTimerID) - self.selTimer.Start(100) - - def StartCleanupTimer(self): - if self.cleanupTimer: - if self.cleanupTimer.IsRunning(): - self.cleanupTimer.Stop() - self.cleanupTimer.Start(3000) - else: - self.cleanupTimer = wx.Timer(self,self.cleanupTimerID) - self.cleanupTimer.Start(3000) - - def CalculateDelta(self, start, end, delta): - return start + (end-start)*delta - - def GetType(self): - return 3 - - def SetData(self, data): - self._itemData = data - - def GetData(self): - return self._itemData - - def editLostFocus(self, event): - self.tcFitName.Show(False) - if self.highlighted == 1: - self.editWasShown = 1 - - def editCheckEsc(self, event): - if event.GetKeyCode() == wx.WXK_ESCAPE: - self.tcFitName.Show(False) - self.editWasShown = 0 - else: - event.Skip() - - def cursorCheck(self, event): - pos = self.ClientToScreen(event.GetPosition()) - if self.dragging: - if not self.dragged: - if self.dragMotionTrigger < 0: - self.CaptureMouse() - self.dragWindow = PFBitmapFrame(self, pos, self.dragTLFBmp) - self.dragWindow.Show() - self.dragged = True - self.dragMotionTrigger = self.dragMotionTrail - else: - self.dragMotionTrigger -= 1 - if self.dragWindow: - pos.x += 3 - pos.y += 3 - self.dragWindow.SetPosition(pos) - return - - pos = event.GetPosition() - if self.NHitTest((self.renamePosX, self.renamePosY), pos, (16, 16)): - self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) - if self.btnsStatus != "Rename": - self.btnsStatus = "Rename" - self.Refresh() - self.StartCleanupTimer() - elif self.NHitTest((self.deletePosX, self.deletePosY), pos, (16, 16)): - self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) - if self.btnsStatus != "Delete": - self.btnsStatus = "Delete" - self.Refresh() - self.StartCleanupTimer() - elif self.NHitTest((self.copyPosX, self.copyPosY), pos, (16, 16)): - self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) - if self.btnsStatus != "Copy": - self.btnsStatus = "Copy" - self.Refresh() - self.StartCleanupTimer() - else: - self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) - if self.btnsStatus != "": - self.btnsStatus = "" - self.Refresh() - - def checkForGraphFrame(self, wnd, gfwnd ): - - while wnd is not None: - if wnd == gfwnd: - return True - else: - wnd = wnd.Parent - return False - - def checkPosition(self, event): - if self.dragging and self.dragged: - self.dragging = False - self.dragged = False - if self.HasCapture(): - self.ReleaseMouse() - self.dragWindow.Show(False) - self.dragWindow = None - - targetWnd = wx.FindWindowAtPointer() - - if not targetWnd: - return - - wnd = targetWnd - while wnd is not None: - handler = getattr(wnd, "handleDrag", None) - if handler: - handler("fit", self.fitID) - break - else: - wnd = wnd.Parent - event.Skip() - return - - if self.dragging: - self.dragging = False - - pos = event.GetPosition() - x, y = pos - if self.NHitTest((self.renamePosX, self.renamePosY), pos, (16, 16)): - if self.editWasShown == 1: - self.renameFit() - return - else: - self.Refresh() - fnEditSize = self.tcFitName.GetSize() - wSize = self.GetSize() - fnrenamePosX = self.renamePosX - fnEditSize.width - 5 - fnrenamePosY = (wSize.height - fnEditSize.height) / 2 - self.tcFitName.SetPosition((fnrenamePosX, fnrenamePosY)) - self.tcFitName.Show(True) - self.tcFitName.SetFocus() - self.tcFitName.SelectAll() - return - if self.NHitTest((self.deletePosX,self.deletePosY), pos, (16,16)): - if self.editWasShown != 1: - self.deleteFit() - return - - if self.NHitTest((self.copyPosX,self.copyPosY), pos, (16,16)): - if self.editWasShown != 1: - self.copyFit() - return - - if self.editWasShown != 1: - activeFitID = self.mainFrame.getActiveFit() - if activeFitID != self.fitID: - self.selectFit() - else: - self.editWasShown = 0 - self.Refresh() - - event.Skip() - - def renameFit(self, event=None): - sFit = service.Fit.getInstance() - self.tcFitName.Show(False) - self.editWasShown = 0 - fitName = self.tcFitName.GetValue() - if fitName: - self.fitName = fitName - sFit.renameFit(self.fitID, self.fitName) - wx.PostEvent(self.mainFrame, FitRenamed(fitID=self.fitID)) - self.Refresh() - else: - self.tcFitName.SetValue(self.fitName) - - 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 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 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 - px, py = position - aX, aY = area - if (px > x and px < x + aX) and (py > y and py < y + aY): - return True - return False - def enterW(self, event): - self.highlighted = 1 - self.Refresh() - event.Skip() - - def leaveW(self, event): - pos = self.ClientToScreen(event.GetPosition()) - self.highlighted = 0 - self.Refresh() - if self.dragging: - if not self.dragged: - self.CaptureMouse() - self.dragWindow = PFBitmapFrame(self, pos, self.dragTLFBmp) - self.dragWindow.Show() - self.dragged = True - self.dragMotionTrigger = self.dragMotionTrail - return - event.Skip() - - def OnEraseBackground(self, event): - pass - - def GetState(self): - activeFitID = self.mainFrame.getActiveFit() - - if self.highlighted and not activeFitID == self.fitID: - state = SB_ITEM_HIGHLIGHTED - - else: - if activeFitID == self.fitID: - if self.highlighted: - state = SB_ITEM_SELECTED | SB_ITEM_HIGHLIGHTED - else: - state = SB_ITEM_SELECTED - else: - state = SB_ITEM_NORMAL - return state - - def RenderBackground(self): - rect = self.GetRect() - - windowColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW) - - activeFitID = self.mainFrame.getActiveFit() - - state = self.GetState() - - sFactor = 0.2 - mFactor = None - eFactor = 0 - - if state == SB_ITEM_HIGHLIGHTED: - mFactor = 0.55 - - elif state == SB_ITEM_SELECTED | SB_ITEM_HIGHLIGHTED: - eFactor = 0.3 - elif state == SB_ITEM_SELECTED: - eFactor = (0x33 - self.selectedDelta)/100 - else: - sFactor = 0 - - if self.bkBitmap: - if self.bkBitmap.eFactor == eFactor and self.bkBitmap.sFactor == sFactor and self.bkBitmap.mFactor == mFactor \ - and rect.width == self.bkBitmap.GetWidth() and rect.height == self.bkBitmap.GetHeight() : - return - else: - del self.bkBitmap - - self.bkBitmap = drawUtils.RenderGradientBar(windowColor, rect.width, rect.height, sFactor, eFactor, mFactor) - self.bkBitmap.state = state - self.bkBitmap.sFactor = sFactor - self.bkBitmap.eFactor = eFactor - self.bkBitmap.mFactor = mFactor - - def Refresh(self): - self.RenderBackground() - wx.Window.Refresh(self) - - def OnPaint(self, event): - rect = self.GetRect() - - windowColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW) - textColor = colorUtils.GetSuitableColor(windowColor, 1) - - mdc = wx.BufferedPaintDC(self) - - if self.bkBitmap is None: - self.RenderBackground() - - mdc.DrawBitmap(self.bkBitmap, 0,0) - - mdc.SetTextForeground(textColor) - - mdc.SetFont(self.fontBig) - mdc.DrawBitmap(self.shipEffBk,5 + (rect.height - self.shipEffBk.GetWidth()) / 2, (rect.height - self.shipEffBk.GetHeight()) / 2,0) - mdc.DrawBitmap(self.shipBmp, 5 + (rect.height - self.shipBmp.GetWidth()) / 2, (rect.height - self.shipBmp.GetHeight()) / 2, 0) - - shipName = self.shipName - fitName = self.fitName - - ypos = (rect.height - 32) / 2 - textStart = 48 - xtext, ytext = mdc.GetTextExtent(fitName) - fposy = ypos - ypos += ytext - - mdc.SetFont(self.fontNormal) - fitDate = time.localtime(self.timestamp) - shipName = "%02d/%02d %02d:%02d" % (fitDate[1], fitDate[2], fitDate[3], fitDate[4]) - mdc.DrawText("%s" % shipName, textStart, ypos) - - mdc.SetFont(self.fontSmall) - - self.deletePosX = rect.width - self.deleteBmp.GetWidth() - 5 - self.renamePosX = self.deletePosX - self.renameBmp.GetWidth() - 5 - self.copyPosX = self.renamePosX - self.copyBmp.GetWidth() -5 - self.renamePosY = self.deletePosY = self.copyPosY = (rect.height - 16) / 2 - - if self.btnsStatus != "": - status = "%s" % self.btnsStatus - xtext, ytext = mdc.GetTextExtent(status) - ytext = (rect.height - ytext)/2 - mdc.DrawText(status, self.copyPosX - xtext -5,ytext) - else: - xtext = 0 - - mdc.SetFont(self.fontBig) - - fnwidths = mdc.GetPartialTextExtents(fitName) - count = 0 - maxsize = self.copyPosX -xtext - 15 - textStart - for i in fnwidths: - if i <= maxsize: - count +=1 - else: - break - - fitName = "%s%s" % (fitName[:count if count >5 else 5],"..." if len(fitName)>count else "") - - mdc.DrawText(fitName, textStart, fposy) - - mdc.DrawBitmap(self.copyBmp, self.copyPosX, self.copyPosY, 0) - mdc.DrawBitmap(self.renameBmp, self.renamePosX, self.renamePosY, 0) - mdc.DrawBitmap(self.deleteBmp, self.deletePosX, self.deletePosY, 0) - - if self.tcFitName.IsShown(): - fnEditSize = self.tcFitName.GetSize() - wSize = self.GetSize() - fnEditPosX = self.copyPosX - self.editWidth - 5 - fnEditPosY = (wSize.height - fnEditSize.height)/2 - if fnEditPosX < textStart: - self.tcFitName.SetSize((self.editWidth + fnEditPosX - textStart,-1)) - self.tcFitName.SetPosition((textStart,fnEditPosY)) - else: - self.tcFitName.SetSize((self.editWidth,-1)) - self.tcFitName.SetPosition((fnEditPosX,fnEditPosY)) - - tdc = wx.MemoryDC() - self.dragTLFBmp = wx.EmptyBitmap((self.copyPosX if self.copyPosX <200 else 200), rect.height) - tdc.SelectObject(self.dragTLFBmp) - tdc.Blit(0, 0, (self.copyPosX if self.copyPosX <200 else 200), rect.height, mdc, 0, 0, wx.COPY) - tdc.SelectObject(wx.NullBitmap)