Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
        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)
Ejemplo n.º 3
0
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__)
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
	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("")
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
 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))
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
 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")
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
0
 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")
Ejemplo n.º 14
0
    def GetValueText(
            cls, value: typing.Union[float,
                                     int]) -> localization.LocalizedString:
        cls._TypeCheckValue(value)

        valueString = str(value)  # type: str
        return Language.CreateLocalizationString(valueString)
Ejemplo n.º 15
0
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)
Ejemplo n.º 16
0
 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")
Ejemplo n.º 17
0
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")
Ejemplo n.º 18
0
 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)
Ejemplo n.º 19
0
    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)
Ejemplo n.º 20
0
 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
Ejemplo n.º 21
0
 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")
Ejemplo n.º 22
0
 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)
Ejemplo n.º 23
0
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
Ejemplo n.º 24
0
    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
Ejemplo n.º 25
0
	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]
Ejemplo n.º 26
0
    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
Ejemplo n.º 27
0
        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)
Ejemplo n.º 28
0
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
Ejemplo n.º 29
0
	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)
Ejemplo n.º 30
0
	def _GetTitleText (self, listPath: str) -> localization.LocalizedString:
		return Language.GetLocalizationStringByIdentifier(This.Mod.Namespace + ".Mod_Settings.List.Title")