Created first iteration of "Recent Fits" view, in which a nav button is interacted with to show a list of the 100 most recently modified fits. Ship Broswer is littered with ToggleRecentShips() to reset the icon when not in "recent" mode. This should probably be fixed at some point.
Removed the FIT_CHANGED binding from FitItem - this was causing very odd issues when the object was destroyed (navigating to another "stage") such as the Fit Changed event for that fit no longer firing (or at least seemingly so) To fix this, simply look at the active fit during FitItem.Refresh() Also creates a new query to get a list of items from the DB, although it's not used (was gonna use it, decided against it, but didn't want to delete the code - could prove handy later)
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
import sys
|
||||
import os.path
|
||||
from logbook import Logger
|
||||
import datetime
|
||||
|
||||
import sqlalchemy
|
||||
# noinspection PyPackageRequirements
|
||||
@@ -919,7 +920,16 @@ class MainFrame(wx.Frame):
|
||||
wx.PostEvent(self, FitSelected(fitID=fit.ID))
|
||||
wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=fit.shipID, back=True))
|
||||
else:
|
||||
wx.PostEvent(self.shipBrowser, ImportSelected(fits=fits, back=True))
|
||||
fits.sort(key=lambda _fit: (_fit.ship.item.name, _fit.name))
|
||||
results = []
|
||||
for fit in fits:
|
||||
results.append((
|
||||
fit.ID,
|
||||
fit.name,
|
||||
fit.modified or fit.created or datetime.datetime.fromtimestamp(fit.timestamp),
|
||||
fit.ship.item
|
||||
))
|
||||
wx.PostEvent(self.shipBrowser, ImportSelected(fits=results, back=True))
|
||||
|
||||
def closeProgressDialog(self):
|
||||
# Windows apparently handles ProgressDialogs differently. We can
|
||||
|
||||
@@ -338,15 +338,21 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
self.newBmpH = BitmapLoader.getBitmap("fit_add_small", "gui")
|
||||
self.resetBmpH = BitmapLoader.getBitmap("freset_small", "gui")
|
||||
self.switchBmpH = BitmapLoader.getBitmap("fit_switch_view_mode_small", "gui")
|
||||
self.recentBmpH = BitmapLoader.getBitmap("frecent_small", "gui")
|
||||
|
||||
switchImg = BitmapLoader.getImage("fit_switch_view_mode_small", "gui")
|
||||
switchImg = switchImg.AdjustChannels(1, 1, 1, 0.4)
|
||||
self.switchBmpD = wx.BitmapFromImage(switchImg)
|
||||
|
||||
recentImg = BitmapLoader.getImage("frecent_small", "gui")
|
||||
recentImg = recentImg.AdjustChannels(1, 1, 1, 0.4)
|
||||
self.recentBmpD = wx.BitmapFromImage(recentImg)
|
||||
|
||||
self.resetBmp = self.AdjustChannels(self.resetBmpH)
|
||||
self.rewBmp = self.AdjustChannels(self.rewBmpH)
|
||||
self.searchBmp = self.AdjustChannels(self.searchBmpH)
|
||||
self.switchBmp = self.AdjustChannels(self.switchBmpH)
|
||||
self.recentBmp = self.AdjustChannels(self.recentBmpH)
|
||||
self.newBmp = self.AdjustChannels(self.newBmpH)
|
||||
|
||||
self.toolbar.AddButton(self.resetBmp, "Ship groups", clickCallback=self.OnHistoryReset,
|
||||
@@ -357,6 +363,9 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
self.btnSwitch = self.toolbar.AddButton(self.switchBmpD, "Hide empty ship groups",
|
||||
clickCallback=self.ToggleEmptyGroupsView, hoverBitmap=self.switchBmpH,
|
||||
show=False)
|
||||
self.btnRecent = self.toolbar.AddButton(self.recentBmpD, "Recent Fits",
|
||||
clickCallback=self.ToggleRecentShips, hoverBitmap=self.recentBmpH,
|
||||
show=True)
|
||||
|
||||
modifier = "CTRL" if 'wxMac' not in wx.PlatformInfo else "CMD"
|
||||
self.toolbar.AddButton(self.searchBmp, "Search fittings ({}+F)".format(modifier), clickCallback=self.ToggleSearchBox,
|
||||
@@ -416,6 +425,27 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
def OnResize(self, event):
|
||||
self.Refresh()
|
||||
|
||||
def ToggleRecentShips(self, bool = None, emitEvent = True):
|
||||
# this is so janky. Need to revaluate pretty much entire ship browser. >.<
|
||||
toggle = bool if bool is not None else not self.shipBrowser.recentFits
|
||||
|
||||
if not toggle:
|
||||
self.shipBrowser.recentFits = False
|
||||
self.btnRecent.label = "Recent Fits"
|
||||
self.btnRecent.normalBmp = self.recentBmpD
|
||||
|
||||
if emitEvent:
|
||||
wx.PostEvent(self.shipBrowser, Stage1Selected())
|
||||
else:
|
||||
self.shipBrowser.recentFits = True
|
||||
self.btnRecent.label = "Hide Recent Fits"
|
||||
self.btnRecent.normalBmp = self.recentBmp
|
||||
|
||||
if emitEvent:
|
||||
sFit = Fit.getInstance()
|
||||
fits = sFit.getRecentFits()
|
||||
wx.PostEvent(self.shipBrowser, ImportSelected(fits=fits, back=True, recent=True))
|
||||
|
||||
def ToggleEmptyGroupsView(self):
|
||||
if self.shipBrowser.filterShipsWithNoFits:
|
||||
self.shipBrowser.filterShipsWithNoFits = False
|
||||
@@ -454,11 +484,13 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID))
|
||||
|
||||
def OnHistoryReset(self):
|
||||
self.ToggleRecentShips(False, False)
|
||||
if self.shipBrowser.browseHist:
|
||||
self.shipBrowser.browseHist = []
|
||||
self.gotoStage(1, 0)
|
||||
|
||||
def OnHistoryBack(self):
|
||||
self.ToggleRecentShips(False, False)
|
||||
if len(self.shipBrowser.browseHist) > 0:
|
||||
stage, data = self.shipBrowser.browseHist.pop()
|
||||
self.gotoStage(stage, data)
|
||||
@@ -538,6 +570,7 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
self.bkBitmap.mFactor = mFactor
|
||||
|
||||
def gotoStage(self, stage, data=None):
|
||||
self.shipBrowser.recentFits = False
|
||||
if stage == 1:
|
||||
wx.PostEvent(self.Parent, Stage1Selected())
|
||||
elif stage == 2:
|
||||
@@ -573,6 +606,7 @@ class ShipBrowser(wx.Panel):
|
||||
self._stage3ShipName = ""
|
||||
self.fitIDMustEditName = -1
|
||||
self.filterShipsWithNoFits = False
|
||||
self.recentFits = False
|
||||
|
||||
self.racesFilter = {}
|
||||
|
||||
@@ -629,7 +663,8 @@ class ShipBrowser(wx.Panel):
|
||||
|
||||
def RefreshList(self, event):
|
||||
stage = self.GetActiveStage()
|
||||
if stage == 3 or stage == 4:
|
||||
|
||||
if stage in (3, 4, 5):
|
||||
self.lpane.RefreshList(True)
|
||||
event.Skip()
|
||||
|
||||
@@ -672,6 +707,7 @@ class ShipBrowser(wx.Panel):
|
||||
return self.racesFilter[race]
|
||||
|
||||
def stage1(self, event):
|
||||
self.navpanel.ToggleRecentShips(False, False)
|
||||
self._lastStage = self._activeStage
|
||||
self._activeStage = 1
|
||||
self.lastdata = 0
|
||||
@@ -727,6 +763,7 @@ class ShipBrowser(wx.Panel):
|
||||
def stage2Callback(self, data):
|
||||
if self.GetActiveStage() != 2:
|
||||
return
|
||||
self.navpanel.ToggleRecentShips(False, False)
|
||||
|
||||
categoryID = self._stage2Data
|
||||
ships = list(data[1])
|
||||
@@ -812,7 +849,7 @@ class ShipBrowser(wx.Panel):
|
||||
return info[1]
|
||||
|
||||
def stage3(self, event):
|
||||
|
||||
self.navpanel.ToggleRecentShips(False, False)
|
||||
self.lpane.ShowLoading(False)
|
||||
|
||||
# If back is False, do not append to history. This could be us calling
|
||||
@@ -921,6 +958,10 @@ class ShipBrowser(wx.Panel):
|
||||
self.Layout()
|
||||
|
||||
def importStage(self, event):
|
||||
"""
|
||||
The import stage handles both displaying fits after importing as well as displaying recent fits. todo: need to
|
||||
reconcile these two better into a more uniform function, right now hacked together to get working
|
||||
"""
|
||||
self.lpane.ShowLoading(False)
|
||||
|
||||
self.navpanel.ShowNewFitButton(False)
|
||||
@@ -934,29 +975,26 @@ class ShipBrowser(wx.Panel):
|
||||
|
||||
fits = event.fits
|
||||
|
||||
# sort by ship name, then fit name
|
||||
fits.sort(key=lambda _fit: (_fit.ship.item.name, _fit.name))
|
||||
|
||||
self.lastdata = fits
|
||||
self.lpane.Freeze()
|
||||
self.lpane.RemoveAllChildren()
|
||||
|
||||
if fits:
|
||||
for fit in fits:
|
||||
shipTrait = fit.ship.item.traits.traitText if (fit.ship.item.traits is not None) else ""
|
||||
# empty string if no traits
|
||||
shipItem = fit[3]
|
||||
shipTrait = shipItem.traits.traitText if (shipItem.traits is not None) else ""
|
||||
|
||||
self.lpane.AddWidget(FitItem(
|
||||
self.lpane,
|
||||
fit.ID,
|
||||
fit[0],
|
||||
(
|
||||
fit.ship.item.name,
|
||||
shipItem.name,
|
||||
shipTrait,
|
||||
fit.name,
|
||||
fit.booster,
|
||||
fit.modified,
|
||||
fit[1],
|
||||
False,
|
||||
fit[2]
|
||||
),
|
||||
fit.ship.item.ID,
|
||||
shipItem.ID,
|
||||
))
|
||||
self.lpane.RefreshList(doFocus=False)
|
||||
self.lpane.Thaw()
|
||||
@@ -1534,7 +1572,6 @@ class FitItem(SFItem.SFBrowserItem):
|
||||
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.mainFrame.Bind(GE.FIT_CHANGED, self.OnFitChanged)
|
||||
self.Bind(wx.EVT_MOUSE_CAPTURE_LOST, self.OnMouseCaptureLost)
|
||||
|
||||
self.animTimerId = wx.NewId()
|
||||
@@ -1567,13 +1604,6 @@ class FitItem(SFItem.SFBrowserItem):
|
||||
self.Bind(wx.EVT_RIGHT_UP, self.OnContextMenu)
|
||||
self.Bind(wx.EVT_MIDDLE_UP, self.OpenNewTab)
|
||||
|
||||
def OnFitChanged(self, evt):
|
||||
if evt.fitID == self.fitID:
|
||||
sFit = Fit.getInstance()
|
||||
fit = sFit.getFit(evt.fitID)
|
||||
if fit.modified:
|
||||
self.timestamp = fit.modified
|
||||
|
||||
def OpenNewTab(self, evt):
|
||||
self.selectFit(newTab=True)
|
||||
|
||||
@@ -1960,6 +1990,15 @@ class FitItem(SFItem.SFBrowserItem):
|
||||
state = SFItem.SB_ITEM_NORMAL
|
||||
return state
|
||||
|
||||
def Refresh(self):
|
||||
activeFit = self.mainFrame.getActiveFit()
|
||||
if activeFit == self.fitID:
|
||||
sFit = Fit.getInstance()
|
||||
fit = sFit.getFit(activeFit)
|
||||
self.timestamp = fit.modified
|
||||
|
||||
SFItem.SFBrowserItem.Refresh(self)
|
||||
|
||||
def RenderBackground(self):
|
||||
rect = self.GetRect()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user