File indexing completed on 2024-05-19 05:21:44

0001 /*
0002    SPDX-FileCopyrightText: 2015-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "kpimtextedit_export.h"
0010 #include "richtextcomposer.h"
0011 #include <QObject>
0012 #include <memory>
0013 namespace KPIMTextEdit
0014 {
0015 class RichTextComposer;
0016 class NestedListHelper;
0017 class RichTextComposerImages;
0018 /**
0019  * @brief The RichTextComposerControler class
0020  * @author Laurent Montel <montel@kde.org>
0021  */
0022 class KPIMTEXTEDIT_EXPORT RichTextComposerControler : public QObject
0023 {
0024     Q_OBJECT
0025 public:
0026     explicit RichTextComposerControler(RichTextComposer *richtextComposer, QObject *parent = nullptr);
0027     ~RichTextComposerControler() override;
0028 
0029     [[nodiscard]] RichTextComposer *richTextComposer() const;
0030 
0031     [[nodiscard]] QString currentLinkUrl() const;
0032 
0033     [[nodiscard]] QString currentLinkText() const;
0034     void selectLinkText() const;
0035     [[nodiscard]] QString toCleanHtml() const;
0036 
0037     [[nodiscard]] bool canIndentList() const;
0038     [[nodiscard]] bool canDedentList() const;
0039 
0040     [[nodiscard]] NestedListHelper *nestedListHelper() const;
0041     void insertLink(const QString &url);
0042     void setCursorPositionFromStart(unsigned int pos);
0043     void ensureCursorVisible();
0044 
0045     RichTextComposerImages *composerImages() const;
0046     [[nodiscard]] bool painterActive() const;
0047     void disablePainter();
0048     [[nodiscard]] bool isFormattingUsed() const;
0049 
0050     void setFontForWholeText(const QFont &font);
0051     void textModeChanged(KPIMTextEdit::RichTextComposer::Mode mode);
0052     void updateLink(const QString &linkUrl, const QString &linkText);
0053     [[nodiscard]] QString toWrappedPlainText(QTextDocument *doc) const;
0054     [[nodiscard]] QString toWrappedPlainText() const;
0055     [[nodiscard]] QString toCleanPlainText(const QString &plainText = QString()) const;
0056     void addQuotes(const QString &defaultQuote);
0057 public Q_SLOTS:
0058     void addCheckbox(bool add = true);
0059     void insertHorizontalRule();
0060     void setHeadingLevel(int level);
0061     void alignLeft();
0062     void alignCenter();
0063     void alignRight();
0064     void alignJustify();
0065     void makeRightToLeft();
0066     void makeLeftToRight();
0067     void setTextBold(bool bold);
0068     void setTextItalic(bool italic);
0069     void setTextUnderline(bool underline);
0070     void setTextStrikeOut(bool strikeOut);
0071     void setTextForegroundColor(const QColor &color);
0072     void setTextBackgroundColor(const QColor &color);
0073     void setFontFamily(const QString &fontFamily);
0074     void setFontSize(int size);
0075     void setFont(const QFont &font);
0076     void setTextSuperScript(bool superscript);
0077     void setTextSubScript(bool subscript);
0078     void setChangeTextForegroundColor();
0079     void setChangeTextBackgroundColor();
0080     void manageLink();
0081     void indentListMore();
0082     void indentListLess();
0083     void setListStyle(int styleIndex);
0084     void slotAddEmoticon(const QString &text);
0085     void slotInsertHtml();
0086     void slotFormatReset();
0087     void slotPasteWithoutFormatting();
0088     void slotPasteAsQuotation();
0089     void slotRemoveQuotes();
0090     void slotAddQuotes();
0091     void slotAddImage();
0092     void slotFormatPainter(bool active);
0093     void ensureCursorVisibleDelayed();
0094 
0095 protected:
0096     bool event(QEvent *ev) override;
0097 
0098 private:
0099     KPIMTEXTEDIT_NO_EXPORT void regenerateColorScheme();
0100     class RichTextComposerControllerPrivate;
0101     std::unique_ptr<RichTextComposerControllerPrivate> const d;
0102 };
0103 }