File indexing completed on 2024-06-02 04:47:08
0001 /* 0002 SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "textcustomeditor_export.h" 0010 0011 #include <QPlainTextEdit> 0012 0013 namespace Sonnet 0014 { 0015 class Highlighter; 0016 class SpellCheckDecorator; 0017 } 0018 namespace TextCustomEditor 0019 { 0020 /** 0021 * @brief The PlainTextEditor class 0022 * @author Laurent Montel <montel@kde.org> 0023 */ 0024 class TEXTCUSTOMEDITOR_EXPORT PlainTextEditor : public QPlainTextEdit 0025 { 0026 Q_OBJECT 0027 Q_PROPERTY(bool searchSupport READ searchSupport WRITE setSearchSupport) 0028 Q_PROPERTY(bool spellCheckingSupport READ spellCheckingSupport WRITE setSpellCheckingSupport) 0029 Q_PROPERTY(bool textToSpeechSupport READ textToSpeechSupport WRITE setTextToSpeechSupport) 0030 Q_PROPERTY(bool webShortcutSupport READ webShortcutSupport WRITE setWebShortcutSupport) 0031 Q_PROPERTY(bool emojiSupport READ emojiSupport WRITE setEmojiSupport) 0032 public: 0033 explicit PlainTextEditor(QWidget *parent = nullptr); 0034 ~PlainTextEditor() override; 0035 0036 enum SupportFeature { 0037 None = 0, 0038 Search = 1, 0039 SpellChecking = 2, 0040 TextToSpeech = 4, 0041 AllowWebShortcut = 8, 0042 Emoji = 16, 0043 }; 0044 Q_DECLARE_FLAGS(SupportFeatures, SupportFeature) 0045 0046 void setSearchSupport(bool b); 0047 [[nodiscard]] bool searchSupport() const; 0048 0049 [[nodiscard]] bool spellCheckingSupport() const; 0050 void setSpellCheckingSupport(bool check); 0051 0052 virtual void setReadOnly(bool readOnly); 0053 0054 void setTextToSpeechSupport(bool b); 0055 [[nodiscard]] bool textToSpeechSupport() const; 0056 0057 void setWebShortcutSupport(bool b); 0058 [[nodiscard]] bool webShortcutSupport() const; 0059 0060 virtual void createHighlighter(); 0061 0062 void addIgnoreWords(const QStringList &lst); 0063 [[nodiscard]] bool activateLanguageMenu() const; 0064 void setActivateLanguageMenu(bool activate); 0065 [[nodiscard]] Sonnet::Highlighter *highlighter() const; 0066 [[nodiscard]] bool checkSpellingEnabled() const; 0067 void setCheckSpellingEnabled(bool check); 0068 void setSpellCheckingConfigFileName(const QString &_fileName); 0069 [[nodiscard]] QString spellCheckingConfigFileName() const; 0070 [[nodiscard]] const QString &spellCheckingLanguage() const; 0071 void setSpellCheckingLanguage(const QString &_language); 0072 0073 void setEmojiSupport(bool b); 0074 [[nodiscard]] bool emojiSupport() const; 0075 0076 public Q_SLOTS: 0077 void slotDisplayMessageIndicator(const QString &message); 0078 void slotCheckSpelling(); 0079 void slotSpeakText(); 0080 void slotZoomReset(); 0081 0082 protected: 0083 virtual void addExtraMenuEntry(QMenu *menu, QPoint pos); 0084 void contextMenuEvent(QContextMenuEvent *event) override; 0085 [[nodiscard]] bool event(QEvent *ev) override; 0086 void keyPressEvent(QKeyEvent *event) override; 0087 [[nodiscard]] bool overrideShortcut(QKeyEvent *event); 0088 [[nodiscard]] bool handleShortcut(QKeyEvent *event); 0089 void wheelEvent(QWheelEvent *event) override; 0090 0091 virtual Sonnet::SpellCheckDecorator *createSpellCheckDecorator(); 0092 void setHighlighter(Sonnet::Highlighter *_highLighter); 0093 void focusInEvent(QFocusEvent *event) override; 0094 virtual void updateHighLighter(); 0095 virtual void clearDecorator(); 0096 0097 Q_SIGNALS: 0098 void findText(); 0099 void replaceText(); 0100 void spellCheckerAutoCorrect(const QString ¤tWord, const QString &autoCorrectWord); 0101 void checkSpellingChanged(bool); 0102 void languageChanged(const QString &); 0103 void spellCheckStatus(const QString &); 0104 void say(const QString &text); 0105 0106 private: 0107 TEXTCUSTOMEDITOR_NO_EXPORT void slotUndoableClear(); 0108 TEXTCUSTOMEDITOR_NO_EXPORT void slotSpellCheckerMisspelling(const QString &text, int pos); 0109 TEXTCUSTOMEDITOR_NO_EXPORT void slotSpellCheckerCorrected(const QString &, int, const QString &); 0110 TEXTCUSTOMEDITOR_NO_EXPORT void slotSpellCheckerAutoCorrect(const QString &, const QString &); 0111 TEXTCUSTOMEDITOR_NO_EXPORT void slotSpellCheckerCanceled(); 0112 TEXTCUSTOMEDITOR_NO_EXPORT void slotSpellCheckerFinished(); 0113 0114 TEXTCUSTOMEDITOR_NO_EXPORT void slotLanguageSelected(); 0115 TEXTCUSTOMEDITOR_NO_EXPORT void slotToggleAutoSpellCheck(); 0116 TEXTCUSTOMEDITOR_NO_EXPORT void addIgnoreWordsToHighLighter(); 0117 TEXTCUSTOMEDITOR_NO_EXPORT void deleteWordBack(); 0118 TEXTCUSTOMEDITOR_NO_EXPORT void deleteWordForward(); 0119 TEXTCUSTOMEDITOR_NO_EXPORT void highlightWord(int length, int pos); 0120 TEXTCUSTOMEDITOR_NO_EXPORT void deleteEndOfLine(); 0121 TEXTCUSTOMEDITOR_NO_EXPORT void moveLineUpDown(bool moveUp); 0122 TEXTCUSTOMEDITOR_NO_EXPORT void moveCursorBeginUpDown(bool moveUp); 0123 TEXTCUSTOMEDITOR_NO_EXPORT void regenerateColorScheme(); 0124 TEXTCUSTOMEDITOR_NO_EXPORT void updateReadOnlyColor(); 0125 TEXTCUSTOMEDITOR_NO_EXPORT void slotInsertEmoticon(const QString &str); 0126 class PlainTextEditorPrivate; 0127 std::unique_ptr<PlainTextEditorPrivate> const d; 0128 }; 0129 }