def get_tooltip_field(self, field, context=None, target=None): if field == TooltipFields.relic_description: sim = context.sim if sim is None: return return sim.sim_info.relic_tracker.get_description_for_objects( self.owner, target) name = TooltipFieldsComplete(field).name existing_handle = self._ui_metadata_handles.get(name, None) if existing_handle is not None: (_, _, value) = self.owner.get_ui_metadata(existing_handle) return value tooltip_component = None tooltip_override = self.owner.get_tooltip_override() if tooltip_override is not None: tooltip_component = tooltip_override.get_component( types.TOOLTIP_COMPONENT) if tooltip_component is None: tooltip_component = self tooltip_text = None resolver = SingleObjectResolver(self.owner) for tooltip_data in tooltip_component.custom_tooltips: object_tests = tooltip_data.object_tests if object_tests and not object_tests.run_tests(resolver): continue tooltip_text = tooltip_data.tooltip_fields.get(field, tooltip_text) if tooltip_text is not None: if tooltip_text.text_tokens is not None: tokens = tooltip_text.text_tokens.get_tokens(resolver) if None in tokens: return else: tokens = () text = tooltip_text.text(*tokens) external_field_data_tuple = tooltip_component._external_field_to_data.get( name) if external_field_data_tuple: tooltip_override_data = tooltip_text.override_component_information if tooltip_override_data is not None: if tooltip_override_data.concatenation_type == TooltipFieldConcatenationType.CONCATENATE_BEFORE: text = LocalizationHelperTuning.get_separated_string_by_style( tooltip_override_data.concatenation_style, text, external_field_data_tuple.field_data) else: text = LocalizationHelperTuning.get_separated_string_by_style( tooltip_override_data.concatenation_style, external_field_data_tuple.field_data, text) if name == self.SUBTEXT_HANDLE: if tooltip_component._ui_metadata_handles: subtext = tooltip_component.get_state_strings(text) if subtext is not None: text = subtext handle = self.owner.add_ui_metadata(name, text) self._ui_metadata_handles[name] = handle return text
def update_object_tooltip(self): if not self.hovertip_requested: return if services.client_manager() is None: return caches.clear_all_caches() tooltip_component = None tooltip_override = self.owner.get_tooltip_override() if tooltip_override is not None: tooltip_component = tooltip_override.get_component( types.TOOLTIP_COMPONENT) if tooltip_component is None: tooltip_component = self old_handles = dict(self._ui_metadata_handles) try: self._ui_metadata_handles = {} subtext_field = None resolver = SingleObjectResolver(self.owner) if self.tooltip_tests.run_tests(resolver): for (name, value, tooltip_override_data ) in tooltip_component._ui_metadata_gen(): external_field_data_tuple = tooltip_component._external_field_to_data.get( name) if external_field_data_tuple: if tooltip_override_data is not None: if tooltip_override_data.concatenation_type == TooltipFieldConcatenationType.CONCATENATE_BEFORE: value = LocalizationHelperTuning.get_separated_string_by_style( tooltip_override_data.concatenation_style, value, external_field_data_tuple.field_data) else: value = LocalizationHelperTuning.get_separated_string_by_style( tooltip_override_data.concatenation_style, external_field_data_tuple.field_data, value) handle = self.owner.add_ui_metadata(name, value) self._ui_metadata_handles[name] = handle if name == self.SUBTEXT_HANDLE: subtext_field = value if tooltip_component._ui_metadata_handles: subtext = tooltip_component.get_state_strings( subtext_field) if subtext is not None: if self.SUBTEXT_HANDLE in self._ui_metadata_handles: self.owner.remove_ui_metadata( self._ui_metadata_handles[self.SUBTEXT_HANDLE]) handle = self.owner.add_ui_metadata( self.SUBTEXT_HANDLE, subtext) self._ui_metadata_handles[self.SUBTEXT_HANDLE] = handle for index_unused in tooltip_component._external_field_to_data.keys( ) - self._ui_metadata_handles.keys(): external_field_data = tooltip_component._external_field_to_data.get( index_unused) handle = self.owner.add_ui_metadata( index_unused, external_field_data.field_data) self._ui_metadata_handles[index_unused] = handle finally: for handle in old_handles.values(): self.owner.remove_ui_metadata(handle) self.owner.update_ui_metadata() if not self._ui_metadata_handles: self.owner.hover_tip = ui_protocols.UiObjectMetadata.HOVER_TIP_DISABLED self.owner.update_ui_metadata()