diff options
Diffstat (limited to 'src/ui/widgets')
-rw-r--r-- | src/ui/widgets/EditorPage.cpp | 154 | ||||
-rw-r--r-- | src/ui/widgets/InfoBoardWidget.h | 2 | ||||
-rw-r--r-- | src/ui/widgets/PlainTextEditorPage.cpp | 257 | ||||
-rw-r--r-- | src/ui/widgets/PlainTextEditorPage.h (renamed from src/ui/widgets/EditorPage.h) | 27 | ||||
-rw-r--r-- | src/ui/widgets/TextEdit.cpp | 60 | ||||
-rw-r--r-- | src/ui/widgets/TextEdit.h | 6 |
6 files changed, 303 insertions, 203 deletions
diff --git a/src/ui/widgets/EditorPage.cpp b/src/ui/widgets/EditorPage.cpp deleted file mode 100644 index 8c26fe71..00000000 --- a/src/ui/widgets/EditorPage.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/** - * This file is part of GpgFrontend. - * - * GpgFrontend is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Foobar is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Foobar. If not, see <https://www.gnu.org/licenses/>. - * - * The initial version of the source code is inherited from gpg4usb-team. - * Their source code version also complies with GNU General Public License. - * - * The source code version of this software was modified and released - * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021. - * - */ - -#include "ui/widgets/EditorPage.h" - -#include <boost/filesystem.hpp> -#include <utility> - -#include "ui/thread/FileReadThread.h" - -namespace GpgFrontend::UI { - -EditorPage::EditorPage(QString filePath, QWidget* parent) - : QWidget(parent), full_file_path_(std::move(filePath)) { - // Set the Textedit properties - textPage = new QTextEdit(); - textPage->setAcceptRichText(false); - - // Set the layout style - mainLayout = new QVBoxLayout(); - mainLayout->setSpacing(0); - mainLayout->addWidget(textPage); - mainLayout->setContentsMargins(0, 0, 0, 0); - setLayout(mainLayout); - - textPage->setFocus(); - - // Front in same width - this->setFont({"Courier"}); - this->setAttribute(Qt::WA_DeleteOnClose); -} - -const QString& EditorPage::getFilePath() const { return full_file_path_; } - -QTextEdit* EditorPage::getTextPage() { return textPage; } - -void EditorPage::setFilePath(const QString& filePath) { - full_file_path_ = filePath; -} - -void EditorPage::showNotificationWidget(QWidget* widget, - const char* className) { - widget->setProperty(className, true); - mainLayout->addWidget(widget); -} - -void EditorPage::closeNoteByClass(const char* className) { - QList<QWidget*> widgets = findChildren<QWidget*>(); - for (QWidget* widget : widgets) { - if (widget->property(className) == true) { - widget->close(); - } - } -} - -void EditorPage::slotFormatGpgHeader() { - QString content = textPage->toPlainText(); - - // Get positions of the gpg-headers, if they exist - int start = content.indexOf(GpgFrontend::GpgConstants::PGP_SIGNED_BEGIN); - int startSig = - content.indexOf(GpgFrontend::GpgConstants::PGP_SIGNATURE_BEGIN); - int endSig = content.indexOf(GpgFrontend::GpgConstants::PGP_SIGNATURE_END); - - if (start < 0 || startSig < 0 || endSig < 0 || signMarked) { - return; - } - - signMarked = true; - - // Set the fontstyle for the header - QTextCharFormat signFormat; - signFormat.setForeground(QBrush(QColor::fromRgb(80, 80, 80))); - signFormat.setFontPointSize(9); - - // set font style for the signature - QTextCursor cursor(textPage->document()); - cursor.setPosition(startSig, QTextCursor::MoveAnchor); - cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, endSig); - cursor.setCharFormat(signFormat); - - // set the font style for the header - int headEnd = content.indexOf("\n\n", start); - cursor.setPosition(start, QTextCursor::MoveAnchor); - cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, headEnd); - cursor.setCharFormat(signFormat); -} - -void EditorPage::ReadFile() { - LOG(INFO) << "Called"; - - read_done_ = false; - - auto text_page = this->getTextPage(); - text_page->setReadOnly(true); - auto thread = new FileReadThread(this->full_file_path_.toStdString()); - - connect(thread, &FileReadThread::sendReadBlock, this, - &EditorPage::slotInsertText); - - connect(thread, &FileReadThread::readDone, this, [=]() { - LOG(INFO) << "thread read done"; - text_page->document()->setModified(false); - text_page->setReadOnly(false); - }); - - connect(thread, &FileReadThread::finished, this, [=]() { - LOG(INFO) << "thread finished"; - thread->deleteLater(); - read_done_ = true; - read_hread_ = nullptr; - }); - - connect(this, &EditorPage::destroyed, [=]() { - LOG(INFO) << "request interruption for read thread"; - thread->requestInterruption(); - read_hread_ = nullptr; - }); - this->read_hread_ = thread; - thread->start(); -} - -void EditorPage::slotInsertText(const QString& text) { - this->getTextPage()->insertPlainText(text); -} -void EditorPage::PrepareToDestroy() { - if (read_hread_) { - read_hread_->requestInterruption(); - read_hread_ = nullptr; - } -} - -} // namespace GpgFrontend::UI diff --git a/src/ui/widgets/InfoBoardWidget.h b/src/ui/widgets/InfoBoardWidget.h index 8d37be6c..816da849 100644 --- a/src/ui/widgets/InfoBoardWidget.h +++ b/src/ui/widgets/InfoBoardWidget.h @@ -25,7 +25,7 @@ #ifndef __VERIFYNOTIFICATION_H__ #define __VERIFYNOTIFICATION_H__ -#include "EditorPage.h" +#include "PlainTextEditorPage.h" #include "gpg/result_analyse/VerifyResultAnalyse.h" #include "ui/details/VerifyDetailsDialog.h" diff --git a/src/ui/widgets/PlainTextEditorPage.cpp b/src/ui/widgets/PlainTextEditorPage.cpp new file mode 100644 index 00000000..1a99c2a6 --- /dev/null +++ b/src/ui/widgets/PlainTextEditorPage.cpp @@ -0,0 +1,257 @@ +/** + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Foobar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from gpg4usb-team. + * Their source code version also complies with GNU General Public License. + * + * The source code version of this software was modified and released + * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021. + * + */ + +#include "ui/widgets/PlainTextEditorPage.h" + +#include <boost/filesystem.hpp> +#include <boost/format.hpp> +#include <utility> + +#include "ui/encoding/TextEncodingDetect.h" +#include "ui/thread/FileReadThread.h" +#include "ui_PlainTextEditor.h" + +namespace GpgFrontend::UI { + +PlainTextEditorPage::PlainTextEditorPage(QString filePath, QWidget* parent) + : QWidget(parent), + ui(std::make_shared<Ui_PlainTextEditor>()), + full_file_path_(std::move(filePath)) { + ui->setupUi(this); + + if (full_file_path_.isEmpty()) read_done_ = true; + + ui->textPage->setFocus(); + ui->loadingLabel->setHidden(true); + + // Front in same width + this->setFont({"Courier"}); + this->setAttribute(Qt::WA_DeleteOnClose); + + this->ui->characterLabel->setText(_("0 character")); + this->ui->lfLabel->setText(_("None")); + this->ui->encodingLabel->setText(_("Binary")); + + connect(ui->textPage, &QPlainTextEdit::textChanged, this, [=]() { + if (!read_done_) return; + + auto text = ui->textPage->document()->toPlainText(); + auto str = boost::format(_("%1% character(s)")) % text.size(); + this->ui->characterLabel->setText(str.str().c_str()); + + detect_encoding(text.toStdString()); + }); + + ui->loadingLabel->setText(_("Loading...")); +} + +const QString& PlainTextEditorPage::getFilePath() const { + return full_file_path_; +} + +QPlainTextEdit* PlainTextEditorPage::getTextPage() { return ui->textPage; } + +void PlainTextEditorPage::setFilePath(const QString& filePath) { + full_file_path_ = filePath; +} + +void PlainTextEditorPage::showNotificationWidget(QWidget* widget, + const char* className) { + widget->setProperty(className, true); + ui->verticalLayout->addWidget(widget); +} + +void PlainTextEditorPage::closeNoteByClass(const char* className) { + QList<QWidget*> widgets = findChildren<QWidget*>(); + for (QWidget* widget : widgets) { + if (widget->property(className) == true) { + widget->close(); + } + } +} + +void PlainTextEditorPage::slotFormatGpgHeader() { + QString content = ui->textPage->toPlainText(); + + // Get positions of the gpg-headers, if they exist + int start = content.indexOf(GpgFrontend::GpgConstants::PGP_SIGNED_BEGIN); + int startSig = + content.indexOf(GpgFrontend::GpgConstants::PGP_SIGNATURE_BEGIN); + int endSig = content.indexOf(GpgFrontend::GpgConstants::PGP_SIGNATURE_END); + + if (start < 0 || startSig < 0 || endSig < 0 || signMarked) { + return; + } + + signMarked = true; + + // Set the fontstyle for the header + QTextCharFormat signFormat; + signFormat.setForeground(QBrush(QColor::fromRgb(80, 80, 80))); + signFormat.setFontPointSize(9); + + // set font style for the signature + QTextCursor cursor(ui->textPage->document()); + cursor.setPosition(startSig, QTextCursor::MoveAnchor); + cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, endSig); + cursor.setCharFormat(signFormat); + + // set the font style for the header + int headEnd = content.indexOf("\n\n", start); + cursor.setPosition(start, QTextCursor::MoveAnchor); + cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, headEnd); + cursor.setCharFormat(signFormat); +} + +void PlainTextEditorPage::ReadFile() { + LOG(INFO) << "called"; + + read_done_ = false; + read_bytes_ = 0; + ui->textPage->setEnabled(false); + ui->textPage->setReadOnly(true); + ui->textPage->blockSignals(true); + ui->loadingLabel->setHidden(false); + ui->textPage->document()->blockSignals(true); + + auto text_page = this->getTextPage(); + text_page->setReadOnly(true); + auto thread = new FileReadThread(this->full_file_path_.toStdString()); + + connect(thread, &FileReadThread::sendReadBlock, this, + &PlainTextEditorPage::slotInsertText); + + connect(thread, &FileReadThread::readDone, this, [=]() { + LOG(INFO) << "thread read done"; + if (!binary_mode_) { + text_page->setReadOnly(false); + } + }); + + connect(thread, &FileReadThread::finished, this, [=]() { + LOG(INFO) << "thread finished"; + thread->deleteLater(); + read_done_ = true; + read_thread_ = nullptr; + ui->textPage->setEnabled(true); + text_page->document()->setModified(false); + ui->textPage->blockSignals(false); + ui->textPage->document()->blockSignals(false); + ui->loadingLabel->setHidden(true); + }); + + connect(this, &PlainTextEditorPage::destroyed, [=]() { + LOG(INFO) << "request interruption for read thread"; + thread->requestInterruption(); + read_thread_ = nullptr; + }); + this->read_thread_ = thread; + thread->start(); +} + +std::string binary_to_string(const std::string& source) { + static char syms[] = "0123456789ABCDEF"; + std::stringstream ss; + for (unsigned char c : source) + ss << syms[((c >> 4) & 0xf)] << syms[c & 0xf] << " "; + return ss.str(); +} + +void PlainTextEditorPage::slotInsertText(const std::string& data) { + LOG(INFO) << "data size" << data.size(); + read_bytes_ += data.size(); + // If binary format is detected, the entire file is converted to binary format + // for display + bool if_last_binary_mode = binary_mode_; + if (!binary_mode_) { + detect_encoding(data); + } + + if (binary_mode_) { + if (if_last_binary_mode != binary_mode_) { + auto text_buffer = + ui->textPage->document()->toRawText().toLocal8Bit().toStdString(); + ui->textPage->clear(); + this->getTextPage()->insertPlainText( + binary_to_string(text_buffer).c_str()); + this->ui->lfLabel->setText("None"); + } + this->getTextPage()->insertPlainText(binary_to_string(data).c_str()); + + auto str = boost::format(_("%1% byte(s)")) % read_bytes_; + this->ui->characterLabel->setText(str.str().c_str()); + } else { + this->getTextPage()->insertPlainText(data.c_str()); + + auto text = this->getTextPage()->toPlainText(); + auto str = boost::format(_("%1% character(s)")) % text.size(); + this->ui->characterLabel->setText(str.str().c_str()); + detect_cr_lf(text); + } +} + +void PlainTextEditorPage::PrepareToDestroy() { + if (read_thread_) { + read_thread_->requestInterruption(); + read_thread_ = nullptr; + } +} + +void PlainTextEditorPage::detect_encoding(const std::string& data) { + AutoIt::Common::TextEncodingDetect text_detect; + AutoIt::Common::TextEncodingDetect::Encoding encoding = + text_detect.DetectEncoding((unsigned char*)(data.data()), data.size()); + + if (encoding == AutoIt::Common::TextEncodingDetect::None) { + binary_mode_ = true; + ui->encodingLabel->setText(_("Binary")); + } else if (encoding == AutoIt::Common::TextEncodingDetect::ASCII) { + ui->encodingLabel->setText(_("ASCII(7 bits)")); + } else if (encoding == AutoIt::Common::TextEncodingDetect::ANSI) { + ui->encodingLabel->setText(_("ASCII(8 bits)")); + } else if (encoding == AutoIt::Common::TextEncodingDetect::UTF8_BOM || + encoding == AutoIt::Common::TextEncodingDetect::UTF8_NOBOM) { + ui->encodingLabel->setText(_("UTF-8")); + } else if (encoding == AutoIt::Common::TextEncodingDetect::UTF16_LE_BOM || + encoding == AutoIt::Common::TextEncodingDetect::UTF16_LE_NOBOM) { + ui->encodingLabel->setText(_("UTF-16")); + } else if (encoding == AutoIt::Common::TextEncodingDetect::UTF16_BE_BOM || + encoding == AutoIt::Common::TextEncodingDetect::UTF16_BE_NOBOM) { + ui->encodingLabel->setText(_("UTF-16(BE)")); + } +} + +void PlainTextEditorPage::detect_cr_lf(const QString& data) { + if (binary_mode_) { + this->ui->lfLabel->setText("None"); + return; + } + if (data.contains("\r\n")) { + this->ui->lfLabel->setText("CRLF"); + } else { + this->ui->lfLabel->setText("LF"); + } +} + +} // namespace GpgFrontend::UI diff --git a/src/ui/widgets/EditorPage.h b/src/ui/widgets/PlainTextEditorPage.h index d1bc1ac2..24823c06 100644 --- a/src/ui/widgets/EditorPage.h +++ b/src/ui/widgets/PlainTextEditorPage.h @@ -28,12 +28,7 @@ #include "gpg/GpgConstants.h" #include "ui/GpgFrontendUI.h" -QT_BEGIN_NAMESPACE -class QVBoxLayout; -class QHBoxLayout; -class QString; -class QLabel; -QT_END_NAMESPACE +class Ui_PlainTextEditor; namespace GpgFrontend::UI { @@ -41,7 +36,7 @@ namespace GpgFrontend::UI { * @brief Class for handling a single tab of the tabwidget * */ -class EditorPage : public QWidget { +class PlainTextEditorPage : public QWidget { Q_OBJECT public: /** @@ -50,7 +45,8 @@ class EditorPage : public QWidget { * @param filePath Path of the file handled in this tab * @param parent Pointer to the parent widget */ - explicit EditorPage(QString filePath = "", QWidget* parent = nullptr); + explicit PlainTextEditorPage(QString filePath = "", + QWidget* parent = nullptr); /** * @details Get the filepath of the currently activated tab. @@ -67,7 +63,7 @@ class EditorPage : public QWidget { /** * @details Return pointer tp the textedit of the currently activated tab. */ - QTextEdit* getTextPage(); + QPlainTextEdit* getTextPage(); /** * @details Show additional widget at buttom of currently active tab @@ -91,12 +87,17 @@ class EditorPage : public QWidget { void PrepareToDestroy(); private: - QTextEdit* textPage; /** The textedit of the tab */ - QVBoxLayout* mainLayout; /** The layout for the tab */ + std::shared_ptr<Ui_PlainTextEditor> ui; QString full_file_path_; /** The path to the file handled in the tab */ bool signMarked{}; /** true, if the signed header is marked, false if not */ bool read_done_ = false; - QThread* read_hread_ = nullptr; + QThread* read_thread_ = nullptr; + bool binary_mode_ = false; + size_t read_bytes_ = 0; + + void detect_encoding(const std::string& data); + + void detect_cr_lf(const QString& data); private slots: @@ -105,7 +106,7 @@ class EditorPage : public QWidget { */ void slotFormatGpgHeader(); - void slotInsertText(const QString& text); + void slotInsertText(const std::string& data); }; } // namespace GpgFrontend::UI diff --git a/src/ui/widgets/TextEdit.cpp b/src/ui/widgets/TextEdit.cpp index be6ec181..a8ff8d73 100644 --- a/src/ui/widgets/TextEdit.cpp +++ b/src/ui/widgets/TextEdit.cpp @@ -50,7 +50,7 @@ TextEdit::TextEdit(QWidget* parent) : QWidget(parent) { void TextEdit::slotNewTab() { QString header = _("untitled") + QString::number(++countPage) + ".txt"; - auto* page = new EditorPage(); + auto* page = new PlainTextEditorPage(); auto index = tabWidget->addTab(page, header); tabWidget->setTabIcon(index, QIcon(":file.png")); tabWidget->setCurrentIndex(tabWidget->count() - 1); @@ -80,11 +80,11 @@ void TextEdit::slotOpenFile(QString& path) { LOG(INFO) << "path" << path.toStdString(); auto result = file.open(QIODevice::ReadOnly | QIODevice::Text); if (result) { - auto* page = new EditorPage(path); + auto* page = new PlainTextEditorPage(path); connect(page->getTextPage()->document(), &QTextDocument::modificationChanged, this, &TextEdit::slotShowModified); - + QApplication::setOverrideCursor(Qt::WaitCursor); auto index = tabWidget->addTab(page, strippedName(path)); tabWidget->setTabIcon(index, QIcon(":file.png")); @@ -111,7 +111,7 @@ void TextEdit::slotOpen() { QFile file(fileName); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { - auto* page = new EditorPage(fileName); + auto* page = new PlainTextEditorPage(fileName); QTextStream in(&file); QApplication::setOverrideCursor(Qt::WaitCursor); @@ -165,7 +165,7 @@ bool TextEdit::saveFile(const QString& fileName) { QFile file(fileName); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { - EditorPage* page = slotCurPageTextEdit(); + PlainTextEditorPage* page = slotCurPageTextEdit(); QTextStream outputStream(&file); QApplication::setOverrideCursor(Qt::WaitCursor); @@ -197,7 +197,7 @@ bool TextEdit::slotSaveAs() { return true; } - EditorPage* page = slotCurPageTextEdit(); + PlainTextEditorPage* page = slotCurPageTextEdit(); QString path; if (!page->getFilePath().isEmpty()) { path = page->getFilePath(); @@ -250,7 +250,7 @@ void TextEdit::removeTab(int index) { * If it returns false, the close event should be aborted. */ bool TextEdit::maybeSaveCurrentTab(bool askToSave) { - EditorPage* page = slotCurPageTextEdit(); + PlainTextEditorPage* page = slotCurPageTextEdit(); // if this page is no textedit, there should be nothing to save if (page == nullptr) { return true; @@ -352,13 +352,8 @@ bool TextEdit::maybeSaveAnyTab() { return false; } -QTextEdit* TextEdit::curTextPage() const { - auto* curTextPage = qobject_cast<EditorPage*>(tabWidget->currentWidget()); - if (curTextPage != nullptr) { - return curTextPage->getTextPage(); - } else { - return nullptr; - } +PlainTextEditorPage* TextEdit::curTextPage() const { + return qobject_cast<PlainTextEditorPage*>(tabWidget->currentWidget()); } FilePage* TextEdit::curFilePage() const { @@ -372,8 +367,9 @@ FilePage* TextEdit::curFilePage() const { int TextEdit::tabCount() const { return tabWidget->count(); } -EditorPage* TextEdit::slotCurPageTextEdit() const { - auto* curPage = qobject_cast<EditorPage*>(tabWidget->currentWidget()); +PlainTextEditorPage* TextEdit::slotCurPageTextEdit() const { + auto* curPage = + qobject_cast<PlainTextEditorPage*>(tabWidget->currentWidget()); return curPage; } @@ -387,7 +383,7 @@ void TextEdit::slotQuote() const { return; } - QTextCursor cursor(curTextPage()->document()); + QTextCursor cursor(curTextPage()->getTextPage()->document()); // beginEditBlock and endEditBlock() let operation look like single undo/redo // operation @@ -405,10 +401,10 @@ void TextEdit::slotQuote() const { } void TextEdit::slotFillTextEditWithText(const QString& text) const { - QTextCursor cursor(curTextPage()->document()); + QTextCursor cursor(curTextPage()->getTextPage()->document()); cursor.beginEditBlock(); - this->curTextPage()->selectAll(); - this->curTextPage()->insertPlainText(text); + this->curTextPage()->getTextPage()->selectAll(); + this->curTextPage()->getTextPage()->insertPlainText(text); cursor.endEditBlock(); } @@ -425,7 +421,7 @@ void TextEdit::loadFile(const QString& fileName) { } QTextStream in(&file); QApplication::setOverrideCursor(Qt::WaitCursor); - curTextPage()->setPlainText(in.readAll()); + curTextPage()->getTextPage()->setPlainText(in.readAll()); QApplication::restoreOverrideCursor(); slotCurPageTextEdit()->setFilePath(fileName); tabWidget->setTabText(tabWidget->currentIndex(), strippedName(fileName)); @@ -445,7 +441,7 @@ void TextEdit::slotPrint() { #ifndef QT_NO_PRINTER QTextDocument* document; if (curTextPage() != nullptr) { - document = curTextPage()->document(); + document = curTextPage()->getTextPage()->document(); } QPrinter printer; @@ -464,7 +460,7 @@ void TextEdit::slotShowModified() const { QString title = tabWidget->tabText(index); // if doc is modified now, add leading * to title, // otherwise remove the leading * from the title - if (curTextPage()->document()->isModified()) { + if (curTextPage()->getTextPage()->document()->isModified()) { tabWidget->setTabText(index, title.prepend("* ")); } else { tabWidget->setTabText(index, title.remove(0, 2)); @@ -494,7 +490,7 @@ QHash<int, QString> TextEdit::unsavedDocuments() const { // gedit like "unsaved changed"-dialog for (int i = 0; i < tabWidget->count(); i++) { - auto* ep = qobject_cast<EditorPage*>(tabWidget->widget(i)); + auto* ep = qobject_cast<PlainTextEditorPage*>(tabWidget->widget(i)); if (ep != nullptr && ep->ReadDone() && ep->getTextPage()->document()->isModified()) { QString doc_name = tabWidget->tabText(i); @@ -513,7 +509,7 @@ void TextEdit::slotCut() const { return; } - curTextPage()->cut(); + curTextPage()->getTextPage()->cut(); } void TextEdit::slotCopy() const { @@ -522,7 +518,7 @@ void TextEdit::slotCopy() const { } if (curTextPage() != nullptr) { - curTextPage()->copy(); + curTextPage()->getTextPage()->copy(); } } @@ -531,7 +527,7 @@ void TextEdit::slotPaste() const { return; } - curTextPage()->paste(); + curTextPage()->getTextPage()->paste(); } void TextEdit::slotUndo() const { @@ -539,7 +535,7 @@ void TextEdit::slotUndo() const { return; } - curTextPage()->undo(); + curTextPage()->getTextPage()->undo(); } void TextEdit::slotRedo() const { @@ -547,7 +543,7 @@ void TextEdit::slotRedo() const { return; } - curTextPage()->redo(); + curTextPage()->getTextPage()->redo(); } void TextEdit::slotZoomIn() const { @@ -556,7 +552,7 @@ void TextEdit::slotZoomIn() const { } if (curTextPage() != nullptr) { - curTextPage()->zoomIn(); + curTextPage()->getTextPage()->zoomIn(); } } @@ -566,7 +562,7 @@ void TextEdit::slotZoomOut() const { } if (curTextPage() != nullptr) { - curTextPage()->zoomOut(); + curTextPage()->getTextPage()->zoomOut(); } } @@ -574,7 +570,7 @@ void TextEdit::slotSelectAll() const { if (tabWidget->count() == 0 || curTextPage() == nullptr) { return; } - curTextPage()->selectAll(); + curTextPage()->getTextPage()->selectAll(); } void TextEdit::slotFilePagePathChanged(const QString& path) const { diff --git a/src/ui/widgets/TextEdit.h b/src/ui/widgets/TextEdit.h index e877ccc1..c1f44969 100644 --- a/src/ui/widgets/TextEdit.h +++ b/src/ui/widgets/TextEdit.h @@ -26,9 +26,9 @@ #define __TEXTEDIT_H__ #include "ui/QuitDialog.h" -#include "ui/widgets/EditorPage.h" #include "ui/widgets/FilePage.h" #include "ui/widgets/HelpPage.h" +#include "ui/widgets/PlainTextEditorPage.h" namespace GpgFrontend::UI { /** @@ -66,7 +66,7 @@ class TextEdit : public QWidget { * @return \li reference to QTextEdit if tab has one * \li 0 otherwise (e.g. if helppage) */ - [[nodiscard]] QTextEdit* curTextPage() const; + [[nodiscard]] PlainTextEditorPage* curTextPage() const; [[nodiscard]] FilePage* curFilePage() const; @@ -84,7 +84,7 @@ class TextEdit : public QWidget { * @details Return pointer to the currently activated text edit tab page. * */ - EditorPage* slotCurPageTextEdit() const; + PlainTextEditorPage* slotCurPageTextEdit() const; /** * @details Return pointer to the currently activated file treeview tab page. |