Added new navigation panel to codebase, no visual stuff yet

This commit is contained in:
HomeWorld
2011-05-16 22:52:57 +03:00
parent db1ce4f5d8
commit 2246049529
2 changed files with 253 additions and 12 deletions

View File

@@ -14,18 +14,28 @@ BTN_DISABLED = 8
class PFBaseButton(object):
def __init__(self, normalBitmap = wx.NullBitmap,label = "", callback = None, hoverBitmap = None, disabledBitmap = None):
def __init__(self, normalBitmap = wx.NullBitmap,label = "", callback = None, hoverBitmap = None, disabledBitmap = None, show = True):
self.normalBmp = normalBitmap
self.hoverBmp = hoverBitmap
self.disabledBmp = disabledBitmap
self.label = label
self.show = show
self.callback = callback
self.state = BTN_NORMAL
# state : BTN_STUFF
def Show(self, show):
self.show = show
def Hide(self):
self.show = False
def IsVisible(self):
return self.show
def SetCallback(self, callback):
self.callback = callback
@@ -78,8 +88,8 @@ class PFToolbar(object):
def SetPosition(self, pos):
self.toolbarX, self.toolbarY = pos
def AddButton(self, btnBitmap, label = "", clickCallback = None, hoverBitmap = None, disabledBitmap = None):
btn = PFBaseButton(btnBitmap, label, clickCallback, hoverBitmap, disabledBitmap)
def AddButton(self, btnBitmap, label = "", clickCallback = None, hoverBitmap = None, disabledBitmap = None, show = True):
btn = PFBaseButton(btnBitmap, label, clickCallback, hoverBitmap, disabledBitmap, show)
self.buttons.append(btn)
return btn
@@ -95,6 +105,9 @@ class PFToolbar(object):
self.hoverLabel = ""
for button in self.buttons:
if not button.IsVisible():
continue
state = button.GetState()
if self.HitTest( (bx, self.toolbarY), event.GetPosition(), button.GetSize()):
changeCursor = True
@@ -119,6 +132,9 @@ class PFToolbar(object):
mx,my = event.GetPosition()
bx = self.toolbarX
for button in self.buttons:
if not button.IsVisible():
continue
state = button.GetState()
if state & BTN_PRESSED:
button.SetState(state ^ BTN_PRESSED )
@@ -131,7 +147,11 @@ class PFToolbar(object):
bx = self.toolbarX
for button in self.buttons:
if not button.IsVisible():
continue
state = button.GetState()
if self.HitTest( (bx, self.toolbarY), event.GetPosition(), button.GetSize()):
if event.LeftDown() or event.LeftDClick():
@@ -144,20 +164,29 @@ class PFToolbar(object):
bwidth, bheight = button.GetSize()
bx += bwidth + self.padding
return None
def GetWidth(self):
bx = 0
for button in self.buttons:
if not button.IsVisible():
continue
bwidth, bheight = button.GetSize()
bx += bwidth + self.padding
return bx
def GetHeight(self):
height = 0
for button in self.buttons:
if not button.IsVisible():
continue
bwidth, bheight = button.GetSize()
height = max(height, bheight)
return height
def HitTest(self, target, position, area):
@@ -171,6 +200,9 @@ class PFToolbar(object):
def Render(self, pdc):
bx = self.toolbarX
for button in self.buttons:
if not button.IsVisible():
continue
by = self.toolbarY
tbx = bx
@@ -193,6 +225,7 @@ class PFToolbar(object):
pdc.DrawBitmap(bmp, tbx, by)
bx += bmpWidth + self.padding
class SFBrowserItem(wx.Window):
def __init__(self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = (0,16), style = 0):
wx.Window.__init__(self, parent, id, pos, size, style)

View File

