aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/TextEdit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/TextEdit.cpp')
-rw-r--r--src/ui/TextEdit.cpp556
1 files changed, 0 insertions, 556 deletions
diff --git a/src/ui/TextEdit.cpp b/src/ui/TextEdit.cpp
deleted file mode 100644
index 5a9206ca..00000000
--- a/src/ui/TextEdit.cpp
+++ /dev/null
@@ -1,556 +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]> starting on May 12, 2021.
- *
- */
-
-#include "ui/TextEdit.h"
-
-TextEdit::TextEdit() {
- countPage = 0;
- tabWidget = new QTabWidget(this);
- tabWidget->setMovable(true);
- tabWidget->setTabsClosable(true);
- tabWidget->setDocumentMode(true);
-
- auto *layout = new QVBoxLayout;
- layout->addWidget(tabWidget);
- layout->setContentsMargins(0, 0, 0, 0);
- layout->setSpacing(0);
- setLayout(layout);
-
- // Front in same width
- this->setFont({"Courier"});
-
- connect(tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(removeTab(int)));
- slotNewTab();
- setAcceptDrops(false);
-}
-
-void TextEdit::slotNewTab() {
- QString header = tr("untitled") +
- QString::number(++countPage) + ".txt";
-
- auto *page = new EditorPage();
- tabWidget->addTab(page, header);
- tabWidget->setCurrentIndex(tabWidget->count() - 1);
- page->getTextPage()->setFocus();
- connect(page->getTextPage()->document(), SIGNAL(modificationChanged(bool)), this, SLOT(slotShowModified()));
-}
-
-void TextEdit::slotNewHelpTab(const QString &title, const QString &path) const {
-
- auto *page = new HelpPage(path);
- tabWidget->addTab(page, title);
- tabWidget->setCurrentIndex(tabWidget->count() - 1);
-
-}
-
-void TextEdit::slotOpen() {
- QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open file"),
- QDir::currentPath());
- foreach (QString fileName, fileNames) {
- if (!fileName.isEmpty()) {
- QFile file(fileName);
-
- if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- auto *page = new EditorPage(fileName);
-
- QTextStream in(&file);
- QApplication::setOverrideCursor(Qt::WaitCursor);
- page->getTextPage()->setPlainText(in.readAll());
- page->setFilePath(fileName);
- QTextDocument *document = page->getTextPage()->document();
- document->setModified(false);
-
- tabWidget->addTab(page, strippedName(fileName));
- tabWidget->setCurrentIndex(tabWidget->count() - 1);
- QApplication::restoreOverrideCursor();
- page->getTextPage()->setFocus();
- connect(page->getTextPage()->document(), SIGNAL(modificationChanged(bool)), this,
- SLOT(slotShowModified()));
- //enableAction(true)
- file.close();
- } else {
- QMessageBox::warning(this, tr("Application"),
- tr("Cannot read file %1:\n%2.")
- .arg(fileName)
- .arg(file.errorString()));
- }
- }
- }
-}
-
-void TextEdit::slotSave() {
- if (tabWidget->count() == 0 || slotCurPage() == 0) {
- return;
- }
-
- QString fileName = slotCurPage()->getFilePath();
-
- if (fileName.isEmpty()) {
- //QString docname = tabWidget->tabText(tabWidget->currentIndex());
- //docname.remove(0,2);
- slotSaveAs();
- } else {
- saveFile(fileName);
- }
-}
-
-bool TextEdit::saveFile(const QString &fileName) {
- if (fileName.isEmpty()) {
- return false;
- }
-
- QFile file(fileName);
-
- if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
- EditorPage *page = slotCurPage();
-
- QTextStream outputStream(&file);
- QApplication::setOverrideCursor(Qt::WaitCursor);
- outputStream << page->getTextPage()->toPlainText();
- QApplication::restoreOverrideCursor();
- QTextDocument *document = page->getTextPage()->document();
-
- document->setModified(false);
-
- int curIndex = tabWidget->currentIndex();
- tabWidget->setTabText(curIndex, strippedName(fileName));
- page->setFilePath(fileName);
- // statusBar()->showMessage(tr("File saved"), 2000);
- file.close();
- return true;
- } else {
- QMessageBox::warning(this, tr("File"),
- tr("Cannot write file %1:\n%2.")
- .arg(fileName)
- .arg(file.errorString()));
- return false;
- }
-}
-
-
-bool TextEdit::slotSaveAs() {
- if (tabWidget->count() == 0 || slotCurPage() == 0) {
- return true;
- }
-
- EditorPage *page = slotCurPage();
- QString path;
- if (page->getFilePath() != "") {
- path = page->getFilePath();
- } else {
- path = tabWidget->tabText(tabWidget->currentIndex()).remove(0, 2);
- }
-
- QString fileName = QFileDialog::getSaveFileName(this, tr("Save file "),
- path);
- return saveFile(fileName);
-}
-
-void TextEdit::slotCloseTab() {
- removeTab(tabWidget->currentIndex());
- if (tabWidget->count() != 0) {
- slotCurPage()->getTextPage()->setFocus();
- }
-}
-
-void TextEdit::removeTab(int index) {
- // Do nothing, if no tab is opened
- if (tabWidget->count() == 0) {
- return;
- }
-
- // get the index of the actual current tab
- int lastIndex = tabWidget->currentIndex();
-
- // set the focus to argument index
- tabWidget->setCurrentIndex(index);
-
- if (maybeSaveCurrentTab(true)) {
- tabWidget->removeTab(index);
-
- if (index >= lastIndex) {
- tabWidget->setCurrentIndex(lastIndex);
- } else {
- tabWidget->setCurrentIndex(lastIndex - 1);
- }
- }
-
- if (tabWidget->count() == 0) {
- // enableAction(false);
- }
-}
-
-
-/**
- * Check if current may need to be saved.
- * Call this function before closing the currently active tab-
- *
- * If it returns false, the close event should be aborted.
- */
-bool TextEdit::maybeSaveCurrentTab(bool askToSave) {
-
- EditorPage *page = slotCurPage();
- // if this page is no textedit, there should be nothing to save
- if (page == nullptr) {
- return true;
- }
- QTextDocument *document = page->getTextPage()->document();
-
- if (document->isModified()) {
- QMessageBox::StandardButton result = QMessageBox::Cancel;
-
- // write title of tab to docname and remove the leading *
- QString docname = tabWidget->tabText(tabWidget->currentIndex());
- docname.remove(0, 2);
-
- const QString &filePath = page->getFilePath();
- if (askToSave) {
- result = QMessageBox::warning(this, tr("Unsaved document"),
- tr("<h3>The document \"%1\" has been modified.<br/>Do you want to save your changes?</h3>").arg(
- docname) +
- tr("<b>Note:</b> If you don't save these files, all changes are lost.<br/>"),
- QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
- }
- if ((result == QMessageBox::Save) || (!askToSave)) {
- if (filePath == "") {
- //QString docname = tabWidget->tabText(tabWidget->currentIndex());
- //docname.remove(0,2);
- return slotSaveAs();
- } else {
- return saveFile(filePath);
- }
- } else if (result == QMessageBox::Discard) {
- return true;
- } else {
- return false;
- }
- }
- return true;
-}
-
-bool TextEdit::maybeSaveAnyTab() {
- // get a list of all unsaved documents and their tabids
- QHash<int, QString> unsavedDocs = this->unsavedDocuments();
-
- /*
- * no unsaved documents, so app can be closed
- */
- if (unsavedDocs.empty()) {
- return true;
- }
- /*
- * only 1 unsaved document -> set modified tab as current
- * and show normal unsaved doc dialog
- */
- if (unsavedDocs.size() == 1) {
- int modifiedTab = unsavedDocs.keys().at(0);
- tabWidget->setCurrentIndex(modifiedTab);
- return maybeSaveCurrentTab(true);
- }
-
- /*
- * more than one unsaved documents
- */
- if (unsavedDocs.size() > 1) {
- QHashIterator<int, QString> i(unsavedDocs);
-
- QuitDialog *dialog;
- dialog = new QuitDialog(this, unsavedDocs);
- int result = dialog->exec();
-
- // if result is QDialog::Rejected, discard or cancel was clicked
- if (result == QDialog::Rejected) {
- // return true, if discard is clicked, so app can be closed
- if (dialog->isDiscarded()) {
- return true;
- } else {
- return false;
- }
- } else {
- bool allsaved = true;
- QList<int> tabIdsToSave = dialog->getTabIdsToSave();
-
- foreach (int tabId, tabIdsToSave) {
- tabWidget->setCurrentIndex(tabId);
- if (!maybeSaveCurrentTab(false)) {
- allsaved = false;
- }
- }
- if (allsaved) {
- return true;
- } else {
- return false;
- }
- }
- }
- // code should never reach this statement
- return false;
-}
-
-
-QTextEdit *TextEdit::curTextPage() const {
- auto *curTextPage = qobject_cast<EditorPage *>(tabWidget->currentWidget());
- if (curTextPage != nullptr) {
- return curTextPage->getTextPage();
- } else {
- return nullptr;
- }
-}
-
-QTextBrowser *TextEdit::curHelpPage() const {
- auto *curHelpPage = qobject_cast<HelpPage *>(tabWidget->currentWidget());
- if (curHelpPage != nullptr) {
- return curHelpPage->getBrowser();
- } else {
- return nullptr;
- }
-}
-
-int TextEdit::tabCount() const {
- return tabWidget->count();
-}
-
-EditorPage *TextEdit::slotCurPage() const {
- auto *curPage = qobject_cast<EditorPage *>(tabWidget->currentWidget());
- return curPage;
-}
-
-void TextEdit::slotQuote() const {
- if (tabWidget->count() == 0 || curTextPage() == nullptr) {
- return;
- }
-
- QTextCursor cursor(curTextPage()->document());
-
- // beginEditBlock and endEditBlock() let operation look like single undo/redo operation
- cursor.beginEditBlock();
- cursor.setPosition(0);
- cursor.insertText("> ");
- while (!cursor.isNull() && !cursor.atEnd()) {
- cursor.movePosition(QTextCursor::EndOfLine);
- cursor.movePosition(QTextCursor::NextCharacter);
- if (!cursor.atEnd()) {
- cursor.insertText("> ");
- }
- }
- cursor.endEditBlock();
-}
-
-void TextEdit::slotFillTextEditWithText(const QString &text) const {
- QTextCursor cursor(curTextPage()->document());
- cursor.beginEditBlock();
- this->curTextPage()->selectAll();
- this->curTextPage()->insertPlainText(text);
- cursor.endEditBlock();
-}
-
-void TextEdit::loadFile(const QString &fileName) {
- QFile file(fileName);
- if (!file.open(QFile::ReadOnly | QFile::Text)) {
- QMessageBox::warning(this, tr("Application"),
- tr("Cannot read file %1:\n%2.")
- .arg(fileName)
- .arg(file.errorString()));
- return;
- }
- QTextStream in(&file);
- QApplication::setOverrideCursor(Qt::WaitCursor);
- curTextPage()->setPlainText(in.readAll());
- QApplication::restoreOverrideCursor();
- slotCurPage()->setFilePath(fileName);
- tabWidget->setTabText(tabWidget->currentIndex(), strippedName(fileName));
- file.close();
- // statusBar()->showMessage(tr("File loaded"), 2000);
-}
-
-QString TextEdit::strippedName(const QString &fullFileName) {
- return QFileInfo(fullFileName).fileName();
-}
-
-void TextEdit::slotPrint() {
- if (tabWidget->count() == 0) {
- return;
- }
-
-#ifndef QT_NO_PRINTER
- QTextDocument *document;
- if (curTextPage() == nullptr) {
- document = curHelpPage()->document();
- } else {
- document = curTextPage()->document();
- }
- QPrinter printer;
-
- auto *dlg = new QPrintDialog(&printer, this);
- if (dlg->exec() != QDialog::Accepted) {
- return;
- }
- document->print(&printer);
-
- //statusBar()->showMessage(tr("Ready"), 2000);
-#endif
-}
-
-void TextEdit::slotShowModified() const {
- int index = tabWidget->currentIndex();
- 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()) {
- tabWidget->setTabText(index, title.prepend("* "));
- } else {
- tabWidget->setTabText(index, title.remove(0, 2));
- }
-}
-
-void TextEdit::slotSwitchTabUp() const {
- if (tabWidget->count() > 1) {
- int newindex = (tabWidget->currentIndex() + 1) % (tabWidget->count());
- tabWidget->setCurrentIndex(newindex);
- }
-}
-
-void TextEdit::slotSwitchTabDown() const {
- if (tabWidget->count() > 1) {
- int newindex = (tabWidget->currentIndex() - 1 + tabWidget->count()) % tabWidget->count();
- tabWidget->setCurrentIndex(newindex);
- }
-}
-
-/*
- * return a hash of tabindexes and title of unsaved tabs
- */
-QHash<int, QString> TextEdit::unsavedDocuments() const {
- QHash<int, QString> unsavedDocs; // this list could be used to implement gedit like "unsaved changed"-dialog
-
- for (int i = 0; i < tabWidget->count(); i++) {
- auto *ep = qobject_cast<EditorPage *>(tabWidget->widget(i));
- if (ep != nullptr && ep->getTextPage()->document()->isModified()) {
- QString docname = tabWidget->tabText(i);
- // remove * before name of modified doc
- docname.remove(0, 2);
- unsavedDocs.insert(i, docname);
- }
- }
- return unsavedDocs;
-}
-
-void TextEdit::slotCut() const {
- if (tabWidget->count() == 0 || curTextPage() == nullptr) {
- return;
- }
-
- curTextPage()->cut();
-}
-
-void TextEdit::slotCopy() const {
- if (tabWidget->count() == 0) {
- return;
- }
-
- if (curTextPage() != nullptr) {
- curTextPage()->copy();
- } else {
- curHelpPage()->copy();
- }
-
-
-}
-
-void TextEdit::slotPaste() const {
- if (tabWidget->count() == 0 || curTextPage() == nullptr) {
- return;
- }
-
- curTextPage()->paste();
-}
-
-void TextEdit::slotUndo() const {
- if (tabWidget->count() == 0 || curTextPage() == nullptr) {
- return;
- }
-
- curTextPage()->undo();
-}
-
-void TextEdit::slotRedo() const {
- if (tabWidget->count() == 0 || curTextPage() == nullptr) {
- return;
- }
-
- curTextPage()->redo();
-}
-
-void TextEdit::slotZoomIn() const {
- if (tabWidget->count() == 0) {
- return;
- }
-
- if (curTextPage() != nullptr) {
- curTextPage()->zoomIn();
- } else {
- curHelpPage()->zoomIn();
- }
-
-}
-
-void TextEdit::slotZoomOut() const {
- if (tabWidget->count() == 0) {
- return;
- }
-
- if (curTextPage() != nullptr) {
- curTextPage()->zoomOut();
- } else {
- curHelpPage()->zoomOut();
- }
-}
-
-void TextEdit::slotSelectAll() const {
- if (tabWidget->count() == 0 || curTextPage() == nullptr) {
- return;
- }
-
- curTextPage()->selectAll();
-}
-
-/*void TextEdit::dragEnterEvent(QDragEnterEvent *event)
-{
- if (event->mimeData()->hasFormat("text/plain"))
- qDebug() << "enter textedit drag action";
- event->acceptProposedAction();
-}
-
-void TextEdit::dropEvent(QDropEvent* event)
-{
- curTextPage()->setPlainText(event->mimeData()->text());
-
- foreach (QUrl tmp, event->mimeData()->urls())
- {
- qDebug() << tmp;
- }
-
- //event->acceptProposedAction();
-}
-*/