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

panelConts.py (8729B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\careerPortal\panels\panelConts.py
      2 import uthread2
      3 from carbonui import uiconst, const as uiconst
      4 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      5 from carbonui.uianimations import animations
      6 from careergoals.client.career_goal_svc import get_career_goals_svc
      7 from eve.client.script.ui import eveColor
      8 from eve.client.script.ui.shared.careerPortal import careerConst, cpSignals
      9 from eve.client.script.ui.shared.careerPortal.panels.auraCareerAssistancePanel import AuraCareerAssistancePanel, AuraCareerAssistancePanelActivity
     10 from eve.client.script.ui.shared.careerPortal.panels.auraVideoAssistancePanel import AuraVideoAssistancePanel
     11 from eve.client.script.ui.shared.careerPortal.panels.careerDetailsPanel import CareerDetailsPanel
     12 from eve.client.script.ui.shared.careerPortal.panels.goalDetailsPanel import GoalPanel, AuraGoalPanel
     13 from eve.client.script.ui.shared.careerPortal.util import are_freelance_projects_available
     14 from eveexceptions import EatsExceptions
     15 PANEL_ANIMATION_OFFSET = 100
     16 
     17 class BasePanelContainer(ContainerAutoSize):
     18     default_align = uiconst.TOTOP_NOPUSH
     19     default_alignMode = uiconst.TOTOP
     20     panels = []
     21 
     22     def __init__(self, initialState, *args, **kwargs):
     23         super(BasePanelContainer, self).__init__(*args, **kwargs)
     24         self.ConnectToSignals()
     25         self.OnCareerWindowStateChanged(initialState)
     26 
     27     @EatsExceptions('BasePanelContainer::ConnectToSignals')
     28     def ConnectToSignals(self):
     29         for signal, callback in self._GetSignals():
     30             signal.connect(callback)
     31 
     32     @EatsExceptions('BasePanelContainer::DisconnectFromSignals')
     33     def DisconnectFromSignals(self):
     34         for signal, callback in self._GetSignals():
     35             signal.disconnect(callback)
     36 
     37     def Close(self):
     38         self.DisconnectFromSignals()
     39         super(BasePanelContainer, self).Close()
     40 
     41     def _ConstructPanels(self):
     42         raise NotImplementedError
     43 
     44     def _GetSignals(self):
     45         return [(cpSignals.on_clicked_outside, self.OnClickedOutside), (careerConst.CAREER_WINDOW_STATE_SETTING.on_change, self.OnCareerWindowStateChanged)]
     46 
     47     def OnClickedOutside(self):
     48         self.AnimateOut()
     49 
     50     def OnCareerWindowStateChanged(self, newState):
     51         raise NotImplementedError
     52 
     53     def AnimateIn(self):
     54         timeOffset = 0
     55         self.parent.parent.parent.Enable()
     56         for panel in self.panels:
     57             panel.StopAnimations()
     58             panel.Show()
     59             panel.SetState(uiconst.UI_NORMAL)
     60             animations.FadeIn(panel, duration=0.75)
     61             animations.MorphScalar(panel, 'left', startVal=PANEL_ANIMATION_OFFSET, endVal=0, duration=0.4, timeOffset=timeOffset, curveType=uiconst.ANIM_SMOOTH)
     62             timeOffset += 0.2
     63 
     64     def AnimateOut(self, callback = None):
     65         timeOffset = 0
     66         for panel in self.panels:
     67             panel.StopAnimations()
     68             panel.SetState(uiconst.UI_DISABLED)
     69             animations.FadeOut(panel, duration=0.5, callback=panel.Hide)
     70             animations.MorphScalar(panel, 'left', startVal=0, endVal=PANEL_ANIMATION_OFFSET, duration=0.4, timeOffset=timeOffset, curveType=uiconst.ANIM_SMOOTH, callback=callback)
     71             timeOffset += 0.1
     72 
     73 
     74 class CareerViewPanels(BasePanelContainer):
     75     default_name = 'CareerViewPanels'
     76 
     77     def _ConstructPanels(self):
     78         if self.panels:
     79             return
     80         self.panels = []
     81         if are_freelance_projects_available():
     82             auraPanel = AuraCareerAssistancePanel(parent=self, color=eveColor.Color(eveColor.AURA_PURPLE).SetOpacity(0.8).GetRGBA(), bgColor=eveColor.Color(eveColor.AURA_PURPLE).SetBrightness(0.05).SetOpacity(0.9).GetRGBA(), top=32)
     83             self.panels.append(auraPanel)
     84 
     85     def OnCareerWindowStateChanged(self, newState):
     86         if newState == careerConst.CareerWindowState.CAREERS_VIEW:
     87             self._ConstructPanels()
     88             self.AnimateIn()
     89         else:
     90             self.AnimateOut()
     91 
     92 
     93 class ActivityViewPanels(BasePanelContainer):
     94     default_name = 'ActivityViewPanels'
     95 
     96     def _ConstructPanels(self):
     97         if self.panels:
     98             return
     99         careerDetailsPanel = CareerDetailsPanel(parent=self, color=eveColor.Color(eveColor.CRYO_BLUE).SetOpacity(0.8).GetRGBA(), bgColor=eveColor.Color(eveColor.CRYO_BLUE).SetBrightness(0.05).SetOpacity(0.9).GetRGBA())
    100         auraPanel = AuraCareerAssistancePanelActivity(parent=self, color=eveColor.Color(eveColor.AURA_PURPLE).SetOpacity(0.8).GetRGBA(), bgColor=eveColor.Color(eveColor.AURA_PURPLE).SetBrightness(0.05).SetOpacity(0.9).GetRGBA(), top=32)
    101         self.panels = [careerDetailsPanel, auraPanel]
    102 
    103     def OnCareerWindowStateChanged(self, newState):
    104         if newState == careerConst.CareerWindowState.ACTIVITIES_VIEW:
    105             self._ConstructPanels()
    106             self.AnimateIn()
    107         else:
    108             self.AnimateOut()
    109 
    110 
    111 class GoalViewPanels(BasePanelContainer):
    112     default_name = 'GoalViewPanels'
    113 
    114     def _GetSignals(self):
    115         superSignals = super(GoalViewPanels, self)._GetSignals()
    116         superSignals.extend([(careerConst.SELECTED_GOAL_SETTING.on_change, self.OnGoalSelected)])
    117         return superSignals
    118 
    119     def _ConstructPanels(self):
    120         if self.panels:
    121             return
    122         self.auraPanel = AuraVideoAssistancePanel(parent=self, color=eveColor.Color(eveColor.AURA_PURPLE).SetOpacity(0.8).GetRGBA(), bgColor=eveColor.Color(eveColor.AURA_PURPLE).SetBrightness(0.05).SetOpacity(0.9).GetRGBA())
    123         self.panels = [self.auraPanel]
    124 
    125     def OnGoalSelected(self, goalID):
    126         if not goalID:
    127             return
    128         self.AnimateOut()
    129 
    130     def OnCareerWindowStateChanged(self, newState):
    131         selectedGoal = careerConst.SELECTED_GOAL_SETTING.get()
    132         goals_in_group = get_career_goals_svc().get_goal_data_controller().get_goals_in_group(careerConst.SELECTED_CAREER_PATH_SETTING.get(), careerConst.SELECTED_ACTIVITY_SETTING.get())
    133         goal_ids = [ g.goal_id for g in goals_in_group ]
    134         if newState == careerConst.CareerWindowState.GOALS_VIEW and selectedGoal not in goal_ids:
    135             self._ConstructPanels()
    136             self.auraPanel.LoadActivity(careerConst.SELECTED_ACTIVITY_SETTING.get())
    137             self.AnimateIn()
    138         else:
    139             self.AnimateOut()
    140 
    141 
    142 class GoalDetailPanels(BasePanelContainer):
    143     default_name = 'GoalDetailPanels'
    144     _selectedGoal = None
    145     _loadingThread = None
    146     visible = False
    147 
    148     def __init__(self, *args, **kwargs):
    149         super(GoalDetailPanels, self).__init__(*args, **kwargs)
    150         self.OnGoalSelected(careerConst.SELECTED_GOAL_SETTING.get())
    151 
    152     def _ConstructPanels(self):
    153         if self.panels:
    154             return
    155         self.goalPanel = GoalPanel(parent=self, color=eveColor.Color(eveColor.CRYO_BLUE).SetOpacity(0.8).GetRGBA(), bgColor=eveColor.Color(eveColor.CRYO_BLUE).SetBrightness(0.05).SetOpacity(0.9).GetRGBA())
    156         self.auraGoalPanel = AuraGoalPanel(parent=self, top=24, color=eveColor.Color(eveColor.AURA_PURPLE).SetOpacity(0.8).GetRGBA(), bgColor=eveColor.Color(eveColor.AURA_PURPLE).SetBrightness(0.05).SetOpacity(0.9).GetRGBA())
    157         self.panels = [self.goalPanel, self.auraGoalPanel]
    158 
    159     def _GetSignals(self):
    160         superSignals = super(GoalDetailPanels, self)._GetSignals()
    161         superSignals.extend([(careerConst.SELECTED_GOAL_SETTING.on_change, self.OnGoalSelected)])
    162         return superSignals
    163 
    164     def OnCareerWindowStateChanged(self, state):
    165         if state != careerConst.CareerWindowState.GOALS_VIEW:
    166             self.AnimateOut()
    167             self.visible = False
    168 
    169     def OnClickedOutside(self):
    170         super(GoalDetailPanels, self).OnClickedOutside()
    171         self.visible = False
    172 
    173     def OnGoalSelected(self, goalID):
    174         if not goalID or careerConst.CAREER_WINDOW_STATE_SETTING.get() != careerConst.CareerWindowState.GOALS_VIEW:
    175             return
    176         self._ConstructPanels()
    177         if self._loadingThread is not None:
    178             self._loadingThread.Kill()
    179         if self.visible:
    180             self.AnimateOut(callback=lambda : uthread2.StartTasklet(self._SwitchGoal, goalID))
    181         else:
    182             self._LoadNewGoal(goalID)
    183 
    184     def _SwitchGoal(self, newGoalID):
    185         uthread2.Sleep(0.1)
    186         self._loadingThread = uthread2.StartTasklet(self.LoadDetails_thread, newGoalID)
    187 
    188     def _LoadNewGoal(self, goalID):
    189         self._loadingThread = uthread2.StartTasklet(self.LoadDetails_thread, goalID)
    190 
    191     def LoadDetails_thread(self, goal_id):
    192         goal = get_career_goals_svc().get_goal_data_controller().get_goal(goal_id)
    193         for panel in self.panels:
    194             panel.LoadGoal(goal)
    195 
    196         self.AnimateIn()
    197         self.visible = True