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 };