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

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()