File indexing completed on 2023-11-26 08:17:49
0001 /* 0002 SPDX-FileCopyrightText: 2018-2023 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <QJsonObject> 0010 #include <QObject> 0011 0012 #include "model/inputcompletermodel.h" 0013 0014 #include "libruqolacore_export.h" 0015 0016 class QAbstractItemModel; 0017 class RocketChatAccount; 0018 class CommandsModelFilterProxyModel; 0019 class EmoticonModelFilterProxyModel; 0020 class LIBRUQOLACORE_EXPORT InputTextManager : public QObject 0021 { 0022 Q_OBJECT 0023 public: 0024 enum CompletionForType { 0025 Channel = 0, 0026 User, 0027 Emoji, 0028 Command, 0029 None, 0030 }; 0031 explicit InputTextManager(RocketChatAccount *account, QObject *parent = nullptr); 0032 ~InputTextManager() override; 0033 0034 void setEmoticonModel(QAbstractItemModel *model); 0035 0036 [[nodiscard]] InputCompleterModel *inputCompleterModel() const; 0037 [[nodiscard]] QAbstractItemModel *emojiCompleterModel() const; 0038 0039 void inputTextCompleter(const QJsonObject &obj); 0040 0041 [[nodiscard]] QString applyCompletion(const QString &newWord, const QString &str, int *pPosition); 0042 0043 void setInputTextChanged(const QString &str, int position); 0044 0045 void clearCompleter(); 0046 0047 // Only for autotests 0048 [[nodiscard]] QString searchWord(const QString &text, int position, int &start); 0049 0050 void setCommandModel(QAbstractItemModel *model); 0051 [[nodiscard]] QAbstractItemModel *commandModel() const; 0052 0053 Q_SIGNALS: 0054 // Trigger autocompletion request in DDPClient (via RocketChatAccount) 0055 // Emitted with Channel and User, never Emoji or None 0056 void completionRequested(const QString &pattern, const QString &exceptions, InputTextManager::CompletionForType type); 0057 void completionTypeChanged(InputTextManager::CompletionForType type); 0058 0059 private: 0060 Q_DISABLE_COPY(InputTextManager) 0061 0062 void slotCompletionChannels(const QString &pattern); 0063 void setCompletionType(CompletionForType type); 0064 void slotCompletionChannelDone(const QJsonObject &root); 0065 0066 InputCompleterModel *const mInputCompleterModel; 0067 EmoticonModelFilterProxyModel *const mEmoticonFilterProxyModel; 0068 CommandsModelFilterProxyModel *const mCommandFilterProxyModel; 0069 RocketChatAccount *const mAccount; 0070 CompletionForType mCurrentCompletionType = None; 0071 QString mCurrentCompletionPattern; 0072 }; 0073 0074 Q_DECLARE_METATYPE(InputTextManager::CompletionForType)