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

tabPresetsPanel.py (15465B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\overviewSettings\tabPresetsPanel.py
      2 import evetypes
      3 import overviewPresets.overviewSettingsConst as osConst
      4 from carbonui import ButtonVariant, Density, TextColor, uiconst
      5 from carbonui.button.const import HEIGHT_NORMAL
      6 from carbonui.button.group import ButtonGroup
      7 from carbonui.control.button import Button
      8 from carbonui.control.combo import Combo
      9 from carbonui.control.tabGroup import TabGroup
     10 from carbonui.primitives.container import Container
     11 from carbonui.util.sortUtil import SortListOfTuples
     12 from collections import defaultdict
     13 from eve.client.script.parklife.overview import overviewSignals
     14 from eve.client.script.parklife.state import GetNPCGroups
     15 from eve.client.script.parklife.tacticalConst import get_groups
     16 from eve.client.script.ui import eveThemeColor
     17 from eve.client.script.ui.control import eveLabel
     18 from eve.client.script.ui.control.entries.util import GetFromClass
     19 from eve.client.script.ui.control.eveScroll import Scroll
     20 from eve.client.script.ui.control.listgroup import ListGroup
     21 from eve.client.script.ui.inflight.overview.overviewUtil import GetFilterComboOptions
     22 from eve.client.script.ui.inflight.overviewSettings.overviewSettingEntries import OverviewTabPresetEntry
     23 from eve.client.script.ui.inflight.overviewSettings.statesPanel import StatesPanel
     24 from eve.client.script.ui.quickFilter import QuickFilterEdit
     25 from localization import GetByLabel
     26 from overviewPresets import overviewSettingsConst
     27 from player_messaging.client.ui_message import prompt_player_fsd_dialog
     28 from utillib import KeyVal
     29 FILTER_STATES = 'filterstates'
     30 FILTER_TYPES = 'filtertypes'
     31 
     32 class TabPresetPanel(Container):
     33     default_name = 'tabPresetPanel'
     34     default_state = uiconst.UI_HIDDEN
     35     __notifyevents__ = ['OnOverviewPresetsChanged']
     36 
     37     def ApplyAttributes(self, attributes):
     38         super(TabPresetPanel, self).ApplyAttributes(attributes)
     39         self.specialGroups = GetNPCGroups()
     40         self.bracketTexturesForGroupID = defaultdict(set)
     41         self.presetSvc = sm.GetService('overviewPresetSvc')
     42         eveLabel.EveLabelLarge(parent=self, text=GetByLabel('UI/Overview/FilterToEdit'), align=uiconst.TOTOP, padTop=8)
     43         topCont = Container(parent=self, align=uiconst.TOTOP, padding=(0, 4, 0, 8), height=HEIGHT_NORMAL)
     44         self.presetCombo = Combo(name='presetCombo', parent=topCont, align=uiconst.TOLEFT, callback=self.OnPresetCombo)
     45         self.deleteButton = Button(parent=topCont, align=uiconst.TOLEFT, padLeft=4, label=GetByLabel('UI/Common/Delete'), func=self.OnDeleteButton, variant=ButtonVariant.GHOST)
     46         overviewSignals.on_preset_saved.connect(self.OnOverviewPresetsChanged)
     47         overviewSignals.on_preset_saved_as.connect(self.OnOveriewPresetSavedAs)
     48         overviewSignals.on_preset_created.connect(self.OnOverviewPresetsChanged)
     49         overviewSignals.on_preset_deleted.connect(self.OnOverviewPresetsChanged)
     50         overviewSignals.on_preset_restored.connect(self.OnOverviewPresetsChanged)
     51         self.tabGroup = TabGroup(name='overviewstatesTab', height=18, align=uiconst.TOTOP, parent=self, groupID='overviewfilterTab', autoselecttab=0, padTop=8, padBottom=0)
     52         self.statesPanel = StatesPanel(parent=self)
     53         self.tabGroup.AddTab(GetByLabel('UI/Overview/TypesShown'), None, self, FILTER_TYPES)
     54         self.tabGroup.AddTab(GetByLabel('UI/Overview/Exceptions'), None, self, FILTER_STATES)
     55         self.ConstructFilterCont()
     56         self.scroll = Scroll(name='presetScroll', parent=self)
     57         self.scroll.multiSelect = 0
     58         self.scroll.SelectAll = self.SelectAll
     59         self.buttonGroup = ButtonGroup(parent=self, idx=0, padTop=8)
     60         self.revertButton = self.buttonGroup.AddButton(GetByLabel('UI/Common/Buttons/Revert'), self.OnRevertButton)
     61         self.saveButton = self.buttonGroup.AddButton(GetByLabel('UI/Common/Buttons/Save'), self.OnSaveButton)
     62         self.saveAsButton = self.buttonGroup.AddButton(GetByLabel('UI/Common/Buttons/SaveAs'), self.OnSaveAsButton)
     63         self.PopulatePresetsCombo()
     64         self.UpdateButtonVisibility()
     65 
     66     def OnOveriewPresetSavedAs(self, presetName, newPresetName):
     67         self.OnOverviewPresetsChanged()
     68         if presetName == self.GetSelectedPresetName():
     69             self.presetCombo.SelectItemByValue(newPresetName)
     70 
     71     def OnDeleteButton(self, *args):
     72         self.presetSvc.DeletePreset(self.GetSelectedPresetName())
     73 
     74     def OnRevertButton(self, *args):
     75         if prompt_player_fsd_dialog('RevertOverviewPresetChanges', {}, uiconst.YESNO) == uiconst.ID_YES:
     76             self.presetSvc.RevertUnsaved(self.GetSelectedPresetName())
     77 
     78     def OnSaveButton(self, *args):
     79         self.presetSvc.SavePreset(self.GetSelectedPresetName())
     80 
     81     def OnSaveAsButton(self, *args):
     82         self.presetSvc.SavePresetAs(self.GetSelectedPresetName())
     83 
     84     def OnOverviewPresetsChanged(self, *args):
     85         self.PopulatePresetsCombo()
     86         self.UpdateButtonVisibility()
     87         self.tabGroup.ReloadVisible()
     88 
     89     def PopulatePresetsCombo(self):
     90         presetID = self.presetCombo.GetValue()
     91         self.presetCombo.LoadOptions(GetFilterComboOptions())
     92         self.presetCombo.SelectItemByValue(presetID or self.presetSvc.GetActiveOverviewPresetName())
     93 
     94     def OnPresetCombo(self, combo, presetDisplayName, presetName):
     95         self._LoadPreset(presetName)
     96 
     97     def ConstructFilterCont(self):
     98         self.filterCont = Container(name='filterCont', parent=self, align=uiconst.TOTOP, height=32, padding=(0, 16, 0, 8))
     99         Button(parent=self.filterCont, label=GetByLabel('UI/Common/SelectAll'), func=self.SelectAll, align=uiconst.TOLEFT, density=Density.COMPACT, variant=ButtonVariant.GHOST)
    100         Button(parent=self.filterCont, label=GetByLabel('UI/Common/DeselectAll'), func=self.DeselectAll, align=uiconst.TOLEFT, density=Density.COMPACT, variant=ButtonVariant.GHOST, padLeft=4)
    101         self.groupQuickFilter = QuickFilterEdit(name='search', parent=self.filterCont, pos=(5, 0, 150, 0), align=uiconst.TOPRIGHT)
    102         self.groupQuickFilter.ReloadFunction = self.LoadFilteredTypes
    103 
    104     def Load(self, key):
    105         if key == FILTER_TYPES:
    106             self.scroll.display = True
    107             self.statesPanel.display = False
    108             self.filterCont.display = True
    109             self.LoadTypes()
    110         elif key == FILTER_STATES:
    111             self.scroll.display = False
    112             self.statesPanel.display = True
    113             self.filterCont.display = False
    114             self.statesPanel.Load()
    115 
    116     def CheckBoxChange(self, checkbox, node):
    117         changeList = [(checkbox.GetSettingsKey(), node.retval, checkbox.checked)]
    118         self.presetSvc.ChangeSettings(changeList=changeList, presetName=self.GetSelectedPresetName())
    119 
    120     def LoadPanel(self):
    121         self.tabGroup.AutoSelect()
    122         self.PopulatePresetsCombo()
    123 
    124     def LoadFilteredTypes(self, *args):
    125         self.LoadTypes()
    126 
    127     def LoadPreset(self, presetName):
    128         self.presetCombo.SelectItemByValue(presetName, triggerCallback=True)
    129 
    130     def _LoadPreset(self, presetName):
    131         self.presetCombo.SelectItemByValue(presetName)
    132         self.UpdateButtonVisibility()
    133         self.statesPanel.SetPresetName(presetName)
    134         if self.tabGroup.IsVisible() and self.tabGroup.GetSelectedArgs() in (FILTER_TYPES, FILTER_STATES):
    135             self.tabGroup.ReloadVisible()
    136 
    137     def UpdateButtonVisibility(self):
    138         presetName = self.GetSelectedPresetName()
    139         isUnsaved = self.presetSvc.IsUnsavedPreset(presetName)
    140         isDefaultName = self.presetSvc.IsDefaultPresetName(presetName)
    141         if isUnsaved:
    142             self.revertButton.Enable()
    143         else:
    144             self.revertButton.Disable()
    145         if isUnsaved and not isDefaultName:
    146             self.saveButton.Enable()
    147         else:
    148             self.saveButton.Disable()
    149         if not isDefaultName:
    150             self.deleteButton.Show()
    151         else:
    152             self.deleteButton.Hide()
    153 
    154     def LoadTypes(self):
    155         filterText = self.groupQuickFilter.GetValue()
    156         categoryList = self.GetListOfCategories(filterText=filterText.lower())
    157         sortCat = categoryList.keys()
    158         sortCat.sort()
    159         scrolllist = []
    160         userSettings = self.presetSvc.GetPresetGroupsFromKey(self.GetSelectedPresetName())
    161         for catName in sortCat:
    162             checkedCounter = 0
    163             groupItems = categoryList[catName]
    164             for groupID, name in groupItems:
    165                 if isinstance(groupID, list):
    166                     for each in groupID:
    167                         if each in userSettings:
    168                             checkedCounter += 1
    169                             break
    170 
    171                 else:
    172                     checkedCounter += int(groupID in userSettings)
    173 
    174             color = self._GetListGroupLabelColor(checkedCounter, groupItems)
    175             posttext = '<color=%s>%s / %s</color>' % (color, checkedCounter, len(groupItems))
    176             label = '<color=%s>%s</color>' % (color, catName)
    177             data = {'GetSubContent': self.GetCatSubContent,
    178              'label': label,
    179              'MenuFunction': self.GetSubFolderMenu,
    180              'id': ('GroupSel', catName),
    181              'groupItems': groupItems,
    182              'showlen': 0,
    183              'sublevel': 0,
    184              'state': 'locked',
    185              'presetName': self.GetSelectedPresetName(),
    186              'showicon': 'hide',
    187              'posttext': posttext}
    188             scrolllist.append(GetFromClass(ListGroup, data))
    189 
    190         self.scroll.Load(contentList=scrolllist)
    191 
    192     def _GetListGroupLabelColor(self, checkedCounter, groupItems):
    193         if checkedCounter >= len(groupItems):
    194             return eveThemeColor.THEME_ACCENT.hex_argb
    195         elif checkedCounter > 0:
    196             return TextColor.HIGHLIGHT.hex_argb
    197         else:
    198             return TextColor.SECONDARY.hex_argb
    199 
    200     def GetSelectedPresetName(self):
    201         return self.presetCombo.GetValue()
    202 
    203     def GetSubFolderMenu(self, node):
    204         m = [None, (GetByLabel('UI/Common/SelectAll'), self.SelectGroup, (node, True)), (GetByLabel('UI/Common/DeselectAll'), self.SelectGroup, (node, False))]
    205         return m
    206 
    207     def SelectGroup(self, node, isSelect):
    208         groups = []
    209         for entry in node.groupItems:
    210             if type(entry[0]) == list:
    211                 for entry1 in entry[0]:
    212                     groups.append(entry1)
    213 
    214             else:
    215                 groups.append(entry[0])
    216 
    217         changeList = [(overviewSettingsConst.PRESET_SETTINGS_GROUPS, groups, isSelect)]
    218         self.presetSvc.ChangeSettings(changeList=changeList, presetName=self.GetSelectedPresetName())
    219 
    220     def GetCatSubContent(self, nodedata, newitems = 0):
    221         presetName = nodedata.presetName
    222         userSettings = self.presetSvc.GetPresetGroupsFromKey(presetName)
    223         scrolllist = []
    224         for groupID, name in nodedata.groupItems:
    225             texturePaths = set()
    226             if type(groupID) == list:
    227                 for each in groupID:
    228                     if each in userSettings:
    229                         checked = 1
    230                         break
    231                 else:
    232                     checked = 0
    233 
    234             else:
    235                 texturePaths = self.GetBracketTextureForGroupID(groupID)
    236                 name = evetypes.GetGroupNameByGroup(groupID)
    237                 checked = groupID in userSettings
    238             data = KeyVal()
    239             data.label = name
    240             data.sublevel = 1
    241             data.checked = checked
    242             data.cfgname = osConst.CONFIG_GROUPS
    243             data.retval = groupID
    244             data.OnChange = self.CheckBoxChange
    245             data.texturePaths = texturePaths
    246             entry = GetFromClass(OverviewTabPresetEntry, data)
    247             scrolllist.append((name, entry))
    248 
    249         scrolllist = SortListOfTuples(scrolllist)
    250         return scrolllist
    251 
    252     def GetBracketTextureForGroupID(self, groupID):
    253         if isinstance(groupID, list):
    254             return set()
    255         if groupID not in self.bracketTexturesForGroupID:
    256             texturePaths = self.FindBracketsForTypesInGroup(groupID)
    257             if texturePaths is None:
    258                 bracketData = sm.GetService('bracket').GetBracketDataByGroupID(groupID)
    259                 texturePaths = {bracketData.texturePath} if bracketData else set()
    260             self.bracketTexturesForGroupID[groupID] = texturePaths
    261         return self.bracketTexturesForGroupID[groupID]
    262 
    263     def FindBracketsForTypesInGroup(self, groupID):
    264         bracketSvc = sm.GetService('bracket')
    265         texturePaths = set()
    266         for eachTypeID in evetypes.GetTypeIDsByGroup(groupID):
    267             bracketData = bracketSvc.GetBracketDataByTypeID(eachTypeID)
    268             if not bracketData:
    269                 continue
    270             texturePaths.add(bracketData.texturePath)
    271 
    272         return texturePaths
    273 
    274     def GetListOfCategories(self, filterText = ''):
    275         categoryList = {}
    276         for _, groupid_name_tuple in get_groups():
    277             groupID, name = groupid_name_tuple
    278             if filterText and name.lower().find(filterText) < 0:
    279                 continue
    280             for cat, groupdict in self.specialGroups.iteritems():
    281                 for group, groupIDs in groupdict.iteritems():
    282                     if groupID in groupIDs:
    283                         catName = cat
    284                         groupID = groupIDs
    285                         name = group
    286                         break
    287                 else:
    288                     continue
    289 
    290                 break
    291             else:
    292                 catName = evetypes.GetCategoryNameByGroup(groupID)
    293 
    294             if catName not in categoryList:
    295                 categoryList[catName] = [(groupID, name)]
    296             elif (groupID, name) not in categoryList[catName]:
    297                 categoryList[catName].append((groupID, name))
    298 
    299         return categoryList
    300 
    301     def SelectAll(self, *args):
    302         presetName = self.GetSelectedPresetName()
    303         groups = set(self.presetSvc.GetSettingForGroups(presetName))
    304         for entry in self.scroll.GetNodes():
    305             if entry.__guid__ == 'listentry.Checkbox':
    306                 entry.checked = 1
    307                 if entry.panel:
    308                     entry.panel.Load(entry)
    309             if entry.__guid__ == 'listentry.Group':
    310                 for item in entry.groupItems:
    311                     if type(item[0]) == list:
    312                         groups.update(item[0])
    313                     else:
    314                         groups.add(item[0])
    315 
    316         if groups:
    317             self.presetSvc.SavePresetGroupFilters(list(groups), presetName=presetName)
    318 
    319     def DeselectAll(self, *args):
    320         toRemove = set()
    321         for entry in self.scroll.GetNodes():
    322             if entry.__guid__ == 'listentry.Checkbox':
    323                 entry.checked = 0
    324                 if entry.panel:
    325                     entry.panel.Load(entry)
    326             if entry.__guid__ == 'listentry.Group':
    327                 for item in entry.groupItems:
    328                     if type(item[0]) == list:
    329                         toRemove.update(item[0])
    330                     else:
    331                         toRemove.add(item[0])
    332 
    333         presetName = self.GetSelectedPresetName()
    334         currentGroups = set(self.presetSvc.GetSettingForGroups(presetName))
    335         newGroups = currentGroups - toRemove
    336         self.presetSvc.SavePresetGroupFilters(list(newGroups), presetName)
    337 
    338     def GetBtnWidth(self):
    339         btnWdith = 0
    340         for btn in self.buttonGroup.buttons:
    341             btnWdith += btn.width
    342 
    343         return btnWdith