1 /* SPDX-FileCopyrightText: 2013-2021 Laurent Montel <montel@kde.org>
2  *
3  * SPDX-License-Identifier: LGPL-2.0-or-later
4  */
5 
6 #pragma once
7 
8 #include "ksieveui_export.h"
9 #include "sieveeditorabstractwidget.h"
10 class QSplitter;
11 namespace KPIMTextEdit
12 {
13 class SlideContainer;
14 class TextGoToLineWidget;
15 class PlainTextEditFindBar;
16 class PlainTextEditor;
17 class PlainTextEditorWidget;
18 class TextToSpeechWidget;
19 }
20 
21 namespace KSieveUi
22 {
23 class SieveTextEdit;
24 class SieveEditorWarning;
25 class SieveEditorParsingMissingFeatureWarning;
26 class SieveEditorTabWidget;
27 class SieveTemplateWidget;
28 /**
29  * @brief The SieveEditorTextModeWidget class
30  * @author Laurent Montel <montel@kde.org>
31  */
32 class KSIEVEUI_EXPORT SieveEditorTextModeWidget : public SieveEditorAbstractWidget
33 {
34     Q_OBJECT
35 public:
36     explicit SieveEditorTextModeWidget(QWidget *parent = nullptr);
37     ~SieveEditorTextModeWidget() override;
38 
39     void setSieveCapabilities(const QStringList &capabilities);
40     void setReadOnly(bool b);
41 
42     Q_REQUIRED_RESULT QString script() const;
43     void setScript(const QString &script, bool clearUndoRedo = false);
44 
45     void setDebugScript(const QString &debug);
46 
47     Q_REQUIRED_RESULT QString currentscript() override;
48     void setImportScript(const QString &script) override;
49 
50     void createRulesGraphically();
51     void generateXml();
52 
53     void showEditorWarning();
54     void hideEditorWarning();
55 
56     void showParsingEditorWarning();
57 
58     void setParsingEditorWarningError(const QString &script, const QString &error);
59     void replace();
60     void find();
61     void undo();
62     void redo();
63     void paste();
64     void cut();
65     void copy();
66     void checkSpelling();
67     void comment();
68     void uncomment();
69 
70     bool isUndoAvailable() const;
71     bool isRedoAvailable() const;
72     bool hasSelection() const;
73 
74     void selectAll();
75     void upperCase();
76     void lowerCase();
77     void sentenceCase();
78     void reverseCase();
79     void zoomIn();
80     void zoomOut();
81     Q_REQUIRED_RESULT QString currentHelpTitle() const;
82     Q_REQUIRED_RESULT QUrl currentHelpUrl() const;
83     void openBookmarkUrl(const QUrl &url);
84     void debugSieveScript();
85     void zoomReset();
86     void wordWrap(bool state);
87     Q_REQUIRED_RESULT bool isWordWrap() const;
88     void print();
89     void printPreview();
90     Q_REQUIRED_RESULT bool printSupportEnabled() const;
91     Q_REQUIRED_RESULT bool isTextEditor() const;
92     Q_REQUIRED_RESULT SieveEditorTabWidget *tabWidget() const;
93 
94     void setListOfIncludeFile(const QStringList &listOfIncludeFile);
95     Q_REQUIRED_RESULT QStringList sieveCapabilities() const;
96 
97 Q_SIGNALS:
98     void enableButtonOk(bool);
99     void switchToGraphicalMode();
100     void valueChanged();
101     void undoAvailable(bool);
102     void redoAvailable(bool);
103     void copyAvailable(bool);
104     void sieveEditorTabCurrentChanged();
105 
106 public Q_SLOTS:
107     void slotShowGoToLine();
108 
109 private:
110     void slotTextChanged();
111     void slotFind();
112     void slotReplace();
113     void slotGoToLine(int line);
114     void readConfig();
115     void writeConfig();
116     void slotEditRule(const QString &selectedText);
117     void slotInsertRule();
118     void insertRequires(const QStringList &needToAddRequire);
119     Q_REQUIRED_RESULT QStringList insertNecessaryRequires(const QStringList &requireModules);
120     QString mOriginalScript;
121     QStringList mSieveCapabilities;
122     QStringList mListOfIncludeFile;
123     SieveTextEdit *mTextEdit = nullptr;
124     KPIMTextEdit::PlainTextEditorWidget *mDebugTextEdit = nullptr;
125     KPIMTextEdit::PlainTextEditFindBar *mFindBar = nullptr;
126     KPIMTextEdit::TextToSpeechWidget *mTextToSpeechWidget = nullptr;
127     QSplitter *mMainSplitter = nullptr;
128     QSplitter *mTemplateSplitter = nullptr;
129     SieveEditorWarning *mSieveEditorWarning = nullptr;
130     SieveEditorParsingMissingFeatureWarning *mSieveParsingWarning = nullptr;
131     SieveEditorTabWidget *mTabWidget = nullptr;
132     KPIMTextEdit::TextGoToLineWidget *mGoToLine = nullptr;
133     KPIMTextEdit::SlideContainer *mGotoLineSliderContainer = nullptr;
134     KPIMTextEdit::SlideContainer *mSliderContainer = nullptr;
135     SieveTemplateWidget *mSieveTemplateWidget = nullptr;
136     QWidget *mEditorWidget = nullptr;
137 };
138 }
139 
140