#pragma once #ifndef NOMINMAX #define NOMINMAX #endif #include #include #include #include namespace XCEngine::UI::Editor::App { class EditorWindowScreenshotController { public: void Initialize(const std::filesystem::path& captureRoot); void Shutdown(); void RequestCapture(std::string reason); bool TryBeginCapture(std::filesystem::path& outHistoryPath); void CompleteCaptureSuccess(const std::filesystem::path& historyPath); void CompleteCaptureFailure(std::string error); bool HasPendingCapture() const; const std::filesystem::path& GetLatestCapturePath() const; const std::string& GetLastCaptureSummary() const; const std::string& GetLastCaptureError() const; private: std::filesystem::path BuildHistoryCapturePath(std::string_view reason) const; void ResetPendingRequest(); static std::string BuildTimestampString(); static std::string SanitizeReason(std::string_view reason); std::filesystem::path m_captureRoot = {}; std::filesystem::path m_historyRoot = {}; std::filesystem::path m_latestCapturePath = {}; std::filesystem::path m_activeHistoryCapturePath = {}; std::string m_pendingReason = {}; std::string m_lastCaptureSummary = {}; std::string m_lastCaptureError = {}; std::uint64_t m_captureCount = 0; bool m_capturePending = false; }; } // namespace XCEngine::UI::Editor::App