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