Show amount of items hidden in additions tabs
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -92,6 +92,7 @@ class Fit:
|
||||
"showShipBrowserTooltip": True,
|
||||
"marketSearchDelay": 250,
|
||||
"ammoChangeAll": False,
|
||||
"additionsLabels": 1,
|
||||
}
|
||||
|
||||
self.serviceFittingOptions = SettingsProvider.getInstance().getSettings(
|
||||
|
||||
Reference in New Issue
Block a user