shipsPanel.py (8681B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\overviewSettings\shipsPanel.py 2 from carbonui.primitives.container import Container 3 from carbonui import uiconst 4 from carbonui.control.checkbox import Checkbox 5 from eve.client.script.ui.control.entries.util import GetFromClass 6 from eve.client.script.ui.control.eveIcon import MenuIcon 7 from eve.client.script.ui.control.eveScroll import Scroll 8 from eve.client.script.ui.inflight.overview import overviewConst 9 from eve.client.script.ui.inflight.bracketsAndTargets.bracketNameFormatting import GetAllowedLabelTypes 10 from eve.client.script.ui.inflight.overviewSettings.overviewBracketLabelPreview import OverviewBracketLabelPreview 11 from eve.client.script.ui.inflight.overviewSettings.overviewSettingEntries import OverviewLastDropEntry, ShipEntryLinebreak, GetLastEntryToAdd, ShipEntry 12 from eve.client.script.ui.inflight.overviewSettings.panelUtils import OnContentDragEnter, OnContentDragExit, ResetCbOnReloadingOverviewProfile 13 from eve.client.script.ui.inflight.overviewShipLabelObject import ShipLabel 14 from localization import GetByLabel 15 import overviewPresets.overviewSettingsConst as oConst 16 from utillib import KeyVal 17 18 class ShipsPanel(Container): 19 default_name = 'shipsPanel' 20 default_state = uiconst.UI_HIDDEN 21 __notifyevents__ = ['OnReloadingOverviewProfile'] 22 23 def ApplyAttributes(self, attributes): 24 Container.ApplyAttributes(self, attributes) 25 self.cachedScrollPos = 0.0 26 self.overviewPresetSvc = sm.GetService('overviewPresetSvc') 27 self.settingCheckboxes = [] 28 labelPreview = OverviewBracketLabelPreview(parent=self, lineBreakFunc=self.AddLineBreak) 29 shiptop = Container(name='filtertop', parent=self, align=uiconst.TOTOP, height=57) 30 cb = Checkbox(text=GetByLabel('UI/Overview/HideTickerIfInAlliance'), parent=shiptop, settingsKey=oConst.SETTING_HIDE_CORP_TICKER, checked=self.overviewPresetSvc.GetSettingValueOrDefaultFromName(oConst.SETTING_HIDE_CORP_TICKER, False), callback=self.CheckBoxChange, settingsPath=('user', 'overview'), align=uiconst.TOTOP, pos=(0, 30, 0, 16)) 31 cb.padLeft = 8 32 self.hideTickerIfInAlliance = cb 33 self.settingCheckboxes.append(cb) 34 self.ConstructPresetMenu(shiptop) 35 self.ConstructScroll() 36 sm.RegisterNotify(self) 37 38 def ConstructPresetMenu(self, shiptop): 39 presetMenu = MenuIcon() 40 presetMenu.GetMenu = self.GetShipLabelMenu 41 presetMenu.left = 6 42 presetMenu.top = 10 43 presetMenu.hint = '' 44 shiptop.children.append(presetMenu) 45 46 def ConstructScroll(self): 47 self.scroll = Scroll(name='shipPanelScroll', parent=self) 48 self.scroll.multiSelect = 0 49 self.scroll.sr.content.OnDropData = self.MoveStuff 50 self.scroll.sr.content.OnDragEnter = lambda *args: OnContentDragEnter(self.scroll, *args) 51 self.scroll.sr.content.OnDragExit = lambda *args: OnContentDragExit(self.scroll, *args) 52 53 def CheckBoxChange(self, checkbox, node = None): 54 settingsKey = checkbox.GetSettingsKey() 55 if settingsKey == oConst.SETTING_HIDE_CORP_TICKER: 56 sm.GetService('bracket').UpdateLabels() 57 elif settingsKey == 'shiplabels' and node: 58 sm.GetService('stateSvc').ChangeShipLabels(node.flag, checkbox.checked) 59 60 def GetShipLabelMenu(self): 61 return [(GetByLabel('UI/Overview/ShipLabelFormatPilotCC'), self.SetDefaultShipLabel, ('default',)), (GetByLabel('UI/Overview/ShipLabelFormatPilotCCAA'), self.SetDefaultShipLabel, ('ally',)), (GetByLabel('UI/Overview/ShipLabelFormatCCPilotAA'), self.SetDefaultShipLabel, ('corpally',))] 62 63 def SetDefaultShipLabel(self, setting): 64 sm.GetService('stateSvc').SetDefaultShipLabel(setting) 65 self.LoadShips() 66 67 def LoadShips(self, selected = None): 68 shipLabels = sm.GetService('stateSvc').GetShipLabels() 69 allLabels = sm.GetService('stateSvc').GetAllShipLabels() 70 corpTickerHidden = sm.GetService('overviewPresetSvc').GetSettingValueOrDefaultFromName(oConst.SETTING_HIDE_CORP_TICKER, False) 71 self.hideTickerIfInAlliance.SetChecked(corpTickerHidden) 72 hints = {overviewConst.LABEL_TYPE_NONE: '', 73 overviewConst.LABEL_TYPE_CORP: GetByLabel('UI/Common/CorpTicker'), 74 overviewConst.LABEL_TYPE_ALLIANCE: GetByLabel('UI/Shared/AllianceTicker'), 75 overviewConst.LABEL_TYPE_PILOT: GetByLabel('UI/Common/PilotName'), 76 overviewConst.LABEL_TYPE_SHIP_NAME: GetByLabel('UI/Common/ShipName'), 77 overviewConst.LABEL_TYPE_SHIP_TYPE: GetByLabel('UI/Common/ShipType')} 78 comments = {overviewConst.LABEL_TYPE_NONE: GetByLabel('UI/Overview/AdditionalTextForCorpTicker'), 79 overviewConst.LABEL_TYPE_CORP: GetByLabel('UI/Overview/OnlyShownForPlayerCorps'), 80 overviewConst.LABEL_TYPE_ALLIANCE: GetByLabel('UI/Overview/OnlyShownWhenAvailable')} 81 newlabels = [ label for label in allLabels if label[overviewConst.LABEL_TYPE] not in [ alabel[overviewConst.LABEL_TYPE] for alabel in shipLabels ] ] 82 shipLabels += newlabels 83 scrolllist = [] 84 allowedLabelTypes = GetAllowedLabelTypes() 85 for i, flag in enumerate(shipLabels): 86 data = KeyVal() 87 labelType = flag[overviewConst.LABEL_TYPE] 88 if labelType not in allowedLabelTypes: 89 continue 90 if labelType == overviewConst.LABEL_TYPE_LINEBREAK: 91 data.canDrag = True 92 data.label = GetByLabel('UI/Overview/Linebreak') 93 data.removeFunc = self.RemoveLinebreak 94 scrolllist.append(GetFromClass(ShipEntryLinebreak, data)) 95 continue 96 hint = hints[labelType] 97 data.label = hint 98 data.checked = flag[overviewConst.LABEL_STATE] 99 data.cfgname = 'shiplabels' 100 data.retval = flag 101 data.flag = flag 102 data.canDrag = True 103 data.hint = hint 104 data.comment = comments.get(labelType, '') 105 data.OnChange = self.CheckBoxChange 106 data.isSelected = selected == i 107 scrolllist.append(GetFromClass(ShipEntry, data)) 108 109 scrolllist += GetLastEntryToAdd(scrolllist) 110 self.scroll.Load(contentList=scrolllist, scrollTo=self.cachedScrollPos) 111 maxLeft = 140 112 for shipEntry in self.scroll.GetNodes(): 113 if shipEntry.panel and not isinstance(shipEntry.panel, OverviewLastDropEntry): 114 postLeft = shipEntry.panel.sr.label.left + shipEntry.panel.sr.label.textwidth + 4 115 maxLeft = max(maxLeft, postLeft) 116 117 for shipEntry in self.scroll.GetNodes(): 118 if shipEntry.panel and not isinstance(shipEntry.panel, (OverviewLastDropEntry, ShipEntryLinebreak)): 119 shipEntry.panel.postCont.left = maxLeft 120 121 def AddLineBreak(self, *args): 122 shipLabels = sm.GetService('stateSvc').GetShipLabels() 123 x = ShipLabel(labelType=overviewConst.LABEL_TYPE_LINEBREAK).GetDict() 124 shipLabels.insert(0, x) 125 settings.user.overview.Set(oConst.SETTINGS_SHIP_LABELS, shipLabels) 126 self.RefreshShipLabels() 127 128 def RefreshShipLabels(self): 129 sm.GetService('stateSvc').cachedStateSettings = {} 130 sm.GetService('bracket').UpdateLabels() 131 sm.ScatterEvent('OnShipLabelsUpdated') 132 self.LoadShips() 133 134 def RemoveLinebreak(self, idx): 135 shipLabels = sm.GetService('stateSvc').GetShipLabels() 136 if len(shipLabels) - 1 < idx: 137 return 138 if shipLabels[idx][overviewConst.LABEL_TYPE] == overviewConst.LABEL_TYPE_LINEBREAK: 139 shipLabels.pop(idx) 140 settings.user.overview.Set(oConst.SETTINGS_SHIP_LABELS, shipLabels) 141 self.RefreshShipLabels() 142 143 def MoveStuff(self, dragObj, entries, idx = -1, *args): 144 self.MoveShipLabel(idx) 145 146 def MoveShipLabel(self, idx = None, *args): 147 self.cachedScrollPos = self.scroll.GetScrollProportion() 148 selected = self.scroll.GetSelected() 149 if selected: 150 selected = selected[0] 151 if idx is not None: 152 if idx != selected.idx: 153 if selected.idx < idx: 154 newIdx = idx - 1 155 else: 156 newIdx = idx 157 else: 158 return 159 else: 160 newIdx = max(0, selected.idx - 1) 161 sm.GetService('stateSvc').ChangeLabelOrder(selected.idx, newIdx) 162 self.LoadShips(newIdx) 163 164 def OnReloadingOverviewProfile(self): 165 ResetCbOnReloadingOverviewProfile(self.overviewPresetSvc, self.settingCheckboxes)