File indexing completed on 2024-05-12 05:25:40

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <KSieveUi/ManageSieveWidget>
0010 #include <KSieveUi/SieveEditorWidget>
0011 #include <QSplitter>
0012 #include <QUrl>
0013 class QTabWidget;
0014 class QStackedWidget;
0015 class SieveEditorTabWidget;
0016 class SieveEditorScriptManagerWidget;
0017 class SieveEditorPageWidget;
0018 class SieveEditorEmptyTabWidgetLabel;
0019 class KActionCollection;
0020 
0021 class SieveEditorMainWidget : public QSplitter
0022 {
0023     Q_OBJECT
0024 public:
0025     explicit SieveEditorMainWidget(KActionCollection *ac, QWidget *parent = nullptr);
0026     ~SieveEditorMainWidget() override;
0027 
0028     void createNewScript();
0029     void deleteScript();
0030     void updateServerList();
0031     void editScript();
0032     void desactivateScript();
0033     void refreshList();
0034     void uploadScript();
0035     bool needToSaveScript();
0036 
0037     QTabWidget *tabWidget() const;
0038 
0039     KSieveUi::SieveEditorWidget::EditorMode pageMode() const;
0040     [[nodiscard]] bool isUndoAvailable() const;
0041     [[nodiscard]] bool isRedoAvailable() const;
0042     [[nodiscard]] bool isWordWrap() const;
0043 
0044     [[nodiscard]] bool hasSelection() const;
0045     [[nodiscard]] QString currentHelpTitle() const;
0046     [[nodiscard]] QUrl currentHelpUrl() const;
0047     void openBookmarkUrl(const QUrl &url);
0048     [[nodiscard]] bool printSupportEnabled() const;
0049     [[nodiscard]] bool isTextEditor() const;
0050     [[nodiscard]] QString currentText() const;
0051     void forceCloseTab(int index);
0052 public Q_SLOTS:
0053     void slotDebugSieveScript();
0054     void slotGoToLine();
0055 
0056     void slotReplace();
0057     void slotFind();
0058     void slotCopy();
0059     void slotPaste();
0060     void slotCut();
0061     void slotSaveAs();
0062     void slotCheckSpelling();
0063     void slotImport();
0064     void slotCreateRulesGraphically();
0065     void slotCheckSyntax();
0066     void slotComment();
0067     void slotUncomment();
0068     void slotUpperCase();
0069     void slotSentenceCase();
0070     void slotLowerCase();
0071     void slotReverseCase();
0072     void slotZoomIn();
0073     void slotZoomOut();
0074     void slotZoomReset();
0075     void slotWordWrap(bool);
0076     void slotPrintPreview();
0077     void slotPrint();
0078     void slotUndo();
0079     void slotRedo();
0080     void slotSelectAll();
0081 
0082 Q_SIGNALS:
0083     void updateButtons(bool newScriptAction, bool editScriptAction, bool deleteScriptAction, bool desactivateScriptAction);
0084     void updateScriptList();
0085     void modeEditorChanged(KSieveUi::SieveEditorWidget::EditorMode);
0086     void serverSieveFound(bool);
0087     void undoAvailable(bool);
0088     void redoAvailable(bool);
0089     void copyAvailable(bool);
0090     void sieveEditorTabCurrentChanged();
0091 
0092 protected:
0093     [[nodiscard]] bool event(QEvent *e) override;
0094 
0095 private:
0096     void slotCreateScriptPage(const KSieveUi::ManageSieveWidget::ScriptInfo &info, bool isNewScript);
0097     void slotScriptDeleted(const QUrl &url);
0098     void slotScriptRenamed(const QUrl &oldUrl, const QUrl &newUrl);
0099     void slotScriptModified(bool modified, SieveEditorPageWidget *page);
0100     void slotGeneralPaletteChanged();
0101     void updatePaletteColor();
0102     void slotTabCloseRequested(int index);
0103     void slotTabRemoveAllExclude(int index);
0104     void slotTabCloseAllRequested();
0105 
0106 private:
0107     void updateStackedWidget();
0108     QWidget *hasExistingPage(const QUrl &url);
0109     QColor mModifiedScriptColor;
0110     QColor mScriptColor;
0111     SieveEditorTabWidget *mTabWidget = nullptr;
0112     SieveEditorScriptManagerWidget *mScriptManagerWidget = nullptr;
0113     QStackedWidget *mStackedWidget = nullptr;
0114     SieveEditorEmptyTabWidgetLabel *mEditorEmptyLabel = nullptr;
0115 };