@@ -288,6 +288,200 @@ class RaceSelector(wx.Window):
event.Skip()
class NavigationPanel(SFItem.SFBrowserItem):
def __init__(self,parent, size = (-1,24)):
SFItem.SFBrowserItem.__init__(self,parent,size = size)
self.rewBmpH = bitmapLoader.getBitmap("frewind_small","icons")
self.forwBmp = bitmapLoader.getBitmap("fforward_small","icons")
self.searchBmpH = bitmapLoader.getBitmap("fsearch_small","icons")
self.newBmpH = bitmapLoader.getBitmap("fit_add_small","icons")
self.resetBmpH = bitmapLoader.getBitmap("freset_small","icons")
self.switchBmpH = bitmapLoader.getBitmap("fit_switch_view_mode_small","icons")
self.resetBmp = self.AdjustAlphaChannel(self.resetBmpH)
self.rewBmp = self.AdjustAlphaChannel(self.rewBmpH)
self.searchBmp = self.AdjustAlphaChannel(self.searchBmpH)
self.switchBmp = self.AdjustAlphaChannel(self.switchBmpH)
self.newBmp = self.AdjustAlphaChannel(self.newBmpH)
self.toolbar.AddButton(self.resetBmp, "Ship groups", clickCallback = self.OnHistoryReset, hoverBitmap = self.resetBmpH)
self.toolbar.AddButton(self.rewBmp, "Back", clickCallback = self.OnHistoryBack, hoverBitmap = self.rewBmpH)
self.toolbar.AddButton(self.searchBmp, "Search fittings", clickCallback = self.ToggleSearchBox, hoverBitmap = self.searchBmpH)
self.btnNew = self.toolbar.AddButton(self.newBmp, "New fitting", clickCallback = self.OnNewFitting, hoverBitmap = self.newBmpH, show = False)
self.btnSwitch = self.toolbar.AddButton(self.switchBmp, "Hide empty ship groups", clickCallback = self.ToggleEmptyGroupsView, hoverBitmap = self.switchBmpH, show = False)
self.padding = 4
self.fontSmall = wx.FontFromPixelSize((0,12),wx.SWISS, wx.NORMAL, wx.NORMAL, False)
self.BrowserSearchBox = wx.TextCtrl(self, wx.ID_ANY, "", wx.DefaultPosition, (-1,-1), wx.TE_PROCESS_ENTER)
self.BrowserSearchBox.Show(False)
self.BrowserSearchBox.Bind(wx.EVT_TEXT_ENTER, self.OnBrowserSearchBoxEnter)
self.BrowserSearchBox.Bind(wx.EVT_KILL_FOCUS, self.OnBrowserSearchBoxLostFocus)
self.BrowserSearchBox.Bind(wx.EVT_KEY_DOWN, self.OnBrowserSearchBoxEsc)
self.BrowserSearchBox.Bind(wx.EVT_TEXT, self.OnScheduleSearch)
self.SetMinSize(size)
self.shipBrowser = self.Parent
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.Bind(wx.EVT_SIZE, self.OnResize)
def OnScheduleSearch(self, event):
search = self.BrowserSearchBox.GetValue()
if len(search) < 3 and len(search) >= 0:
if len(self.shipBrowser.browseHist) > 0:
stage,data = self.shipBrowser.browseHist.pop()
self.gotoStage(stage,data)
print stage,data
else:
wx.PostEvent(self.shipBrowser,SearchSelected(text=search, back = False))
def ToggleSearchBox(self):
if self.BrowserSearchBox.IsShown():
self.BrowserSearchBox.Show(False)
else:
self.BrowserSearchBox.Show(True)
self.BrowserSearchBox.SetFocus()
def OnBrowserSearchBoxEnter(self, event):
pass
def OnBrowserSearchBoxLostFocus(self, event):
self.BrowserSearchBox.Show(False)
def OnBrowserSearchBoxEsc(self, event):
if event.GetKeyCode() == wx.WXK_ESCAPE:
self.BrowserSearchBox.Show(False)
else:
event.Skip()
def OnResize(self, event):
self.Refresh()
def ToggleEmptyGroupsView(self):
if self.shipBrowser.filterShipsWithNoFits:
self.shipBrowser.filterShipsWithNoFits = False
self.btnSwitch.label = "Hide empty ship groups"
else:
self.shipBrowser.filterShipsWithNoFits = True
self.btnSwitch.label = "Show empty ship groups"
stage = self.shipBrowser.GetActiveStage()
if stage == 2:
categoryID = self.shipBrowser.GetStageData(stage)
wx.PostEvent(self.shipBrowser,Stage2Selected(categoryID=categoryID, back = True))
def ShowNewFitButton(self, show):
self.btnNew.Show(show)
self.Refresh()
def ShowSwitchEmptyGroupsButton(self, show):
self.btnSwitch.Show(show)
self.Refresh()
def OnNewFitting(self):
stage = self.Parent.GetActiveStage()
if stage == 3:
shipID = self.Parent.GetStageData(stage)
shipName = self.Parent.GetStage3ShipName()
sFit = service.Fit.getInstance()
fitID = sFit.newFit(shipID, "%s fit" %shipName)
self.shipBrowser.fitIDMustEditName = fitID
wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID, back = True))
wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID))
def OnHistoryReset(self):
if self.shipBrowser.browseHist:
self.shipBrowser.browseHist = []
self.gotoStage(1,0)
def OnHistoryBack(self):
if len(self.shipBrowser.browseHist) > 0:
stage,data = self.shipBrowser.browseHist.pop()
self.gotoStage(stage,data)
def AdjustAlphaChannel(self, bitmap):
img = wx.ImageFromBitmap(bitmap)
img = img.AdjustChannels(1,1,1,0.4)
return wx.BitmapFromImage(img)
def UpdateElementsPos(self, mdc):
rect = self.GetRect()
self.toolbarx = self.padding
self.toolbary = (rect.height - self.toolbar.GetHeight()) / 2
mdc.SetFont(self.fontSmall)
wlabel,hlabel = mdc.GetTextExtent(self.toolbar.hoverLabel)
self.thoverx = self.toolbar.GetWidth() + self.padding
self.thovery = (rect.height - hlabel)/2
self.thoverw = wlabel
self.browserBoxX = self.thoverx
bEditBoxWidth, bEditBoxHeight = self.BrowserSearchBox.GetSize()
self.browserBoxY = (rect.height - bEditBoxHeight) / 2
self.bEditBoxWidth = rect.width - self.browserBoxX
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.BrowserSearchBox.SetPosition((self.browserBoxX, self.browserBoxY))
self.BrowserSearchBox.SetSize(wx.Size(self.bEditBoxWidth, -1))
self.toolbar.SetPosition((self.toolbarx, self.toolbary))
mdc.SetFont(self.fontSmall)
mdc.DrawText(self.toolbar.hoverLabel, self.thoverx, self.thovery)
def RenderBackground(self):
rect = self.GetRect()
windowColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)
sFactor = 0.1
mFactor = 0.2
eFactor = 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, 2)
self.bkBitmap.sFactor = sFactor
self.bkBitmap.eFactor = eFactor
self.bkBitmap.mFactor = mFactor
def gotoStage(self,stage, data = None):
if stage == 1:
wx.PostEvent(self.Parent,Stage1Selected())
elif stage == 2:
wx.PostEvent(self.Parent,Stage2Selected(categoryID=data, back = True))
elif stage == 3:
wx.PostEvent(self.Parent,Stage3Selected(shipID=data, back = 1))
elif stage == 4:
self.shipBrowser._activeStage = 4
self.stStatus.SetLabel("Search: %s" % data.capitalize())
self.Layout()
wx.PostEvent(self.Parent,SearchSelected(text=data, back = True))
else:
wx.PostEvent(self.Parent,Stage1Selected())
class ShipBrowser(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__ (self, parent,style = 0)
@@ -318,19 +512,21 @@ class ShipBrowser(wx.Panel):
mainSizer = wx.BoxSizer(wx.VERTICAL)
self.hpane = HeaderPane(self)
mainSizer.Add(self.hpane, 0, wx.EXPAND)
self.m_sl2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
mainSizer.Add( self.m_sl2, 0, wx.EXPAND, 0 )
# self.hpane = HeaderPane(self)
# mainSizer.Add(self.hpane, 0, wx.EXPAND)
#
# self.m_sl2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
# mainSizer.Add( self.m_sl2, 0, wx.EXPAND, 0 )
self.lpane = PFWidgetsContainer(self)
layout = wx.HORIZONTAL
# self.navpanel = NavigationPanel(self)
self.raceselect = RaceSelector(self, layout = layout, animate = False)
container = wx.BoxSizer(wx.VERTICAL if layout == wx.HORIZONTAL else wx.HORIZONTAL)
if layout == wx.HORIZONTAL:
# container.Add(self.navpanel,0,wx.EXPAND)
container.Add(self.lpane,1,wx.EXPAND)
container.Add(self.raceselect,0,wx.EXPAND)
else:
@@ -409,8 +605,12 @@ class ShipBrowser(wx.Panel):
self._lastStage = self._activeStage
self._activeStage = 1
self.lastdata = 0
self.hpane.ToggleNewFitSB(False)
self.hpane.ToggleFitViewModeSB(False)
# self.hpane.ToggleNewFitSB(False)
# self.hpane.ToggleFitViewModeSB(False)
self.navpanel.ShowNewFitButton(False)
self.navpanel.ShowSwitchEmptyGroupsButton(False)
sMarket = service.Market.getInstance()
self.lpane.ShowLoading(False)
@@ -496,8 +696,12 @@ class ShipBrowser(wx.Panel):
sMarket.getShipListDelayed(self.stage2Callback, categoryID)
self._stage2Data = categoryID
self.hpane.ToggleNewFitSB(False)
self.hpane.ToggleFitViewModeSB(True)
# self.hpane.ToggleNewFitSB(False)
# self.hpane.ToggleFitViewModeSB(True)
self.navpanel.ShowNewFitButton(False)
self.navpanel.ShowSwitchEmptyGroupsButton(True)
def nameKey(self, info):
return info[1]
@@ -531,6 +735,10 @@ class ShipBrowser(wx.Panel):
return
self.hpane.ToggleFitViewModeSB(False)
self.hpane.ToggleNewFitSB(True)
self.navpanel.ShowNewFitButton(True)
self.navpanel.ShowSwitchEmptyGroupsButton(False)
fitList.sort(key=self.nameKey)
shipName = sMarket.getItem(shipID).name