// Copyright 2020-2024 CesiumGS, Inc. and Contributors #pragma once #include "Widgets/SWindow.h" #include #include #include class ACesium3DTileset; class UCesiumRasterOverlay; using CesiumIonObject = swl::variant< TWeakObjectPtr, TWeakObjectPtr>; class CesiumIonTokenTroubleshooting : public SWindow { SLATE_BEGIN_ARGS(CesiumIonTokenTroubleshooting) {} /** * The tileset being troubleshooted. */ SLATE_ARGUMENT(CesiumIonObject, IonObject) /** Whether this troubleshooting panel was opened in response to an error, * versus opened manually by the user. */ SLATE_ARGUMENT(bool, TriggeredByError) SLATE_END_ARGS() public: static void Open(CesiumIonObject ionObject, bool triggeredByError); void Construct(const FArguments& InArgs); private: struct ExistingPanel { CesiumIonObject pObject; TSharedRef pPanel; }; static std::vector _existingPanels; struct TokenState { FString name; FString token; std::optional isValid; std::optional allowsAccessToAsset; std::optional associatedWithUserAccount; }; CesiumIonObject _pIonObject{}; TokenState _assetTokenState{}; TokenState _projectDefaultTokenState{}; std::optional _assetExistsInUserAccount; TSharedRef createDiagnosticPanel( const FString& name, const TArray>& diagnostics); TSharedRef createTokenPanel(const CesiumIonObject& pIonObject, TokenState& state); void addRemedyButton( const TSharedRef& pParent, const FString& name, bool (CesiumIonTokenTroubleshooting::*isAvailableCallback)() const, void (CesiumIonTokenTroubleshooting::*clickCallback)()); bool canConnectToCesiumIon() const; void connectToCesiumIon(); bool canUseProjectDefaultToken() const; void useProjectDefaultToken(); bool canAuthorizeAssetToken() const; void authorizeAssetToken(); bool canAuthorizeProjectDefaultToken() const; void authorizeProjectDefaultToken(); bool canSelectNewProjectDefaultToken() const; void selectNewProjectDefaultToken(); bool canOpenCesiumIon() const; void openCesiumIon(); void authorizeToken(const FString& token, bool removeObjectToken); };