def _CreateArguments(self, setting: UISettingsShared.SettingWrapper, currentValue: typing.Any, showDialogArguments: typing.Dict[str, typing.Any], *args, **kwargs) -> typing.Dict[str, typing.Any]: dialogArguments = dict() dialogOwner = showDialogArguments.get("owner") dialogButtons = kwargs[ "dialogButtons"] # type: typing.List[DialogButton] dialogResponses = list( ) # type: typing.List[ui_dialog.UiDialogResponse] for dialogButton in dialogButtons: # type: DialogButton dialogResponses.append(dialogButton.GenerateDialogResponse()) textString = self._GetDescriptionText( setting) # type: localization.LocalizedString dialogArguments["owner"] = dialogOwner dialogArguments["title"] = Language.MakeLocalizationStringCallable( self._GetTitleText(setting)) dialogArguments["text"] = Language.MakeLocalizationStringCallable( textString) dialogArguments["text_ok"] = Language.MakeLocalizationStringCallable( self._GetAcceptButtonText()) dialogArguments["ui_responses"] = dialogResponses return dialogArguments
def ResetAllButtonCallback( listDialogReference: ui_dialog.UiDialog) -> None: def ResetAllConfirmDialogCallback( confirmDialogReference: ui_dialog.UiDialog) -> None: if confirmDialogReference.response == ui_dialog.ButtonType.DIALOG_RESPONSE_OK: self.SettingsSystem.ResetAll() self.ShowDialog(listPath, returnCallback=returnCallback, **showDialogArguments) confirmDialogArguments = { "title": Language.MakeLocalizationStringCallable( self._GetResetAllConfirmDialogTitleText()), "text": Language.MakeLocalizationStringCallable( self._GetResetAllConfirmDialogDescriptionText()), "text_ok": Language.MakeLocalizationStringCallable( self._GetResetAllConfirmDialogYesButtonText()), "text_cancel": Language.MakeLocalizationStringCallable( self._GetResetAllConfirmDialogNoButtonText()) } Dialogs.ShowOkCancelDialog(callback=ResetAllConfirmDialogCallback, queue=False, **confirmDialogArguments)
def ShowReproductiveInfoNotifications(targetSimInfo: sim_info.SimInfo) -> None: if not isinstance(targetSimInfo, sim_info.SimInfo): raise Exceptions.IncorrectTypeException(targetSimInfo, "targetSimInfo", (sim_info.SimInfo, )) targetSimSystem = Reproduction.GetSimSystem( targetSimInfo ) # type: typing.Optional[ReproductionShared.ReproductiveSystem] if targetSimSystem is None: return notificationText = targetSimSystem.GetDebugNotificationString() notificationArguments = { "title": Language.MakeLocalizationStringCallable( Language.CreateLocalizationString("")), "text": Language.MakeLocalizationStringCallable( Language.CreateLocalizationString(notificationText)), } Notifications.ShowNotification(queue=False, **notificationArguments) Debug.Log( "Collected and reported debug info from a sim's reproductive system by request.\n\n%s" % notificationText, This.Mod.Namespace, Debug.LogLevels.Info, group=This.Mod.Namespace, owner=__name__)
def _GetDescriptionValuesParts( self, setting: UISettingsShared.SettingWrapper ) -> typing.List[typing.Union[localization.LocalizedString, str, int, float]]: valuesParts = list( ) # type: typing.List[typing.Union[localization.LocalizedString, str, int, float]] defaultPart = self._GetDescriptionPartsDefaultText( ) # type: localization.LocalizedString Language.AddTokens(defaultPart, self._GetDescriptionDefaultText(setting)) valuesParts.append(defaultPart) if setting.IsOverridden(): overriddenPart = self._GetDescriptionPartsOverriddenValueText( ) # type: localization.LocalizedString overriddenPartTokens = ( self._GetDescriptionOverrideValueText(setting), self._GetDescriptionOverrideReasonText(setting)) # type: tuple Language.AddTokens(overriddenPart, *overriddenPartTokens) valuesParts.append("\n") valuesParts.append(overriddenPart) return valuesParts
def _GetRowSettingDescriptionParts( self, setting: UISettingsShared.SettingWrapper ) -> typing.List[typing.Union[localization.LocalizedString, str, int, float]]: descriptionParts = list( ) # type: typing.List[typing.Union[localization.LocalizedString, str, int, float]] settingValue = setting.Get() # type: typing.Any settingValueText = setting.GetValueText( settingValue) # type: localization.LocalizedString valueText = self._GetRowPartsSettingValueText( ) # type: localization.LocalizedString Language.AddTokens(valueText, settingValueText) descriptionParts.append(valueText) if setting.IsOverridden(): descriptionParts.append("\n") actualValue = setting.Get(ignoreOverride=True) # type: typing.Any actualValueText = setting.GetValueText( actualValue) # type: localization.LocalizedString overriddenText = self._GetRowPartsSettingOverriddenText() Language.AddTokens(overriddenText, actualValueText) descriptionParts.append(overriddenText) return descriptionParts
def GetValueText(cls, value: str) -> localization.LocalizedString: if value == "": return Language.GetLocalizationStringByIdentifier(This.Mod.Namespace + ".Settings.Types.Pronoun_Fallback.Default", fallbackText = "Pronoun_Fallback.Default") elif value == "0": return Language.GetLocalizationStringByIdentifier(This.Mod.Namespace + ".Settings.Types.Pronoun_Fallback.Female", fallbackText = "Pronoun_Fallback.Female") elif value == "1": return Language.GetLocalizationStringByIdentifier(This.Mod.Namespace + ".Settings.Types.Pronoun_Fallback.Male", fallbackText = "Pronoun_Fallback.Male") return Language.CreateLocalizationString("")
def GetValueText( cls, value: typing.Union[float, int]) -> localization.LocalizedString: cls._TypeCheckValue(value) valueString = str(value) # type: str text = Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Settings.Types.Time.Second_Template", fallbackText="Second_Template") Language.AddTokens(text, valueString) return text
def _GetValueText(self, setting: UISettingsShared.SettingStandardWrapper, mod: Mods.Mod, value: bool) -> localization.LocalizedString: valueTemplate = Language.String( This.Mod.Namespace + ".Mod_Settings.Values." + setting.Key + ".Value_Template") # type: Language.String return valueTemplate.GetLocalizationString( Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Settings.Types.Boolean.Enabled_Disabled." + str(value), fallbackText=str(value)), str(mod.Distribution.UpdatesFileURL))
def _ShowDeleteSetConfirmDialog( self, editingSetTitle: str, setting: UISettingsShared.SettingWrapper, currentValue: typing.Any, showDialogArguments: typing.Dict[str, typing.Any], returnCallback: typing.Callable[[], None] = None, *args, **kwargs) -> None: editingPronounSetIdentifier = showDialogArguments[ "editingPronounSetIdentifier"] # type: str def deleteSetConfirmDialog( shownDeleteSetConfirmDialog: ui_dialog_generic. UiDialogTextInputOkCancel ) -> None: if shownDeleteSetConfirmDialog.accepted: currentValue.pop(editingPronounSetIdentifier, None) setting.Set(currentValue) if returnCallback is not None: returnCallback() else: self._ShowDialogInternal( setting, currentValue, showDialogArguments=showDialogArguments, returnCallback=returnCallback, *args, **kwargs) dialogArguments = { "title": Language.MakeLocalizationStringCallable( self._GetDeleteSetConfirmDialogTitle()), "text": Language.MakeLocalizationStringCallable( self._GetDeleteSetConfirmDialogText(editingSetTitle)), "text_ok": Language.MakeLocalizationStringCallable( self._GetDeleteSetConfirmDialogOkButton()), "text_cancel": Language.MakeLocalizationStringCallable( self._GetDeleteSetConfirmDialogCancelButton()), } UIDialogs.ShowOkCancelDialog(callback=deleteSetConfirmDialog, queue=False, **dialogArguments)
def _CreateArguments(self, listPath: str, showDialogArguments: typing.Dict[str, typing.Any], *args, **kwargs) -> typing.Dict[str, typing.Any]: dialogArguments = dict() dialogOwner = showDialogArguments.get("owner") dialogArguments["owner"] = dialogOwner dialogArguments["title"] = Language.MakeLocalizationStringCallable( self._GetTitleText(listPath)) dialogArguments["text"] = Language.MakeLocalizationStringCallable( self._GetDescriptionText(listPath)) return dialogArguments
def _GetRealTimeButtonText( self ) -> localization.LocalizedString: # TODO change to 365 days a year. return Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Settings.Types.Life_Span_Multiplier.Preset_Dialog.Real_Time_Button", fallbackText="Real_Time_Button")
def _GetKeyText(self, setting: UISettingsShared.SettingStandardWrapper, mod: Mods.Mod, value: bool) -> localization.LocalizedString: keyTemplate = Language.String(This.Mod.Namespace + ".Mod_Settings.Values." + setting.Key + ".Key_Template") # type: Language.String return keyTemplate.GetLocalizationString(mod.Name, mod.Author)
def _GetDescriptionText(self, listPath: str) -> localization.LocalizedString: listPathIdentifier = listPath.replace(self.ListPathSeparator, "_") # type: str return Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Sim_Settings.List.Paths." + listPathIdentifier + ".Description")
def GetValueText( cls, value: typing.Union[float, int]) -> localization.LocalizedString: cls._TypeCheckValue(value) valueString = str(value) # type: str return Language.CreateLocalizationString(valueString)
def ShowStatusNotification (targetSimInfo: sim_info.SimInfo) -> None: # TODO create quick glance notification, only show the times? if not isinstance(targetSimInfo, sim_info.SimInfo): raise Exceptions.IncorrectTypeException(targetSimInfo, "targetSimInfo", (sim_info.SimInfo,)) targetDotInformation = Dot.GetDotInformation(targetSimInfo) # type: typing.Optional[Dot.DotInformation] if targetDotInformation is None: Debug.Log("Attempted to show a dot app status notification on a sim missing a dot information object.\nSim ID: %s" % targetSimInfo.id, This.Mod.Namespace, Debug.LogLevels.Warning, group = This.Mod.Namespace, owner = __name__) return if not targetDotInformation.Enabled: Debug.Log("Attempted to show a dot app status notification on a sim its not enabled for.\nSim ID: %s" % targetSimInfo.id, This.Mod.Namespace, Debug.LogLevels.Warning, group = This.Mod.Namespace, owner = __name__) return dotCycle = targetDotInformation.GetCurrentCycle() # type: typing.Optional[Dot.DotCycle] if dotCycle is None: ShowErrorNotification(targetSimInfo) return text = Language.MakeLocalizationStringCallable(_BuildStatusText(targetSimInfo, dotCycle)) notificationArguments = { "owner": targetSimInfo, "title": StatusNotificationTitle.GetCallableLocalizationString(), "text": text, "icon": lambda *args, **kwargs: shared_messages.IconInfoData(icon_resource = resources.ResourceKeyWrapper(CycleUIResources.DotAppIconKey)), "secondary_icon": lambda *args, **kwargs: shared_messages.IconInfoData(obj_instance = targetSimInfo), } Notifications.ShowNotification(queue = False, **notificationArguments)
def _GetDeleteSetConfirmDialogText( self, deletingSetTitle: str) -> localization.LocalizedString: return Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Settings.Types.Custom_Pronoun_Sets.Delete_Set_Confirm_Dialog.Text", deletingSetTitle, fallbackText="Delete_Set_Confirm_Dialog.Text")
class SettingsList(UISettingsList.SettingsList): TitleStandard = Language.String( This.Mod.Namespace + ".Sim_Settings.List.Title") # type: Language.String def _GetTitleText(self, listPath: str) -> localization.LocalizedString: return self._GetTitleStandardText() def _GetTitleStandardText(self) -> localization.LocalizedString: return self.TitleStandard.GetLocalizationString() def _GetTitleListPathText(self, listPath: str) -> localization.LocalizedString: listPathIdentifier = listPath.replace(self.ListPathSeparator, "_") # type: str fallbackText = "List.Paths." + listPathIdentifier + ".Title" # type: str return Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Sim_Settings.List.Paths." + listPathIdentifier + ".Title", fallbackText=fallbackText) def _GetDescriptionText(self, listPath: str) -> localization.LocalizedString: listPathIdentifier = listPath.replace(self.ListPathSeparator, "_") # type: str return Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Sim_Settings.List.Paths." + listPathIdentifier + ".Description")
def _GetDescriptionDefaultText( self, setting: UISettingsShared.SettingStandardWrapper ) -> localization.LocalizedString: defaultSettingString = str(self.DefaultSetting.Get()) # type: str return Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Settings.Types.Boolean.Enabled_Disabled." + defaultSettingString, fallbackText=defaultSettingString)
def GetValueText(cls, value: bool) -> localization.LocalizedString: if not isinstance(value, bool): raise Exceptions.IncorrectTypeException(value, "value", (bool, )) valueString = str(value) # type: str return Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Settings.Types.Boolean." + valueString, fallbackText=valueString)
def _GetTitleText(self, listPath: str) -> localization.LocalizedString: titleText = self._GetTitleTemplateText( ) # type: localization.LocalizedString titleTextStandard = self._GetTitleStandardText( ) # type: localization.LocalizedString titleTextListPath = self._GetTitleListPathText( listPath) # type: localization.LocalizedString Language.AddTokens(titleText, titleTextStandard, titleTextListPath) return titleText
def _GetEditPairDialogText( self, femaleLanguage: str, maleLanguage: str) -> localization.LocalizedString: return Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Settings.Types.Custom_Pronoun_Sets.Edit_Pair_Dialog.Text", femaleLanguage, maleLanguage, fallbackText="Edit_Pair_Dialog.Text")
def _GetTitleListPathText(self, listPath: str) -> localization.LocalizedString: listPathIdentifier = listPath.replace(self.ListPathSeparator, "_") # type: str fallbackText = "List.Paths." + listPathIdentifier + ".Title" # type: str return Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Sim_Settings.List.Paths." + listPathIdentifier + ".Title", fallbackText=fallbackText)
def BuildText( parts: typing.List[typing.Union[localization.LocalizedString, str, int, float]] ) -> localization.LocalizedString: """ Create new The Sims 4 localized strings by combining any localized string, string, int, or float together. :param parts: Parts to combined together to create the new localized string. :type parts: typing.List[typing.Union[localization.LocalizedString, str, int, float]] """ if not isinstance(parts, list): raise Exceptions.IncorrectTypeException(parts, "parts", (list, )) for partIndex in range(len(parts)): # type: int part = parts[ partIndex] # type: typing.Union[localization.LocalizedString, str, int, float] if not isinstance(part, (localization.LocalizedString, str, int, float)): raise Exceptions.IncorrectTypeException( part, "parts[%s]" % partIndex, (localization.LocalizedString, str, int, float)) if isinstance(part, (int, float)): parts[partIndex] = str(part) if len(parts) == 0: return Language.CreateLocalizationString("") lastString = None # type: typing.Optional[localization.LocalizedString] for part in reversed( parts ): # type: typing.Union[localization.LocalizedString, str, int, float] partString = _GetFormattingText() # type: localization.LocalizedString partStringTokens = (part, ) if lastString is not None: partStringTokens += (lastString, ) Language.AddTokens(partString, *partStringTokens) lastString = partString return lastString
def GetValueText( cls, value: typing.Union[float, int]) -> localization.LocalizedString: cls._TypeCheckValue(value) valueString = str(value) # type: str if value >= 0: text = Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Settings.Types.File_Size.Megabyte_Template", fallbackText="Megabyte_Template") else: text = Language.GetLocalizationStringByIdentifier( This.Mod.Namespace + ".Settings.Types.File_Size.Disabled_Template", fallbackText="Disabled_Template") Language.AddTokens(text, valueString) return text
def __init__ (self, value: typing.Any, identifier: str, priority: typing.Union[float, int], reasonText: typing.Optional[typing.Callable[[], localization.LocalizedString]] = None): self.Value = value # type: typing.Any self.Identifier = identifier # type: str self.Priority = priority # type: typing.Union[float, int] if reasonText is not None: self.ReasonText = reasonText # type: typing.Callable[[], localization.LocalizedString] else: self.ReasonText = lambda *args, **kwargs: Language.GetLocalizationStringByIdentifier(This.Mod.Namespace + ".Settings.Misc.Override.Unknown_Reason") # type: typing.Callable[[], localization.LocalizedString]
def _CreateArguments(self, setting: UISettingsShared.SettingWrapper, currentValue: typing.Any, showDialogArguments: typing.Dict[str, typing.Any], *args, **kwargs) -> typing.Dict[str, typing.Any]: dialogArguments = super()._CreateArguments( setting, currentValue, showDialogArguments, *args, **kwargs) # type: typing.Dict[str, typing.Any] textInputKey = "Input" # type: str textInputLockedArguments = { "sort_order": 0, } textInput = ui_text_input.UiTextInput.TunableFactory( locked_args=textInputLockedArguments ).default # type: ui_text_input.UiTextInput if "currentInput" in kwargs: textInputInitialValue = Language.MakeLocalizationStringCallable( Language.CreateLocalizationString(kwargs["currentInput"])) else: textInputInitialValue = Language.MakeLocalizationStringCallable( Language.CreateLocalizationString( self._ValueToString(currentValue))) textInput.initial_value = textInputInitialValue textInput.restricted_characters = self._GetInputRestriction(setting) textInputs = collections.make_immutable_slots_class([textInputKey]) textInputs = textInputs({textInputKey: textInput}) dialogArguments["text_inputs"] = textInputs return dialogArguments
def _AddSpeciesPart( species: sim_info_types.Species, speciesNamePart: localization.LocalizedString) -> None: if len(valuesParts) != 0: valuesParts.insert(0, "\n") speciesPart = self._GetDescriptionPartsLifeSpanText( ) # type: localization.LocalizedString averageLifespan = int( ToolsLifeSpan.GetAverageLifeSpan(species)) # type: int adjustedLifespan = int(averageLifespan / settingValue) # type: int Language.AddTokens(speciesPart, speciesNamePart, str(adjustedLifespan), str(averageLifespan), str(roundedSettingValue)) valuesParts.insert(0, speciesPart)
class ChoiceDialogButton(DialogButton): ChoiceButton = Language.String( This.Mod.Namespace + ".Setting_Dialogs.Choice_Button", fallbackText="Choice_Button") # type: Language.String def __init__(self, selected: bool = False, *args, **kwargs): """ :param selected: Whether or not the button's text will have a selected look. :type selected: bool """ super().__init__(*args, **kwargs) self.Selected = selected # type: bool def GenerateDialogResponse(self) -> ui_dialog.UiDialogResponse: if self.Selected: valueButtonStringTokens = ("> ", self.Text, " <") else: valueButtonStringTokens = ("", self.Text, "") if self.ChoiceButton.IdentifierIsRegistered(): buttonTextString = self.ChoiceButton.GetCallableLocalizationString( *valueButtonStringTokens) else: buttonTextString = self.Text responseArguments = { "dialog_response_id": self.ResponseID, "sort_order": self.SortOrder, "text": buttonTextString } if self.SubText is not None: responseArguments["subtext"] = self.SubText response = ui_dialog.UiDialogResponse(**responseArguments) return response
def GetValueText(cls, value: str) -> localization.LocalizedString: if value == "": return Language.GetLocalizationStringByIdentifier(This.Mod.Namespace + ".Settings.Types.Pronoun_Set_Selection.Default", fallbackText = "Pronoun_Set_Selection.Default") elif value == "0": return Language.GetLocalizationStringByIdentifier(This.Mod.Namespace + ".Settings.Types.Pronoun_Set_Selection.Female", fallbackText = "Pronoun_Set_Selection.Female") elif value == "1": return Language.GetLocalizationStringByIdentifier(This.Mod.Namespace + ".Settings.Types.Pronoun_Set_Selection.Male", fallbackText = "Pronoun_Set_Selection.Male") currentLanguageHandler = LanguageHandlers.GetCurrentLanguageHandler() # type: typing.Optional[LanguageHandlers.LanguageHandlerBase] allPronounSets = PronounSets.GetAllPronounSets(currentLanguageHandler) # type: dict selectedPronounSet = allPronounSets.get(value, None) # type: dict if selectedPronounSet is None: return Language.CreateLocalizationString("") selectedPronounSetTitle = selectedPronounSet.get("Title", None) # type: str if selectedPronounSetTitle is None: return Language.CreateLocalizationString("") return Language.CreateLocalizationString(selectedPronounSetTitle)
def _GetTitleText (self, listPath: str) -> localization.LocalizedString: return Language.GetLocalizationStringByIdentifier(This.Mod.Namespace + ".Mod_Settings.List.Title")