list_entry.py (6711B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\list_entry.py 2 import campaigns.client.v1.signals as campaigns_signals 3 import eveicon 4 import localization 5 from carbonui import Align, TextColor, ButtonStyle 6 from carbonui.primitives.container import Container 7 from carbonui.primitives.containerAutoSize import ContainerAutoSize 8 from carbonui.primitives.sprite import Sprite 9 from carbonui.text.styles import TextBody 10 from carbonui.uiconst import PickState, Density 11 from eve.client.script.ui import eveThemeColor 12 from eveformat import number as fmt_number 13 from jobboard.client.ui.claim_button import JobRewardClaimButton 14 from jobboard.client.ui.list_entry import JobListEntry 15 from jobboard.client.ui.reward_list_entry import JobRewardListEntry 16 from jobboard.client.ui.solar_system_chip import ClosestSolarSystemChip 17 from jobboard.client.ui.time_remaining import TimeRemainingIcon 18 from localization.formatters.timeIntervalFormatters import GetByLabel 19 20 class CampaignListEntry(JobListEntry): 21 22 def __init__(self, *args, **kwargs): 23 super(CampaignListEntry, self).__init__(*args, **kwargs) 24 25 def _construct_title_icons(self, container): 26 super(CampaignListEntry, self)._construct_title_icons(container) 27 icon_container = Container(parent=container, align=Align.TOLEFT, width=24, padRight=8) 28 Sprite(parent=icon_container, align=Align.CENTER, width=24, height=24, texturePath=self.job.icon_path, color=TextColor.SECONDARY) 29 30 def _construct_solar_system_chip(self): 31 closest_solar_system_id = self.job.solar_system_id 32 if closest_solar_system_id is None: 33 return 34 location_ids = self.job.get_location_ids() 35 if not self.job.is_committed or len(location_ids) <= 1: 36 return super(CampaignListEntry, self)._construct_solar_system_chip() 37 container = ContainerAutoSize(parent=self.left_container, align=Align.TORIGHT) 38 self._solar_system_chip = ClosestSolarSystemChip(parent=container, align=Align.CENTERRIGHT, align_content=Align.TOLEFT, solar_system_id=closest_solar_system_id, location_ids=location_ids, compact=True) 39 self._solar_system_chip.OnClick = self.OnClick 40 41 def _construct_attention_icons(self, parent): 42 container = ContainerAutoSize(name='attention_icon_cont', parent=parent, align=Align.TORIGHT, padLeft=4) 43 self._construct_time_remaining(container) 44 self._construct_claimable_rewards(container) 45 46 def _construct_claimable_rewards(self, parent): 47 icon_container = ContainerAutoSize(name='has_contributed_icon', parent=parent, align=Align.TORIGHT) 48 self._contributed_icon = Sprite(name='contributed_icon', parent=icon_container, texturePath=eveicon.contribution, align=Align.CENTER, pickState=PickState.ON, width=16, height=16, hint=localization.GetByLabel('UI/Corporations/FreelanceProjects/YouAreAParticipant'), color=eveThemeColor.THEME_FOCUS, display=bool(self.job.is_committed or self.job.has_claimable_rewards)) 49 50 def _construct_time_remaining(self, parent): 51 time_remaining_icon = TimeRemainingIcon(name='time_remaining_icon', parent=parent, align=Align.TORIGHT, job=self.job, padLeft=4) 52 time_remaining_icon.DelegateEvents(self) 53 54 55 class CampaignsRewardListEntry(JobRewardListEntry): 56 57 def _construct_title_icons(self, container): 58 super(CampaignsRewardListEntry, self)._construct_title_icons(container) 59 icon_container = Container(parent=container, align=Align.TOLEFT, width=24, padRight=8) 60 Sprite(parent=icon_container, align=Align.CENTER, width=24, height=24, texturePath=self.job.icon_path, color=self.job.theme_pack.main_color, opacity=0.75) 61 62 def _construct_claimable_assets(self): 63 if not self.job.has_claimable_rewards: 64 return 65 unclaimed_isk_info = self.job.unclaimed_isk_info 66 if unclaimed_isk_info.unclaimed_value: 67 self._construct_reward_icon_and_label(eveicon.isk, fmt_number(unclaimed_isk_info.unclaimed_value)) 68 unclaimed_lp_info = self.job.unclaimed_lp_info 69 if unclaimed_lp_info.unclaimed_value: 70 self._construct_reward_icon_and_label(eveicon.lp, fmt_number(unclaimed_lp_info.unclaimed_value)) 71 72 def _construct_claim_button(self, parent): 73 return CampaignsRewardEntryClaimButton(name='claim_button', parent=parent, align=Align.CENTERLEFT, density=Density.COMPACT, style=ButtonStyle.SUCCESS if self.job.is_completed else ButtonStyle.NORMAL, job=self.job, func=self.OnClaimButton) 74 75 76 class CampaignsRewardEntryClaimButton(JobRewardClaimButton): 77 78 def _register(self): 79 super(CampaignsRewardEntryClaimButton, self)._register() 80 campaigns_signals.on_reward_redeemed.connect(self._on_payment_redeemed) 81 campaigns_signals.on_redeem_reward_failed.connect(self._on_payment_failed) 82 83 def _unregister(self): 84 super(CampaignsRewardEntryClaimButton, self)._unregister() 85 campaigns_signals.on_reward_redeemed.disconnect(self._on_payment_redeemed) 86 campaigns_signals.on_redeem_reward_failed.disconnect(self._on_payment_failed) 87 88 def _on_payment_redeemed(self, objective_id, *args, **kwargs): 89 if objective_id != self._job.objective_id: 90 return 91 self.set_claimed() 92 93 def _on_payment_failed(self, objective_id, *args, **kwargs): 94 if objective_id != self._job.objective_id: 95 return 96 self.flag_error() 97 98 99 class CampaignsRewardClaimButton(CampaignsRewardEntryClaimButton): 100 101 def _get_claim_text(self): 102 return localization.GetByLabel('UI/Campaigns/ClaimRewardsBtn') 103 104 def update_button(self): 105 self._update() 106 107 108 class CampaignsRewardClaimCont(ContainerAutoSize): 109 STATE_BTN_VISIBLE = 1 110 STATE_TEXT_VISIBLE = 2 111 STATE_NOT_VISIBLE = 3 112 113 def ApplyAttributes(self, attributes): 114 super(CampaignsRewardClaimCont, self).ApplyAttributes(attributes) 115 job = attributes.job 116 self._construct_ui(job) 117 118 def _construct_ui(self, job): 119 self.claim_button = CampaignsRewardClaimButton(name='claim_button', parent=self, align=Align.CENTERLEFT, density=Density.COMPACT, job=job, func=lambda *args: job.claim_rewards(), padLeft=8) 120 self.claim_button.Hide() 121 self.claim_text = TextBody(name='claim_text', parent=self, align=Align.CENTERLEFT, text=GetByLabel('UI/Generic/Claimed'), color=TextColor.DISABLED, padLeft=8) 122 123 def update_ui(self, claim_state): 124 self.claim_button.update_button() 125 self.claim_text.Hide() 126 if claim_state == self.STATE_BTN_VISIBLE: 127 self.claim_button.Show() 128 elif claim_state == self.STATE_TEXT_VISIBLE: 129 self.claim_text.Show()