Show amount of items hidden in additions tabs

This commit is contained in:
DarkPhoenix
2019-10-01 22:22:10 +03:00
parent 0c2c0ac6ef
commit c94384acb8
12 changed files with 194 additions and 4 deletions

View File

@@ -20,6 +20,7 @@
# noinspection PyPackageRequirements
import wx
import gui.globalEvents as GE
from gui.bitmap_loader import BitmapLoader
from gui.builtinAdditionPanes.boosterView import BoosterView
from gui.builtinAdditionPanes.cargoView import CargoView
@@ -35,9 +36,10 @@ from gui.toggle_panel import TogglePanel
class AdditionsPane(TogglePanel):
def __init__(self, parent):
def __init__(self, parent, mainFrame):
TogglePanel.__init__(self, parent, force_layout=1)
self.mainFrame = mainFrame
self.SetLabel("Additions")
pane = self.GetContentPanel()
@@ -83,6 +85,8 @@ class AdditionsPane(TogglePanel):
self.notes = NotesView(self.notebook)
self.notebook.AddPage(self.notes, "Notes", image=notesImg, closeable=False)
self.mainFrame.Bind(GE.FIT_CHANGED, self.OnFitChanged)
self.notebook.SetSelection(0)
PANES = ["Drones", "Fighters", "Cargo", "Implants", "Boosters", "Projected", "Command", "Notes"]
@@ -106,3 +110,21 @@ class AdditionsPane(TogglePanel):
self.parent.SetSashInvisible(False)
self.parent.SetMinimumPaneSize(200)
self.parent.SetSashPosition(self.old_pos, True)
def OnFitChanged(self, event):
event.Skip()
activeFitID = self.mainFrame.getActiveFit()
if activeFitID is not None and activeFitID not in event.fitIDs:
return
self.updateExtraText()
def updateExtraText(self):
refresh = False
for i in range(self.notebook.GetPageCount()):
page = self.notebook.GetPage(i)
if hasattr(page, 'getTabExtraText'):
refresh = True
self.notebook.SetPageTitleExtra(i, page.getTabExtraText() or '', refresh=False)
if refresh:
self.notebook.tabs_container.AdjustTabsSize()
self.notebook.Refresh()

View File

@@ -226,3 +226,21 @@ class BoosterView(d.Display):
continue
boosters.append(booster)
return boosters
def getTabExtraText(self):
fitID = self.mainFrame.getActiveFit()
if fitID is None:
return None
sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
if fit is None:
return None
opt = sFit.serviceFittingOptions["additionsLabels"]
# Amount of active boosters
if opt == 1:
return ' ({})'.format(len([b for b in fit.boosters if b.active]))
# Total amount of boosters
elif opt == 2:
return ' ({})'.format(len(fit.boosters))
else:
return None

View File

@@ -214,3 +214,18 @@ class CargoView(d.Display):
continue
cargos.append(cargo)
return cargos
def getTabExtraText(self):
fitID = self.mainFrame.getActiveFit()
if fitID is None:
return None
sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
if fit is None:
return None
opt = sFit.serviceFittingOptions["additionsLabels"]
# Total amount of cargo items
if opt in (1, 2):
return ' ({})'.format(len(fit.cargo))
else:
return None

View File

@@ -247,3 +247,26 @@ class CommandView(d.Display):
self.mainFrame.command.Submit(cmd.GuiAddCommandFitsCommand(
fitID=self.mainFrame.getActiveFit(),
commandFitIDs=fitIDs))
def getTabExtraText(self):
fitID = self.mainFrame.getActiveFit()
if fitID is None:
return None
sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
if fit is None:
return None
opt = sFit.serviceFittingOptions["additionsLabels"]
# Amount of active command fits
if opt == 1:
amount = 0
for commandFit in fit.commandFits:
info = commandFit.getCommandInfo(fitID)
if info is not None and info.active:
amount += 1
return ' ({})'.format(amount)
# Total amount of command fits
elif opt == 2:
return ' ({})'.format(len(fit.commandFits))
else:
return None

View File

@@ -337,3 +337,27 @@ class DroneView(Display):
continue
drones.append(drone)
return drones
def getTabExtraText(self):
fitID = self.mainFrame.getActiveFit()
if fitID is None:
return None
sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
if fit is None:
return None
opt = sFit.serviceFittingOptions["additionsLabels"]
# Amount of active drones
if opt == 1:
amount = 0
for droneStack in fit.drones:
amount += droneStack.amountActive
return ' ({})'.format(int(amount))
# Total amount of drones
elif opt == 2:
amount = 0
for droneStack in fit.drones:
amount += droneStack.amount
return ' ({})'.format(int(amount))
else:
return None

View File

@@ -117,6 +117,24 @@ class FighterView(wx.Panel):
self.Refresh()
def getTabExtraText(self):
fitID = self.mainFrame.getActiveFit()
if fitID is None:
return None
sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
if fit is None:
return None
opt = sFit.serviceFittingOptions["additionsLabels"]
# Amount of active fighter squads
if opt == 1:
return ' ({})'.format(len([f for f in fit.fighters if f.active]))
# Total amount of fighter squads
elif opt == 2:
return ' ({})'.format(len(fit.fighters))
else:
return None
class FighterDisplay(d.Display):

View File

@@ -101,6 +101,23 @@ class ImplantView(wx.Panel):
self.mainFrame.command.Submit(cmd.GuiChangeImplantLocationCommand(
fitID=fitID, source=ImplantLocation.FIT if self.rbFit.GetValue() else ImplantLocation.CHARACTER))
def getTabExtraText(self):
fitID = self.mainFrame.getActiveFit()
if fitID is None:
return None
sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
if fit is None:
return None
opt = sFit.serviceFittingOptions["additionsLabels"]
# Amount of active implants
if opt == 1:
return ' ({})'.format(len([i for i in fit.appliedImplants if i.active]))
# Total amount of implants
elif opt == 2:
return ' ({})'.format(len(fit.appliedImplants))
else:
return None
class ImplantDisplay(d.Display):

