Code cleanup in shipbrowser
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user