File indexing completed on 2024-05-12 05:52:08
0001 /* 0002 SPDX-FileCopyrightText: 2023 Waqar Ahmed <waqar.17a@gmail.com 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 #pragma once 0006 0007 #include "kateprivate_export.h" 0008 0009 #include <KTextEditor/Cursor> 0010 #include <QObject> 0011 #include <QPointer> 0012 0013 namespace KTextEditor 0014 { 0015 class MainWindow; 0016 class View; 0017 class Cursor; 0018 } 0019 class KTETextHintProvider; 0020 0021 enum class TextHintMarkupKind { 0022 None = 0, 0023 PlainText = 1, 0024 MarkDown = 2, 0025 }; 0026 0027 class KATE_PRIVATE_EXPORT KateTextHintProvider : public QObject 0028 { 0029 Q_OBJECT 0030 public: 0031 KateTextHintProvider(KTextEditor::MainWindow *mainWindow, QObject *parent = nullptr); 0032 0033 Q_SIGNALS: 0034 // Emitted by KateTextHintManager, provider should prepare/request hint in response 0035 void textHintRequested(KTextEditor::View *v, KTextEditor::Cursor c); 0036 0037 // Should be emitted by provider once it has text hint available 0038 void textHintAvailable(const QString &textHint, TextHintMarkupKind kind, KTextEditor::Cursor pos); 0039 0040 // Should be emitted by provider if it wants to show text hint itself without a request 0041 void showTextHint(const QString &textHint, TextHintMarkupKind kind, KTextEditor::Cursor pos); 0042 }; 0043 0044 class KateTextHintManager : public QObject 0045 { 0046 public: 0047 explicit KateTextHintManager(KTextEditor::MainWindow *mainWindow); 0048 ~KateTextHintManager() override; 0049 0050 void ontextHintRequested(KTextEditor::View *v, KTextEditor::Cursor c); 0051 0052 void registerProvider(KateTextHintProvider *provider); 0053 0054 private: 0055 void onTextHintAvailable(const QString &hint, TextHintMarkupKind kind, KTextEditor::Cursor pos); 0056 void onShowTextHint(const QString &hint, TextHintMarkupKind kind, KTextEditor::Cursor pos); 0057 void showTextHint(const QString &hint, TextHintMarkupKind kind, KTextEditor::Cursor pos, bool force); 0058 0059 private: 0060 // KTextEditor provider 0061 KTETextHintProvider *const m_provider; 0062 std::vector<KateTextHintProvider *> m_providers; 0063 };