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