LifePlay-Revival/Source/LifePlay/LPCityMapsWindow.h
2026-10-22 21:10:39 +02:00

67 lines
2.5 KiB
C++

// Lot MAPDL1 (MAPDL1-SPEC-05 v3, etape E5) : fenetre "City map: <ville>" (Slate, textes en anglais).
// Modele : ULPModInfoSubsystem::ShowWarning (LPModInfoSubsystem.cpp:375-422), widget ajoute par AddViewportWidgetContent.
//
// Contenu : informations (ville, version, taille, hote du premier lien, provenance, "Active after the next game launch"),
// titres des licences et bouton "Read the full licence" (texte lu dans Content/<fichier>, avec defilement), case d'accord non
// cochee (les boutons d'action restent inactifs tant qu'elle ne l'est pas), "Download only", "Full install", "Cancel",
// barre de progression, messages d'erreur ou de reussite, et le recours si tous les serveurs ont echoue
// ("Open in browser", "Choose file...", surveillance de Telechargements).
// Une seule fenetre a la fois, un seul telechargement a la fois (le travail est porte par FLPCityMapsDownload).
#pragma once
#include "CoreMinimal.h"
#include "LPCityMapsDownload.h"
#include "LPCityMapsSubsystem.h"
class SWidget;
class FLPCityMapsWindow : public TSharedFromThis<FLPCityMapsWindow>
{
public:
~FLPCityMapsWindow();
/** Ouvre la fenetre pour une entree de l'index. Faux s'il n'y a pas de viewport ou si la fenetre est deja ouverte.
* OnInstalled est appele une fois, sur le fil de jeu, avec le nom de la ville, apres une pose reussie. */
bool Open(const FLPCityMapEntry& InEntry, const TArray<FLPCityMapLicence>& InLicences, TFunction<void(const FString&)> InOnInstalled);
/** Ferme la fenetre. Un telechargement en cours est interrompu, son .part est garde. */
void Close();
bool IsOpen() const { return Widget.IsValid(); }
private:
/** Texte Slate dont le FText ne change que si la chaine change (evite de recalculer la mise en page a chaque image). */
struct FCachedText
{
FString Source;
FText Text;
const FText& Get(const FString& Value);
};
TSharedRef<SWidget> BuildWidget();
ELPCityJobPhase GetPhase() const;
void OnStart(ELPCityInstallMode Mode);
void OnCancelOrClose();
void OnToggleLicence();
void OnOpenBrowser();
void OnChooseFile();
void OnOpenFolder();
void HandleDownloadChanged();
void LoadLicenceText();
FLPCityMapEntry Entry;
TArray<FLPCityMapLicence> Licences;
TFunction<void(const FString&)> OnInstalled;
TSharedPtr<FLPCityMapsDownload> Download;
TSharedPtr<SWidget> Widget;
bool bAccepted = false;
bool bShowLicence = false;
bool bLicenceLoaded = false;
bool bInstalledReported = false;
FText LicenceFText;
FCachedText MessageCache;
FCachedText ProgressCache;
};