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

overviewTabGroup.py (11672B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\overview\overviewTabGroup.py
      2 import eveicon
      3 import localization
      4 from carbon.common.script.util.commonutils import StripTags
      5 from carbonui import TextColor
      6 from carbonui.control.contextMenu.menuData import MenuData
      7 from carbonui.control.contextMenu.menuEntryData import MenuEntryData
      8 from eve.client.script.parklife.overview.default import categories
      9 from eve.client.script.ui import menuUtil
     10 from carbonui.control.tab import Tab
     11 from carbonui.control.tabGroup import TabGroup
     12 from eve.client.script.ui.inflight.overview import overviewSettings
     13 from eve.client.script.ui.inflight.overview.overviewMenuUtil import GetColumnVisibilitySubMenu
     14 from eve.client.script.ui.inflight.overview.overviewUtil import GetCustomFiltersSorted, GetDefaultFiltersByCategory
     15 from eve.client.script.ui.inflight.overviewSettings.overviewSettingsWnd import OverviewSettingsWnd
     16 from eve.client.script.ui.util.utilWindows import NamePopup
     17 from localization import GetByLabel
     18 from overviewPresets import overviewSettingsConst
     19 from overviewPresets.overviewSettingsConst import SETTING_OVERVIEW_PRESET_NAME, SETTING_BRACKET_PRESET_NAME, SETTING_TAB_NAME, BRACKET_FILTER_SHOWALL
     20 FILTERS_GROUPING_THRESHOLD = 10
     21 
     22 class OverviewTab(Tab):
     23 
     24     def ApplyAttributes(self, attributes):
     25         self.presetSvc = sm.GetService('overviewPresetSvc')
     26         return super(OverviewTab, self).ApplyAttributes(attributes)
     27 
     28     def LoadTooltipPanel(self, tooltipPanel, tab):
     29         tooltipPanel.LoadStandardSpacing()
     30         tooltipPanel.columns = 2
     31         wrapWidth = 150
     32         tooltipPanel.AddLabelMedium(text=localization.GetByLabel('UI/Overview/Filter'), wrapWidth=wrapWidth)
     33         tooltipPanel.AddLabelMedium(text=self._GetFilterLabel(), wrapWidth=wrapWidth, color=TextColor.HIGHLIGHT)
     34         description = self._GetFilterDescription()
     35         if description:
     36             tooltipPanel.AddLabelMedium(text=description, wrapWidth=2 * wrapWidth, colSpan=2, color=TextColor.SECONDARY, cellPadding=(8, 0, 8, 8))
     37         if self.presetSvc.IsBracketFilterDictatingTab(self.tabID):
     38             tooltipPanel.AddLabelMedium(text=localization.GetByLabel('UI/Overview/BracketFilter'), wrapWidth=wrapWidth)
     39             tooltipPanel.AddLabelMedium(text=self._GetBracketFilterLabel(), wrapWidth=wrapWidth, color=TextColor.HIGHLIGHT)
     40         if overviewSettings.show_debug_info.is_enabled():
     41             tooltipPanel.AddLabelMedium(text='tabID=%s' % self.tabID)
     42 
     43     def _GetBracketFilterLabel(self):
     44         tabSettings = self.presetSvc.GetTabSettings(self.tabID)
     45         bracketPresetName = tabSettings.get(SETTING_BRACKET_PRESET_NAME, None)
     46         if bracketPresetName:
     47             bracketLabel = self.presetSvc.GetPresetDisplayName(bracketPresetName)
     48         else:
     49             bracketLabel = localization.GetByLabel('UI/Overview/ShowAllBrackets')
     50         if overviewSettings.show_debug_info.is_enabled():
     51             bracketLabel += ' (presetName=%s)' % repr(bracketPresetName)
     52         return bracketLabel
     53 
     54     def _GetFilterLabel(self):
     55         presetName = self._GetPresetName()
     56         overviewLabel = self.presetSvc.GetPresetDisplayName(presetName)
     57         if overviewSettings.show_debug_info.is_enabled():
     58             overviewLabel += ' (presetName=%s)' % repr(presetName)
     59         return overviewLabel
     60 
     61     def _GetPresetName(self):
     62         tabSettings = self.presetSvc.GetTabSettings(self.tabID)
     63         presetName = tabSettings.get(SETTING_OVERVIEW_PRESET_NAME, None)
     64         return presetName
     65 
     66     def _GetFilterDescription(self):
     67         return self.presetSvc.GetDefaultOverviewDescription(self._GetPresetName())
     68 
     69     def GetMenu(self, *args):
     70         if self.presetSvc.IsReadOnly():
     71             return []
     72         ret = [MenuEntryData(GetByLabel('UI/Overview/Filter'), subMenuData=self.GetFiltersSubMenu)]
     73         if self.presetSvc.IsBracketFilterDictatingTab(self.tabID):
     74             ret.append(MenuEntryData(GetByLabel('UI/Overview/BracketFilter'), subMenuData=self.GetBracketFiltersSubMenu))
     75         ret.extend([None, MenuEntryData(GetByLabel('UI/Commands/ChangeName'), self.ChangeTabName), MenuEntryData(GetByLabel('UI/Generic/Columns'), subMenuData=lambda : GetColumnVisibilitySubMenu(self.tabID))])
     76         if len(self.presetSvc.GetSettingsByTabID()) > 1:
     77             ret.append(MenuEntryData(GetByLabel('UI/Overview/DeleteTab'), self.DeleteTab, menuGroupID=menuUtil.DESTRUCTIVEGROUP))
     78         ret.append(MenuEntryData(GetByLabel('UI/Overview/MoveTabTo'), subMenuData=self.GetMoveTabSubMenu()))
     79         return ret
     80 
     81     def GetMoveTabSubMenu(self):
     82         menuData = MenuData()
     83         menuData.AddEntry(GetByLabel('UI/Overview/NewWindow'), lambda : self.presetSvc.MoveTab(self.tabID))
     84         wndInstIDs = self.presetSvc.GetWindowInstanceIDs()
     85         if wndInstIDs:
     86             menuData.AddSeparator()
     87         for wndInstID in wndInstIDs:
     88             if wndInstID == self.presetSvc.GetWindowInstanceID(self.tabID):
     89                 continue
     90             menuData.AddEntry(self.GetWindowName(wndInstID), lambda iid = wndInstID: self.presetSvc.MoveTab(self.tabID, iid))
     91 
     92         return menuData
     93 
     94     def GetWindowName(self, windowInstanceID):
     95         tabIDs = self.presetSvc.GetTabIDs(windowInstanceID)
     96         name = ''
     97         for i, tabID in enumerate(tabIDs):
     98             if i == 3:
     99                 return name[:-3] + ' ...'
    100             tabName = self.presetSvc.GetTabSettings(tabID).get(SETTING_TAB_NAME)
    101             name += tabName + ' - '
    102 
    103         return name[:-3]
    104 
    105     def GetFiltersSubMenu(self):
    106         m = MenuData()
    107         self._AddCustomFilterEntries(m, self._AddFilterEntry)
    108         self._AddDefaultFilterEntries(m, self._AddFilterEntry)
    109         m.AddSeparator()
    110         m.AddEntry(GetByLabel('UI/Overview/EditCurrentFilter'), self.EditCurrentFilter, texturePath=eveicon.settings)
    111         return m
    112 
    113     def EditCurrentFilter(self):
    114         presetName = self.presetSvc.GetTabPreset(self.tabID)
    115         self._EditCurrentFilter(presetName)
    116 
    117     def EditCurrentBracketFilter(self):
    118         presetName = self.presetSvc.GetTabBracketPreset(self.tabID)
    119         self._EditCurrentFilter(presetName)
    120 
    121     def _EditCurrentFilter(self, presetName):
    122         wnd = OverviewSettingsWnd.GetIfOpen()
    123         if wnd:
    124             wnd.EditPreset(presetName)
    125         else:
    126             OverviewSettingsWnd.Open(presetName=presetName)
    127 
    128     def GetBracketFiltersSubMenu(self):
    129         m = MenuData()
    130         activePresetName = self.presetSvc.GetTabBracketPreset(self.tabID)
    131         m.AddEntry(GetByLabel('UI/Overview/ShowAllBrackets'), lambda : self.__ApplyFilter(BRACKET_FILTER_SHOWALL, overviewSettingsConst.SETTING_BRACKET_PRESET_NAME), texturePath=self._GetCheckmarkTexturePath(BRACKET_FILTER_SHOWALL, activePresetName))
    132         self._AddCustomFilterEntries(m, self._AddBracketFilterEntry)
    133         self._AddDefaultFilterEntries(m, self._AddBracketFilterEntry)
    134         m.AddSeparator()
    135         m.AddEntry(GetByLabel('UI/Overview/EditCurrentFilter'), self.EditCurrentBracketFilter, texturePath=eveicon.settings)
    136         return m
    137 
    138     def _AddCustomFilterEntries(self, m, addEntryFunc):
    139         presetNames = GetCustomFiltersSorted()
    140         menu = self._CheckAddAsSubgroup(m, len(presetNames), GetByLabel('UI/Overview/CustomFilters'))
    141         for presetName in presetNames:
    142             addEntryFunc(menu, presetName)
    143 
    144     def _CheckAddAsSubgroup(self, menuData, numPresets, groupName):
    145         if numPresets > FILTERS_GROUPING_THRESHOLD:
    146             subMenuData = MenuData()
    147             menuData.AddSeparator()
    148             menuData.AddEntry(groupName, subMenuData=subMenuData, texturePath=eveicon.filter)
    149             return subMenuData
    150         else:
    151             if numPresets:
    152                 menuData.AddCaption(groupName)
    153             return menuData
    154 
    155     def _AddDefaultFilterEntries(self, m, addEntryFunc):
    156         m.AddCaption(GetByLabel('UI/Overview/DefaultFilters'))
    157         presetNamesByCategoryID = GetDefaultFiltersByCategory()
    158         for presetName in presetNamesByCategoryID.get(categories.CATEGORY_NONE, []):
    159             addEntryFunc(m, presetName)
    160 
    161         for categoryID, presetNames in presetNamesByCategoryID.iteritems():
    162             self._AddDefaultCategorySubMenu(m, categoryID, presetNames, addEntryFunc)
    163 
    164     def _AddDefaultCategorySubMenu(self, menuData, categoryID, presetNames, addEntryFunc):
    165         if categoryID == categories.CATEGORY_NONE:
    166             return
    167         m = MenuData()
    168         for presetName in presetNames:
    169             addEntryFunc(m, presetName)
    170 
    171         menuData.AddEntry(categories.get_name(categoryID), subMenuData=m, texturePath=categories.get_icon(categoryID))
    172 
    173     def _AddFilterEntry(self, menu, presetName):
    174         activePresetName = self.presetSvc.GetTabPreset(self.tabID)
    175         menu.AddEntry(self.presetSvc.GetPresetDisplayName(presetName, showCategory=False), lambda p = presetName: self._ApplyFilter(p), texturePath=self._GetCheckmarkTexturePath(presetName, activePresetName), hint=self.presetSvc.GetDefaultOverviewDescription(presetName))
    176 
    177     def _AddBracketFilterEntry(self, menu, presetName):
    178         activePresetName = self.presetSvc.GetTabBracketPreset(self.tabID)
    179         menu.AddEntry(self.presetSvc.GetPresetDisplayName(presetName, showCategory=False), lambda p = presetName: self._ApplyBracketFilter(p), texturePath=self._GetCheckmarkTexturePath(presetName, activePresetName), hint=self.presetSvc.GetDefaultOverviewDescription(presetName))
    180 
    181     def _GetCheckmarkTexturePathIfSelected(self, presetName, settingsID):
    182         if settingsID == SETTING_OVERVIEW_PRESET_NAME:
    183             activePreset = self.presetSvc.GetTabPreset(self.tabID)
    184         elif settingsID == SETTING_BRACKET_PRESET_NAME:
    185             activePreset = self.presetSvc.GetTabBracketPreset(self.tabID)
    186         return self._GetCheckmarkTexturePath(presetName, activePreset)
    187 
    188     def _GetCheckmarkTexturePath(self, presetName, activePreset):
    189         if presetName == activePreset:
    190             return eveicon.checkmark
    191 
    192     def __ApplyFilter(self, presetName, settingsID):
    193         if settingsID == overviewSettingsConst.SETTING_OVERVIEW_PRESET_NAME:
    194             self._ApplyFilter(presetName)
    195         elif settingsID == overviewSettingsConst.SETTING_BRACKET_PRESET_NAME:
    196             self._ApplyBracketFilter(presetName)
    197 
    198     def _ApplyBracketFilter(self, presetName):
    199         self.presetSvc.SetTabBracketPreset(self.tabID, presetName)
    200         if self.IsSelected():
    201             self.presetSvc.LoadBracketPreset(presetName, False)
    202 
    203     def _ApplyFilter(self, presetName):
    204         self.presetSvc.SetTabPreset(self.tabID, presetName)
    205         if self.IsSelected():
    206             self.presetSvc.LoadPreset(presetName, False)
    207 
    208     def ChangeTabName(self):
    209         tabName = self.presetSvc.GetTabSettings(self.tabID)[SETTING_TAB_NAME]
    210         tabName = StripTags(tabName)
    211         tabName = NamePopup(localization.GetByLabel('UI/Commands/ChangeName'), localization.GetByLabel('/Carbon/UI/Controls/ScrollEntries/TypeInNewName'), tabName, maxLength=30)
    212         if tabName:
    213             self.presetSvc.SetTabName(self.tabID, tabName)
    214 
    215     def DeleteTab(self):
    216         self.presetSvc.DeleteTab(self.tabID)
    217 
    218 
    219 class OverviewTabGroup(TabGroup):
    220     default_name = 'OverviewTabGroup'
    221     default_tabClass = OverviewTab
    222 
    223     def GetUIID(self, name, tabID = None):
    224         tabsettings = sm.GetService('overviewPresetSvc').GetSettingsByTabID().get(tabID, {})
    225         presetName = tabsettings.get(SETTING_OVERVIEW_PRESET_NAME, None)
    226         if presetName:
    227             return super(OverviewTabGroup, self).GetUIID(name, presetName)
    228         return super(OverviewTabGroup, self).GetUIID(name, tabID)