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

browserMyCorpStructures.py (18651B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\structure\structureBrowser\browserMyCorpStructures.py
      2 import gametime
      3 import uthread
      4 from carbon.common.script.util.timerstuff import AutoTimer
      5 from carbonui.control.dragResizeCont import DragResizeCont
      6 from carbonui.primitives.container import Container
      7 from carbonui.util.bunch import Bunch
      8 from eve.client.script.ui.control.eveScroll import Scroll
      9 from eve.client.script.ui.control.scrollUtil import TabFinder
     10 from carbonui.control.tabGroup import TabGroup
     11 from eve.client.script.ui.shared.fitting.fittingUtil import EatSignalChangingErrors
     12 from eve.client.script.ui.structure import ChangeSignalConnect
     13 import eve.client.script.ui.structure.structureBrowser.browserUIConst as browserUIConst
     14 from eve.client.script.ui.structure.structureBrowser.controllers.filterContController import FilterContControllerMyStructures
     15 from eve.client.script.ui.structure.structureBrowser.controllers.structureEntryController import StructureEntryController
     16 from eve.client.script.ui.structure.structureBrowser.corpStructureSettingsCont import CorpStructureSettingsCont
     17 from eve.client.script.ui.structure.structureBrowser.entries.structureEntryMyCorp import StructureEntryMyCorp, StructureEntryMyCorpAllProfiles
     18 from eve.client.script.ui.structure.structureBrowser.filterCont import FilterContMyStructures
     19 from eve.client.script.ui.structure.structureBrowser.filterContUtil import IsFilteredOutByText, IsFilteredOutByServices
     20 from eve.client.script.ui.structure.structureBrowser.moonminingEventsCont import MoonminingEventsCont
     21 from eve.client.script.ui.structure.structureBrowser.structureProfiles import StructureProfiles
     22 from eve.client.script.ui.structure.structureSettings.structureSettingsWnd import StructureProfileSettingCont
     23 from localization import GetByLabel
     24 import carbonui.const as uiconst
     25 from eve.client.script.ui.control.eveLabel import EveCaptionSmall, EveLabelMedium, EveLabelLarge
     26 
     27 class BrowserMyCorpStructures(Container):
     28     default_name = 'BrowserMyStructures'
     29 
     30     def __init__(self, **kwargs):
     31         self.structureBrowserController = None
     32         self.allStructuresProfileController = None
     33         self.currentProfileLoaded = None
     34         self.tabs = None
     35         self.myFilterContController = None
     36         self.isInitialized = False
     37         self.display = False
     38         self.structureListAndProfileSettingsCont = None
     39         self.profileSettings = None
     40         self.moonMiningEvents = None
     41         self.corpStructureSettings = None
     42         self.profileDescLabel = None
     43         self.profileNameLabel = None
     44         super(BrowserMyCorpStructures, self).__init__(**kwargs)
     45 
     46     def ApplyAttributes(self, attributes):
     47         super(BrowserMyCorpStructures, self).ApplyAttributes(attributes)
     48         self.myFilterContController = FilterContControllerMyStructures()
     49         self.structureBrowserController = attributes.structureBrowserController
     50 
     51     def OnTabSelect(self):
     52         self.LoadPanel()
     53 
     54     def LoadPanel(self):
     55         self.display = True
     56         if self.isInitialized:
     57             return
     58         self.isInitialized = True
     59         self.allStructuresProfileController = sm.GetService('structureControllers').GetAllStructuresProfileController()
     60         self.ChangeSignalConnection(connect=True)
     61         profileParent = DragResizeCont(name='profileParent', parent=self, align=uiconst.TOLEFT_PROP, minSize=0.1, maxSize=0.5, defaultSize=0.5, settingsID='myStructuresSplitter')
     62         StructureProfiles(parent=profileParent, allStructuresProfileController=self.allStructuresProfileController, structureBrowserController=self.structureBrowserController)
     63         self.structureListAndProfileSettingsCont = Container(name='structureListAndProfileSettingsCont', parent=self, padding=(4, 0, 4, 4))
     64         self.LoadTabs()
     65 
     66     def ChangeSignalConnection(self, connect = True):
     67         signalAndCallback = [(self.structureBrowserController.on_profile_selected, self.OnProfileSelected),
     68          (self.allStructuresProfileController.on_profile_saved, self.OnProfileSaved),
     69          (self.structureBrowserController.on_profile_deleted, self.OnProfileDeleted),
     70          (self.structureBrowserController.on_corp_structures_changed, self.OnCorpStructuresChanged)]
     71         ChangeSignalConnect(signalAndCallback, connect)
     72 
     73     def LoadTabs(self):
     74         self.VerifySelectedProfileIdIsValid()
     75         profileID = self.structureBrowserController.GetSelectedProfileID()
     76         self.structureListAndProfileSettingsCont.Flush()
     77         myStructuresPanel = MyStructuresPanel(parent=self.structureListAndProfileSettingsCont, allStructuresProfileController=self.allStructuresProfileController, structureBrowserController=self.structureBrowserController, filterContController=self.myFilterContController)
     78         tabs = [(GetByLabel('UI/StructureBrowser/StructuresWithProfile'),
     79           myStructuresPanel,
     80           None,
     81           'myStructuresPanel',
     82           None,
     83           GetByLabel('UI/StructureBrowser/StructuresWithProfileHint'))]
     84         if profileID != browserUIConst.ALL_PROFILES:
     85             self.profileSettings = StructureProfileSettingCont(parent=self.structureListAndProfileSettingsCont, allStructuresProfileController=self.allStructuresProfileController, structureBrowserController=self.structureBrowserController)
     86             profileTab = (GetByLabel('UI/StructureBrowser/ProfileSettings'),
     87              self.profileSettings,
     88              None,
     89              'profileSettings',
     90              None,
     91              GetByLabel('UI/StructureBrowser/ProfileSettingsHint'))
     92             tabs.append(profileTab)
     93         self.moonMiningEvents = MoonminingEventsCont(parent=self.structureListAndProfileSettingsCont, structureBrowserController=self.structureBrowserController)
     94         moonMiningTab = (GetByLabel('UI/Moonmining/UpcomingExtractionsTab'),
     95          self.moonMiningEvents,
     96          None,
     97          'moonMiningEvents',
     98          None,
     99          GetByLabel('UI/Moonmining/UpcomingExtractionsTabHint'))
    100         tabs.append(moonMiningTab)
    101         if profileID == browserUIConst.ALL_PROFILES:
    102             self.corpStructureSettings = CorpStructureSettingsCont(parent=self.structureListAndProfileSettingsCont, structureBrowserController=self.structureBrowserController)
    103             corpSettingsTab = (GetByLabel('UI/StructureBrowser/CorpSettingsTab'),
    104              self.corpStructureSettings,
    105              None,
    106              'corpStructureSettings',
    107              None,
    108              GetByLabel('UI/StructureBrowser/CorpSettingsTabHint'))
    109             tabs.append(corpSettingsTab)
    110         self.tabs = TabGroup(parent=self.structureListAndProfileSettingsCont, tabs=tabs, height=32, idx=0, padLeft=0, groupID='profile_structuresAndsettings', padTop=0)
    111         self.profileDescLabel = EveLabelMedium(parent=self.structureListAndProfileSettingsCont, name='profileDescLabel', align=uiconst.TOTOP, idx=0)
    112         self.profileNameLabel = EveCaptionSmall(parent=self.structureListAndProfileSettingsCont, name='profileNameLabel', align=uiconst.TOTOP, idx=0)
    113         self.SetProfileName()
    114 
    115     def VerifySelectedProfileIdIsValid(self):
    116         profileID = self.structureBrowserController.GetSelectedProfileID()
    117         validProfileIDs = sm.GetService('structureControllers').GetValidProfileIDs()
    118         isProfileValid = profileID not in validProfileIDs
    119         if isProfileValid:
    120             self.structureBrowserController.SelectProfile(browserUIConst.ALL_PROFILES, sendSignal=False)
    121             self.currentProfileLoaded = browserUIConst.ALL_PROFILES
    122 
    123     def ForceProfileSettingsSelected(self):
    124         if self.tabs:
    125             self.tabs.AutoSelect()
    126 
    127     def OnProfileSelected(self, profileID):
    128         self.SetProfileName()
    129         if self.currentProfileLoaded is None or self._ProfileTypeHasChanged(profileID):
    130             self.LoadTabs()
    131         self.currentProfileLoaded = profileID
    132 
    133     def _ProfileTypeHasChanged(self, profileID):
    134         if profileID == self.currentProfileLoaded:
    135             return False
    136         if browserUIConst.ALL_PROFILES not in (profileID, self.currentProfileLoaded):
    137             return False
    138         return True
    139 
    140     def OnProfileSaved(self, profileID):
    141         self.structureBrowserController.SetProfileChangedValue(False)
    142         self.SetProfileName()
    143 
    144     def OnProfileDeleted(self, profileID, selectedProfileChanged):
    145         if selectedProfileChanged:
    146             self.LoadTabs()
    147 
    148     def OnCorpStructuresChanged(self):
    149         if self.structureBrowserController.GetSelectedTab() != MyStructuresPanel.TAB_ID:
    150             return
    151         self.LoadTabs()
    152 
    153     def SetProfileName(self):
    154         if self.structureBrowserController.GetSelectedProfileID() == browserUIConst.ALL_PROFILES:
    155             name = GetByLabel('UI/Structures/Browser/AnyProfile')
    156             desc = ''
    157         else:
    158             selectedProfileID = self.structureBrowserController.GetSelectedProfileID()
    159             selectedProfileController = self.allStructuresProfileController.GetSlimProfileController(selectedProfileID)
    160             name = selectedProfileController.GetProfileName()
    161             desc = selectedProfileController.GetProfileDescription()
    162         self.profileNameLabel.text = name
    163         self.profileDescLabel.text = desc
    164         self.profileNameLabel.display = False
    165         self.profileDescLabel.display = False
    166 
    167     def Close(self):
    168         if self.isInitialized:
    169             with EatSignalChangingErrors(errorMsg='BrowserMyCorpStructures'):
    170                 self.ChangeSignalConnection(connect=False)
    171         self.structureBrowserController = None
    172         Container.Close(self)
    173 
    174 
    175 class MyStructuresPanel(Container):
    176     TAB_ID = 'STRUCTURES'
    177 
    178     def __init__(self, **kwargs):
    179         self.serviceChangedTimestamp = None
    180         self.filterContController = None
    181         self.allStructuresProfileController = None
    182         self.allStructuresProfileController = None
    183         self.topPanel = None
    184         self.profileNameLabel = None
    185         self.comboCont = None
    186         self.scroll = None
    187         self.serviceChangedTimer = None
    188         self.structureBrowserController = None
    189         self.isInitialized = False
    190         super(MyStructuresPanel, self).__init__(**kwargs)
    191 
    192     def ApplyAttributes(self, attributes):
    193         self.serviceChangedTimestamp = gametime.GetWallclockTimeNow()
    194         Container.ApplyAttributes(self, attributes)
    195         self.filterContController = attributes.filterContController
    196         self.allStructuresProfileController = attributes.allStructuresProfileController
    197         self.structureBrowserController = attributes.structureBrowserController
    198         self.ChangeSignalConnection(connect=True)
    199 
    200     def ChangeSignalConnection(self, connect = True):
    201         signalAndCallback = [(self.structureBrowserController.on_profile_selected, self.OnProfileSelected),
    202          (self.allStructuresProfileController.on_profile_saved, self.OnProfileAssigned),
    203          (self.allStructuresProfileController.on_profile_assigned, self.OnProfileAssigned),
    204          (self.filterContController.on_text_filter_changed, self.OnTextFilterChanged),
    205          (self.filterContController.on_lower_power_filter_changed, self.OnLowerPowerChanged),
    206          (self.filterContController.structureTypeFilterController.on_filter_changed, self.OnStructuresChanged),
    207          (self.filterContController.serviceFilterController.on_filter_changed, self.OnServiceSettingsChanged)]
    208         ChangeSignalConnect(signalAndCallback, connect)
    209 
    210     def OnTabSelect(self):
    211         self.structureBrowserController.SetTabSelected(self.TAB_ID)
    212         self.LoadPanel()
    213 
    214     def LoadPanel(self):
    215         if self.isInitialized:
    216             self.UpdateScroll()
    217             return
    218         self.topPanel = Container(name='topPanel', parent=self, align=uiconst.TOTOP, height=20, padding=(0, 6, 0, 6))
    219         self.profileNameLabel = EveLabelLarge(text='', parent=self.topPanel, state=uiconst.UI_DISABLED, align=uiconst.TOPLEFT, top=2)
    220         self.comboCont = FilterContMyStructures(name='filterContMyStructures', parent=self, filterContController=self.filterContController, padBottom=8)
    221         self.scroll = Scroll(parent=self, id='MyStructuresScroll')
    222         self.scroll.sr.fixedColumns = StructureEntryMyCorp.GetFixedColumns()
    223         self.scroll.OnSelectionChange = self.OnScrollSelectionChange
    224         self.scroll.GetTabStops = self.GetTabStops
    225         self.UpdateScroll()
    226         self.isInitialized = True
    227 
    228     def GetTabStops(self, headertabs, idx = None):
    229         decoClass = self.GetDecoClass()
    230         return TabFinder().GetTabStops(self.scroll.sr.nodes, headertabs, decoClass, idx=idx)
    231 
    232     def LoadProfile(self, profileID):
    233         self.UpdateScroll()
    234 
    235     def UpdateScroll(self):
    236         if self.structureBrowserController.GetSelectedTab() != self.TAB_ID:
    237             return
    238         self.SetLabelProfileName()
    239         decoClass = self.GetDecoClass()
    240         scrollList, somethingFilteredOut = self.GetScrollList(decoClass=decoClass)
    241         if somethingFilteredOut:
    242             noContentHint = GetByLabel('UI/Structures/Browser/NoStructuresFoundWithFilters')
    243         else:
    244             noContentHint = GetByLabel('UI/Structures/Browser/NoStructuresFound')
    245         structureServicesChecked = self._GetServicesChecked()
    246         self.scroll.LoadContent(contentList=scrollList, headers=decoClass.GetHeaders(structureServicesChecked), noContentHint=noContentHint)
    247 
    248     def SetLabelProfileName(self):
    249         currentProfileID = self.structureBrowserController.GetSelectedProfileID()
    250         c = self.allStructuresProfileController.GetSlimProfileController(currentProfileID)
    251         if c:
    252             text = c.GetProfileName()
    253             displayTopPanel = True
    254         else:
    255             text = ''
    256             displayTopPanel = False
    257         self.profileNameLabel.text = text
    258         self.topPanel.display = displayTopPanel
    259 
    260     def IsFilteredOut(self, structureController):
    261         currentProfileID = self.structureBrowserController.GetSelectedProfileID()
    262         if currentProfileID != browserUIConst.ALL_PROFILES and currentProfileID != structureController.GetProfileID():
    263             return True
    264         if self._IsFilteredOutByPower(structureController):
    265             return True
    266         if self._IsFilteredOutByStructureType(structureController):
    267             return True
    268         if self._IsFilteredOutByServices(structureController):
    269             return True
    270         if self._IsFilteredOutByText(structureController):
    271             return True
    272         return False
    273 
    274     def _IsFilteredOutByPower(self, structureController):
    275         if not self.filterContController.OnlyShowLowPower():
    276             return False
    277         return not structureController.IsLowPower()
    278 
    279     def _IsFilteredOutByStructureType(self, structureController):
    280         if not self.filterContController.structureTypeFilterController.IsActive():
    281             return False
    282         groupingsChecked = self.filterContController.GetStructureTypesChecked()
    283         structureTypeID = structureController.GetTypeID()
    284         if structureTypeID in groupingsChecked:
    285             return False
    286         else:
    287             return True
    288 
    289     def _IsFilteredOutByText(self, structureController):
    290         filterText = self.filterContController.GetTextFilter()
    291         return IsFilteredOutByText(structureController, filterText)
    292 
    293     def _IsFilteredOutByServices(self, structureController):
    294         filterContController = self.filterContController
    295         return IsFilteredOutByServices(structureController, filterContController)
    296 
    297     def GetScrollList(self, decoClass):
    298         scrollList = []
    299         structureControllers = self.structureBrowserController.GetMyStructures()
    300         somethingFilteredOut = False
    301         structureServicesChecked = self._GetServicesChecked()
    302         for controller in structureControllers:
    303             if self.IsFilteredOut(controller):
    304                 somethingFilteredOut = True
    305                 continue
    306             slimProfileController = self.allStructuresProfileController.GetSlimProfileController(controller.GetProfileID())
    307             node = Bunch(controller=controller, decoClass=decoClass, columnSortValues=decoClass.GetColumnSortValues(controller, slimProfileController, structureServicesChecked), charIndex=controller.GetName(), slimProfileController=slimProfileController, GetSortValue=decoClass.GetSortValue, structureServicesChecked=structureServicesChecked)
    308             scrollList.append(node)
    309 
    310         return (scrollList, somethingFilteredOut)
    311 
    312     def _GetServicesChecked(self):
    313         if self.filterContController.AreServiceFiltersDisbled():
    314             structureServicesChecked = browserUIConst.ALL_SERVICES
    315         else:
    316             structureServicesChecked = self.filterContController.GetServicesChecked()
    317         return structureServicesChecked
    318 
    319     def GetDecoClass(self):
    320         allProfilesVisible = self.structureBrowserController.GetSelectedProfileID() == browserUIConst.ALL_PROFILES
    321         if allProfilesVisible:
    322             return StructureEntryMyCorpAllProfiles
    323         else:
    324             return StructureEntryMyCorp
    325 
    326     def OnScrollSelectionChange(self, entries):
    327         pass
    328 
    329     def OnServiceCombo(self, *args):
    330         self.UpdateScroll()
    331 
    332     def OnTextFilterChanged(self):
    333         self.UpdateScroll()
    334 
    335     def OnLowerPowerChanged(self):
    336         self.UpdateScroll()
    337 
    338     def OnStructureTypeChanged(self):
    339         self.UpdateScroll()
    340 
    341     def OnStructuresChanged(self, *args):
    342         self.UpdateScroll()
    343 
    344     def OnServiceSettingsChanged(self, *args):
    345         uthread.new(self.OnServiceSettingsChanged_thread)
    346 
    347     def OnServiceSettingsChanged_thread(self):
    348         DELAY = 500
    349         recentlyLoaded = gametime.GetTimeDiff(self.serviceChangedTimestamp, gametime.GetWallclockTimeNow()) / const.MSEC < DELAY
    350         if recentlyLoaded:
    351             self.serviceChangedTimer = AutoTimer(DELAY, self.DoUpdateScroll)
    352         else:
    353             self.DoUpdateScroll()
    354 
    355     def DoUpdateScroll(self):
    356         self.serviceChangedTimestamp = gametime.GetWallclockTimeNow()
    357         self.serviceChangedTimer = None
    358         self.UpdateScroll()
    359 
    360     def OnProfileSelected(self, profileID):
    361         if not self or self.destroyed:
    362             return
    363         if self.structureBrowserController.GetSelectedTab() == self.TAB_ID:
    364             self.LoadProfile(profileID)
    365 
    366     def OnProfileAssigned(self, profileID):
    367         self.UpdateScroll()
    368 
    369     def Close(self):
    370         with EatSignalChangingErrors(errorMsg='MyStructuresPanel'):
    371             self.ChangeSignalConnection(connect=False)
    372         self.filterContController = None
    373         self.allStructuresProfileController = None
    374         self.structureBrowserController = None
    375         Container.Close(self)