View File

@@ -27,6 +27,7 @@ import gui.builtinAdditionPanes.droneView
import gui.display as d
import gui.fitCommands as cmd
import gui.globalEvents as GE
from eos.const import FittingModuleState
from eos.saveddata.drone import Drone as EosDrone
from eos.saveddata.fighter import Fighter as EosFighter
from eos.saveddata.fit import Fit as EosFit
@@ -397,3 +398,34 @@ class ProjectedView(d.Display):
fitID=self.mainFrame.getActiveFit(),
projectedFitIDs=fitIDs,
amount=1))
def getTabExtraText(self):
fitID = self.mainFrame.getActiveFit()
if fitID is None:
return None
sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
if fit is None:
return None
opt = sFit.serviceFittingOptions["additionsLabels"]
# Amount of active projected items
if opt == 1:
amount = 0
for projectedFit in fit.projectedFits:
info = projectedFit.getProjectionInfo(fitID)
if info is not None and info.active:
amount += 1
amount += len([m for m in fit.projectedModules if m.state > FittingModuleState.OFFLINE])
amount += len([d for d in fit.projectedDrones if d.amountActive > 0])
amount += len([f for f in fit.projectedFighters if f.active])
return ' ({})'.format(amount)
# Total amount of projected items
elif opt == 2:
amount = 0
amount += len(fit.projectedFits)
amount += len(fit.projectedModules)
amount += len(fit.projectedDrones)
amount += len(fit.projectedFighters)
return ' ({})'.format(amount)
else:
return None

View File

@@ -86,6 +86,10 @@ class PFGeneralPref(PreferenceView):
'When disabled, reloads charges just in selected modules. Action can be reversed by holding Ctrl or Alt key while changing charge.'))
mainSizer.Add(self.cbReloadAll, 0, wx.ALL | wx.EXPAND, 5)
self.rbAddLabels = wx.RadioBox(panel, -1, "Extra info in Additions panel tab names", wx.DefaultPosition, wx.DefaultSize, ["None", "Quantity of active items", "Quantity of all items"], 1, wx.RA_SPECIFY_COLS)
mainSizer.Add(self.rbAddLabels, 0, wx.EXPAND | wx.TOP | wx.RIGHT | wx.BOTTOM, 10)
self.rbAddLabels.Bind(wx.EVT_RADIOBOX, self.OnAddLabelsChange)
self.sFit = Fit.getInstance()
self.cbGlobalChar.SetValue(self.sFit.serviceFittingOptions["useGlobalCharacter"])
@@ -101,6 +105,7 @@ class PFGeneralPref(PreferenceView):
self.cbOpenFitInNew.SetValue(self.sFit.serviceFittingOptions["openFitInNew"])
self.cbShowShipBrowserTooltip.SetValue(self.sFit.serviceFittingOptions["showShipBrowserTooltip"])
self.cbReloadAll.SetValue(self.sFit.serviceFittingOptions["ammoChangeAll"])
self.rbAddLabels.SetSelection(self.sFit.serviceFittingOptions["additionsLabels"])
self.cbGlobalChar.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalCharStateChange)
self.cbDefaultCharImplants.Bind(wx.EVT_CHECKBOX, self.OnCBDefaultCharImplantsStateChange)
@@ -187,6 +192,9 @@ class PFGeneralPref(PreferenceView):
def onCBReloadAll(self, event):
self.sFit.serviceFittingOptions["ammoChangeAll"] = self.cbReloadAll.GetValue()
def OnAddLabelsChange(self, event):
self.sFit.serviceFittingOptions["additionsLabels"] = event.GetInt()
def getImage(self):
return BitmapLoader.getBitmap("prefs_settings", "gui")

View File

@@ -296,7 +296,14 @@ class ChromeNotebook(wx.Panel):
def SetPageTitle(self, i, text, refresh=True):
tab = self.tabs_container.tabs[i]
tab.text = text
tab.baseText = text
if refresh:
self.tabs_container.AdjustTabsSize()
self.Refresh()
def SetPageTitleExtra(self, i, text, refresh=True):
tab = self.tabs_container.tabs[i]
tab.extraText = text
if refresh:
self.tabs_container.AdjustTabsSize()
self.Refresh()
@@ -354,7 +361,8 @@ class _TabRenderer:
height = max(height, self.min_height)
self.disabled = False
self.text = text
self.baseText = text
self.extraText = ''
self.tab_size = (width, height)
self.closeable = closeable
self.selected = False
@@ -368,6 +376,10 @@ class _TabRenderer:
self.position = (0, 0) # Not used internally for rendering - helper for tab container
self.InitTab()
@property
def text(self):
return self.baseText + self.extraText
def SetPosition(self, position):
self.position = position

View File

@@ -162,7 +162,7 @@ class MainFrame(wx.Frame):
mainSizer.Add(self.browser_fitting_split, 1, wx.EXPAND | wx.LEFT, 2)
self.fitMultiSwitch = MultiSwitch(self.fitting_additions_split)
self.additionsPane = AdditionsPane(self.fitting_additions_split)
self.additionsPane = AdditionsPane(self.fitting_additions_split, self)
self.notebookBrowsers = ChromeNotebook(self.browser_fitting_split, False)

View File

@@ -92,6 +92,7 @@ class Fit:
"showShipBrowserTooltip": True,
"marketSearchDelay": 250,
"ammoChangeAll": False,
"additionsLabels": 1,
}
self.serviceFittingOptions = SettingsProvider.getInstance().getSettings(