1 /*
2 SPDX-FileCopyrightText: 2015-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-only
5 */
6
7 #include "sievetexteditwidget.h"
8 #include "editor/sievetextedit.h"
9 #include <QVBoxLayout>
10
11 #include <KPIMTextEdit/PlainTextEditFindBar>
12 #include <KPIMTextEdit/SlideContainer>
13 using namespace KSieveUi;
14
15 class KSieveUi::SieveTextEditWidgetPrivate
16 {
17 public:
SieveTextEditWidgetPrivate()18 SieveTextEditWidgetPrivate()
19 {
20 }
21
22 KSieveUi::SieveTextEdit *mTextEdit = nullptr;
23 KPIMTextEdit::SlideContainer *mSliderContainer = nullptr;
24 KPIMTextEdit::PlainTextEditFindBar *mFindBar = nullptr;
25 };
26
SieveTextEditWidget(KSieveUi::SieveTextEdit * customTextEdit,QWidget * parent)27 SieveTextEditWidget::SieveTextEditWidget(KSieveUi::SieveTextEdit *customTextEdit, QWidget *parent)
28 : QWidget(parent)
29 , d(new KSieveUi::SieveTextEditWidgetPrivate)
30 {
31 initialize(customTextEdit);
32 }
33
SieveTextEditWidget(QWidget * parent)34 SieveTextEditWidget::SieveTextEditWidget(QWidget *parent)
35 : QWidget(parent)
36 , d(new KSieveUi::SieveTextEditWidgetPrivate)
37 {
38 initialize();
39 }
40
~SieveTextEditWidget()41 SieveTextEditWidget::~SieveTextEditWidget()
42 {
43 }
44
initialize(KSieveUi::SieveTextEdit * custom)45 void SieveTextEditWidget::initialize(KSieveUi::SieveTextEdit *custom)
46 {
47 auto mainLayout = new QVBoxLayout(this);
48 mainLayout->setContentsMargins({});
49 if (custom) {
50 d->mTextEdit = custom;
51 } else {
52 d->mTextEdit = new KSieveUi::SieveTextEdit;
53 }
54 d->mTextEdit->setObjectName(QStringLiteral("textedit"));
55 d->mTextEdit->setShowHelpMenu(false);
56 mainLayout->addWidget(d->mTextEdit);
57
58 d->mSliderContainer = new KPIMTextEdit::SlideContainer(this);
59 d->mSliderContainer->setObjectName(QStringLiteral("slidercontainer"));
60 d->mFindBar = new KPIMTextEdit::PlainTextEditFindBar(d->mTextEdit, this);
61 d->mFindBar->setObjectName(QStringLiteral("findbar"));
62 d->mFindBar->setHideWhenClose(false);
63 connect(d->mFindBar, &KPIMTextEdit::TextEditFindBarBase::hideFindBar, d->mSliderContainer, &KPIMTextEdit::SlideContainer::slideOut);
64 d->mSliderContainer->setContent(d->mFindBar);
65 mainLayout->addWidget(d->mSliderContainer);
66 connect(d->mTextEdit, &SieveTextEdit::findText, this, &SieveTextEditWidget::slotFind);
67 connect(d->mTextEdit, &SieveTextEdit::replaceText, this, &SieveTextEditWidget::slotReplace);
68 }
69
setReadOnly(bool readOnly)70 void SieveTextEditWidget::setReadOnly(bool readOnly)
71 {
72 d->mTextEdit->setReadOnly(readOnly);
73 }
74
slotReplace()75 void SieveTextEditWidget::slotReplace()
76 {
77 if (d->mTextEdit->textCursor().hasSelection()) {
78 d->mFindBar->setText(d->mTextEdit->textCursor().selectedText());
79 }
80 d->mFindBar->showReplace();
81 d->mSliderContainer->slideIn();
82 d->mFindBar->focusAndSetCursor();
83 }
84
slotFind()85 void SieveTextEditWidget::slotFind()
86 {
87 if (d->mTextEdit->textCursor().hasSelection()) {
88 d->mFindBar->setText(d->mTextEdit->textCursor().selectedText());
89 }
90 d->mTextEdit->moveCursor(QTextCursor::Start);
91 d->mFindBar->showFind();
92 d->mSliderContainer->slideIn();
93 d->mFindBar->focusAndSetCursor();
94 }
95
textEdit() const96 SieveTextEdit *SieveTextEditWidget::textEdit() const
97 {
98 return d->mTextEdit;
99 }
100