NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)