// Copyright (C) 2021 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include #include #include #include namespace LanguageServerProtocol { class ProgressParams; class ProgressToken; class WorkDoneProgressBegin; class WorkDoneProgressReport; class WorkDoneProgressEnd; } // namespace LanguageServerProtocol namespace LanguageClient { class ProgressManager { public: ProgressManager(); ~ProgressManager(); void handleProgress(const LanguageServerProtocol::ProgressParams ¶ms); void setTitleForToken(const LanguageServerProtocol::ProgressToken &token, const QString &message); void setClickHandlerForToken(const LanguageServerProtocol::ProgressToken &token, const std::function &handler); void reset(); static bool isProgressEndMessage(const LanguageServerProtocol::ProgressParams ¶ms); private: void beginProgress(const LanguageServerProtocol::ProgressToken &token, const LanguageServerProtocol::WorkDoneProgressBegin &begin); void reportProgress(const LanguageServerProtocol::ProgressToken &token, const LanguageServerProtocol::WorkDoneProgressReport &report); void endProgress(const LanguageServerProtocol::ProgressToken &token, const LanguageServerProtocol::WorkDoneProgressEnd &end); void endProgress(const LanguageServerProtocol::ProgressToken &token); struct LanguageClientProgress { QPointer progressInterface = nullptr; QFutureInterface *futureInterface = nullptr; }; QMap m_progress; QMap m_titles; QMap m_timer; QMap> m_clickHandlers; }; } // namespace LanguageClient