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

corpStructureEntry.py (9753B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\cosmetics\structure\components\corpStructureEntry.py
      2 import eveformat.client
      3 from carbon.common.script.util.format import FmtAmt
      4 from carbonui import const as uiconst, TextColor
      5 from carbonui.control.checkbox import Checkbox
      6 from carbonui.fontconst import EVE_MEDIUM_FONTSIZE
      7 from carbonui.primitives.container import Container
      8 from carbonui.primitives.sprite import Sprite
      9 from eve.client.script.ui import eveColor
     10 from eve.client.script.ui.control.baseListEntry import BaseListEntryCustomColumns
     11 from eve.client.script.ui.control.eveLabel import EveLabelMedium
     12 from eve.client.script.ui.cosmetics.structure import const as paintToolConst
     13 from eve.client.script.ui.cosmetics.structure import paintToolSignals, paintToolSelections
     14 from eve.client.script.ui.cosmetics.structure.components.corpStructureStatePanel import CorpStructureStatePanel
     15 from eve.client.script.ui.structure.structureIcon import StructureIcon
     16 from localization import GetByLabel
     17 from structures import UPKEEP_STATE_FULL_POWER
     18 ROW_HEIGHT = 32
     19 STRUCTURE_ICON_SIZE = 16
     20 STRUCTURE_NAME_PADDING = 4
     21 PRICE_ICON_SIZE = 18
     22 PRICE_ICON_PADDING = 8
     23 LABEL_PARAMS = (EVE_MEDIUM_FONTSIZE, 0, 0)
     24 
     25 class CorpStructureEntry(BaseListEntryCustomColumns):
     26     default_name = 'corpStructureEntry'
     27 
     28     def __init__(self, *args, **kwargs):
     29         super(CorpStructureEntry, self).__init__(*args, **kwargs)
     30         self._structure_data = self.node.controller
     31         if self._structure_data.is_eligible_for_application():
     32             self.background_color = tuple(eveColor.MATTE_BLACK[:3]) + (0.25,)
     33         else:
     34             self.background_color = tuple(eveColor.WARNING_ORANGE[:3]) + (0.05,)
     35         self._add_column_select()
     36         self._add_column_name()
     37         self._add_column_location()
     38         self._add_column_type()
     39         self._add_column_state()
     40         self._add_column_price()
     41         paintToolSignals.on_structure_state_loaded.connect(self._on_structure_state_loaded)
     42         paintToolSignals.on_structure_selection_changed.connect(self._on_structure_selection_changed)
     43 
     44     def Close(self):
     45         paintToolSignals.on_structure_state_loaded.disconnect(self._on_structure_state_loaded)
     46         paintToolSignals.on_structure_selection_changed.disconnect(self._on_structure_selection_changed)
     47         super(CorpStructureEntry, self).Close()
     48 
     49     def Load(self, *args):
     50         super(CorpStructureEntry, self).Load(*args)
     51         if not CorpStructureEntry.is_row_enabled(self._structure_data):
     52             self.node.panel.Disable()
     53             self._name_label.color = TextColor.DISABLED
     54             self._location_label.color = TextColor.DISABLED
     55             self._type_label.color = TextColor.DISABLED
     56             self._cost_label.color = TextColor.DISABLED
     57 
     58     @staticmethod
     59     def is_row_enabled(structure_data):
     60         return structure_data.upkeep_state == UPKEEP_STATE_FULL_POWER and structure_data.is_eligible_for_painting()
     61 
     62     @staticmethod
     63     def get_column_sort_values(structure_data):
     64         price = structure_data.get_price_for_duration(paintToolSelections.SELECTED_DURATION)
     65         return (structure_data.instance_id in paintToolSelections.SELECTED_STRUCTURES,
     66          _strip_system_name(structure_data.structure_name, structure_data.location_name).lower(),
     67          structure_data.location_name,
     68          structure_data.type_name,
     69          _get_state_sort_order(structure_data),
     70          price if price is not None else 0)
     71 
     72     @staticmethod
     73     def get_sort_value(node, _column_id, _sort_direction, idx = None):
     74         return (node.columnSortValues[idx],) + tuple(node.columnSortValues)
     75 
     76     @staticmethod
     77     def get_headers():
     78         return ['',
     79          GetByLabel('UI/Common/Name'),
     80          GetByLabel('UI/Common/Location'),
     81          GetByLabel('UI/Common/Type'),
     82          GetByLabel('UI/Common/Status'),
     83          GetByLabel('UI/Common/Cost')]
     84 
     85     def _add_column_select(self):
     86         column = self.AddColumnContainer()
     87         self._checkbox = Checkbox(name='checkbox', parent=column, align=uiconst.CENTER, callback=self._on_checkbox_clicked)
     88         self._checkbox.SetChecked(self._structure_data.instance_id in paintToolSelections.SELECTED_STRUCTURES, report=False)
     89 
     90     def _add_column_name(self):
     91         column = self.AddColumnContainer()
     92         column.name = 'column_name'
     93         column.state = uiconst.UI_NORMAL
     94         text = _strip_system_name(self._structure_data.structure_name, self._structure_data.location_name)
     95         content_wrapper = Container(name='content_wrapper', parent=column, align=uiconst.TOALL, hint=text)
     96         StructureIcon(name='structureIcon_%s' % text.replace('<br>', '_'), parent=content_wrapper, align=uiconst.CENTERLEFT, typeID=self._structure_data.type_id, structureID=self._structure_data.instance_id, pos=(0,
     97          0,
     98          STRUCTURE_ICON_SIZE,
     99          STRUCTURE_ICON_SIZE), state=uiconst.UI_DISABLED)
    100         self._name_label = EveLabelMedium(name='name_label', parent=content_wrapper, align=uiconst.CENTERLEFT, text=text, left=STRUCTURE_ICON_SIZE + STRUCTURE_NAME_PADDING, autoFadeSides=paintToolConst.LABEL_FADEOUT)
    101 
    102     def _add_column_location(self):
    103         column = self.AddColumnContainer()
    104         column.name = 'column_location'
    105         column.state = uiconst.UI_NORMAL
    106         text = _get_location_text(self._structure_data)
    107         content_wrapper = Container(name='content_wrapper', parent=column, align=uiconst.TOALL, hint=text)
    108         self._location_label = EveLabelMedium(name='location_label', parent=content_wrapper, align=uiconst.CENTERLEFT, text=text, autoFadeSides=paintToolConst.LABEL_FADEOUT)
    109 
    110     def _add_column_type(self):
    111         column = self.AddColumnContainer()
    112         column.name = 'column_type'
    113         column.state = uiconst.UI_NORMAL
    114         text = self._structure_data.type_name
    115         content_wrapper = Container(name='content_wrapper', parent=column, align=uiconst.TOALL, hint=text)
    116         self._type_label = EveLabelMedium(name='type_label', parent=content_wrapper, align=uiconst.CENTERLEFT, text=text, autoFadeSides=paintToolConst.LABEL_FADEOUT)
    117 
    118     def _add_column_state(self):
    119         column = self.AddColumnContainer()
    120         column.name = 'column_state'
    121         column.state = uiconst.UI_NORMAL
    122         self._state_panel = CorpStructureStatePanel(self._structure_data, parent=column)
    123 
    124     def _add_column_price(self):
    125         column = self.AddColumnContainer()
    126         column.name = 'column_price'
    127         column.state = uiconst.UI_NORMAL
    128         content_wrapper = Container(name='content_wrapper', parent=column, align=uiconst.TOALL)
    129         price = self._structure_data.get_price_for_duration(paintToolSelections.SELECTED_DURATION)
    130         if price is not None:
    131             icon_cont = Container(parent=content_wrapper, name='iconCont', align=uiconst.TOLEFT, width=PRICE_ICON_SIZE, left=2)
    132             Sprite(parent=icon_cont, name='icon', align=uiconst.CENTER, width=PRICE_ICON_SIZE, height=PRICE_ICON_SIZE, texturePath='res:/UI/Texture/Icons/evermarks.png')
    133         text = FmtAmt(price) if price is not None else '-'
    134         column.hint = text
    135         self._cost_label = EveLabelMedium(name='cost_label', parent=content_wrapper, align=uiconst.CENTERLEFT, text=text, left=PRICE_ICON_PADDING + PRICE_ICON_SIZE, autoFadeSides=paintToolConst.LABEL_FADEOUT)
    136 
    137     def _on_checkbox_clicked(self, *_args):
    138         selected = self._checkbox.GetValue()
    139         if selected:
    140             paintToolSelections.add_selected_structure(self._structure_data)
    141         else:
    142             paintToolSelections.remove_selected_structure(self._structure_data)
    143         self.sr.node.columnSortValues = CorpStructureEntry.get_column_sort_values(self._structure_data)
    144 
    145     @staticmethod
    146     def GetColWidths(_node, idx = None):
    147         widths = []
    148         if idx is None or idx == 0:
    149             w = 31
    150             widths.append(w)
    151         if idx is None or idx == 1:
    152             w = 208
    153             widths.append(w)
    154         if idx is None or idx == 2:
    155             w = 91
    156             widths.append(w)
    157         if idx is None or idx == 3:
    158             w = 89
    159             widths.append(w)
    160         if idx is None or idx == 4:
    161             w = 151
    162             widths.append(w)
    163         if idx is None or idx == 5:
    164             w = 116
    165             widths.append(w)
    166         return widths
    167 
    168     @classmethod
    169     def GetDynamicHeight(cls, node, width = None):
    170         return ROW_HEIGHT
    171 
    172     def _on_structure_state_loaded(self, structure_id):
    173         if structure_id == self._structure_data.instance_id:
    174             self.node.columnSortValues = self.get_column_sort_values(self._structure_data)
    175 
    176     def _on_structure_selection_changed(self, modifier, structure_data):
    177         if modifier == paintToolSignals.SELECTION_MODIFIER_CLEAR_ALL:
    178             self._checkbox.SetChecked(isChecked=False, report=False)
    179             return
    180         if not self._structure_data == structure_data:
    181             return
    182         self._checkbox.SetChecked(isChecked=modifier == paintToolSignals.SELECTION_MODIFIER_ADDED, report=False)
    183 
    184 
    185 def _get_location_text(data):
    186     return '%s %s' % (eveformat.solar_system_security_status(data.location_id), data.location_name)
    187 
    188 
    189 def _strip_system_name(name, location_name):
    190     if name.startswith(location_name):
    191         name = name.replace('%s - ' % location_name, '')
    192     return name
    193 
    194 
    195 def _get_state_sort_order(structure_data):
    196     if not structure_data.is_eligible_for_painting():
    197         return -3
    198     elif structure_data.is_abandoned():
    199         return -2
    200     elif structure_data.is_low_power():
    201         return -1
    202     elif structure_data.license_id is not None:
    203         return 0
    204     elif structure_data.is_ready_for_painting():
    205         return 1
    206     else:
    207         return -10