// 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 "languageclient_global.h" #include #include #include #include QT_BEGIN_NAMESPACE class QTimer; QT_END_NAMESPACE namespace LanguageServerProtocol { class ProgressParams; class ProgressToken; class WorkDoneProgressBegin; class WorkDoneProgressReport; class WorkDoneProgressEnd; } // namespace LanguageServerProtocol namespace LanguageClient { class LANGUAGECLIENT_EXPORT 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 setCancelHandlerForToken(const LanguageServerProtocol::ProgressToken &token, const std::function &handler); void endProgressReport(const LanguageServerProtocol::ProgressToken &token); 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 spawnProgressBar(const LanguageServerProtocol::ProgressToken &token); struct ProgressItem { QPointer progressInterface = nullptr; QFutureInterface *futureInterface = nullptr; QElapsedTimer timer; QTimer *showBarTimer = nullptr; QString message; QString title; }; QMap m_progress; QMap m_titles; QMap> m_clickHandlers; QMap> m_cancelHandlers; }; } // namespace LanguageClient