File indexing completed on 2026-02-08 14:58:06
0001 /* 0002 SPDX-FileCopyrightText: 2013-2023 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "plaintexteditorwidget.h" 0008 #include "config-textcustomeditor.h" 0009 #include "plaintexteditfindbar.h" 0010 #include "plaintexteditor.h" 0011 #include <TextAddonsWidgets/SlideContainer> 0012 #if HAVE_KTEXTADDONS_TEXT_TO_SPEECH_SUPPORT 0013 #include <TextEditTextToSpeech/TextToSpeechContainerWidget> 0014 #endif 0015 #include <QTextCursor> 0016 #include <QVBoxLayout> 0017 0018 using namespace TextCustomEditor; 0019 class Q_DECL_HIDDEN TextCustomEditor::PlainTextEditorWidgetPrivate 0020 { 0021 public: 0022 PlainTextEditorWidgetPrivate() = default; 0023 0024 TextCustomEditor::PlainTextEditFindBar *mFindBar = nullptr; 0025 PlainTextEditor *mEditor = nullptr; 0026 #if HAVE_KTEXTADDONS_TEXT_TO_SPEECH_SUPPORT 0027 TextEditTextToSpeech::TextToSpeechContainerWidget *mTextToSpeechWidget = nullptr; 0028 #endif 0029 TextAddonsWidgets::SlideContainer *mSliderContainer = nullptr; 0030 }; 0031 0032 PlainTextEditorWidget::PlainTextEditorWidget(PlainTextEditor *customEditor, QWidget *parent) 0033 : QWidget(parent) 0034 , d(new TextCustomEditor::PlainTextEditorWidgetPrivate) 0035 { 0036 init(customEditor); 0037 } 0038 0039 PlainTextEditorWidget::PlainTextEditorWidget(QWidget *parent) 0040 : QWidget(parent) 0041 , d(new TextCustomEditor::PlainTextEditorWidgetPrivate) 0042 { 0043 init(); 0044 } 0045 0046 PlainTextEditorWidget::~PlainTextEditorWidget() = default; 0047 0048 PlainTextEditor *PlainTextEditorWidget::editor() const 0049 { 0050 return d->mEditor; 0051 } 0052 0053 void PlainTextEditorWidget::clear() 0054 { 0055 d->mEditor->clear(); 0056 } 0057 0058 void PlainTextEditorWidget::setSpellCheckingConfigFileName(const QString &_fileName) 0059 { 0060 d->mEditor->setSpellCheckingConfigFileName(_fileName); 0061 } 0062 0063 void PlainTextEditorWidget::setPlainText(const QString &text) 0064 { 0065 d->mEditor->setPlainText(text); 0066 } 0067 0068 bool PlainTextEditorWidget::isEmpty() const 0069 { 0070 return d->mEditor->document()->isEmpty(); 0071 } 0072 0073 QString PlainTextEditorWidget::toPlainText() const 0074 { 0075 return d->mEditor->toPlainText(); 0076 } 0077 0078 void PlainTextEditorWidget::init(PlainTextEditor *customEditor) 0079 { 0080 auto lay = new QVBoxLayout(this); 0081 lay->setContentsMargins({}); 0082 #if HAVE_KTEXTADDONS_TEXT_TO_SPEECH_SUPPORT 0083 d->mTextToSpeechWidget = new TextEditTextToSpeech::TextToSpeechContainerWidget(this); 0084 lay->addWidget(d->mTextToSpeechWidget); 0085 #endif 0086 if (customEditor) { 0087 d->mEditor = customEditor; 0088 } else { 0089 d->mEditor = new PlainTextEditor; 0090 } 0091 lay->addWidget(d->mEditor); 0092 #if HAVE_KTEXTADDONS_TEXT_TO_SPEECH_SUPPORT 0093 connect(d->mEditor, &PlainTextEditor::say, d->mTextToSpeechWidget, &TextEditTextToSpeech::TextToSpeechContainerWidget::say); 0094 #endif 0095 d->mSliderContainer = new TextAddonsWidgets::SlideContainer(this); 0096 0097 d->mFindBar = new TextCustomEditor::PlainTextEditFindBar(d->mEditor, this); 0098 d->mFindBar->setHideWhenClose(false); 0099 connect(d->mFindBar, &TextCustomEditor::PlainTextEditFindBar::displayMessageIndicator, d->mEditor, &PlainTextEditor::slotDisplayMessageIndicator); 0100 connect(d->mFindBar, &TextCustomEditor::PlainTextEditFindBar::hideFindBar, this, &PlainTextEditorWidget::slotHideFindBar); 0101 d->mSliderContainer->setContent(d->mFindBar); 0102 0103 lay->addWidget(d->mSliderContainer); 0104 0105 connect(d->mEditor, &PlainTextEditor::findText, this, &PlainTextEditorWidget::slotFind); 0106 0107 connect(d->mEditor, &PlainTextEditor::replaceText, this, &PlainTextEditorWidget::slotReplace); 0108 } 0109 0110 void PlainTextEditorWidget::slotHideFindBar() 0111 { 0112 d->mSliderContainer->slideOut(); 0113 d->mEditor->setFocus(); 0114 } 0115 0116 bool PlainTextEditorWidget::isReadOnly() const 0117 { 0118 return d->mEditor->isReadOnly(); 0119 } 0120 0121 void PlainTextEditorWidget::setReadOnly(bool readOnly) 0122 { 0123 d->mEditor->setReadOnly(readOnly); 0124 } 0125 0126 void PlainTextEditorWidget::slotReplace() 0127 { 0128 if (d->mEditor->searchSupport()) { 0129 if (d->mEditor->textCursor().hasSelection()) { 0130 d->mFindBar->setText(d->mEditor->textCursor().selectedText()); 0131 } 0132 d->mFindBar->showReplace(); 0133 d->mSliderContainer->slideIn(); 0134 d->mFindBar->focusAndSetCursor(); 0135 } 0136 } 0137 0138 void PlainTextEditorWidget::slotFind() 0139 { 0140 if (d->mEditor->searchSupport()) { 0141 if (d->mEditor->textCursor().hasSelection()) { 0142 d->mFindBar->setText(d->mEditor->textCursor().selectedText()); 0143 } 0144 d->mEditor->moveCursor(QTextCursor::Start); 0145 d->mFindBar->showFind(); 0146 d->mSliderContainer->slideIn(); 0147 d->mFindBar->focusAndSetCursor(); 0148 } 0149 } 0150 0151 #include "moc_plaintexteditorwidget.cpp"