diff options
Diffstat (limited to 'textedit.cpp')
-rw-r--r-- | textedit.cpp | 118 |
1 files changed, 117 insertions, 1 deletions
diff --git a/textedit.cpp b/textedit.cpp index 202c3e8..ae9bebe 100644 --- a/textedit.cpp +++ b/textedit.cpp @@ -1,6 +1,8 @@ #include "QDebug" #include "QUrl" -class QString; +class QFileDialog; +class QMessageBox; + #include "textedit.h" TextEdit::TextEdit(QWidget *parent) { @@ -53,3 +55,117 @@ bool TextEdit::isKey(QString key) qDebug() << key.contains("-----BEGIN PGP PUBLIC KEY BLOCK-----", Qt::CaseSensitive); return true; } + +void TextEdit::open() +{ + if (maybeSave()) { + QString fileName = QFileDialog::getOpenFileName(this); + if (!fileName.isEmpty()) + loadFile(fileName); + } +} + +bool TextEdit::save() +{ + if (curFile.isEmpty()) { + return saveAs(); + } else { + return saveFile(curFile); + } +} + +bool TextEdit::saveAs() +{ + QString fileName = QFileDialog::getSaveFileName(this); + if (fileName.isEmpty()) + return false; + + return saveFile(fileName); +} + +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); + this->setPlainText(in.readAll()); + QApplication::restoreOverrideCursor(); + + setCurrentFile(fileName); + // statusBar()->showMessage(tr("File loaded"), 2000); +} + +void TextEdit::setCurrentFile(const QString &fileName) +{ + curFile = fileName; + this->document()->setModified(false); + setWindowModified(false); + + QString shownName; + if (curFile.isEmpty()) + shownName = "untitled.txt"; + else + shownName = strippedName(curFile); + + //setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(qApp->applicationName())); +} + +QString TextEdit::strippedName(const QString &fullFileName) +{ + return QFileInfo(fullFileName).fileName(); +} + +bool TextEdit::maybeSave() +{ + if (this->document()->isModified()) { + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("Application"), + tr("The document has been modified.\nDo you want to save your changes?"), + QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + if (ret == QMessageBox::Save) + return save(); + else if (ret == QMessageBox::Cancel) + return false; + } + return true; +} + +bool TextEdit::saveFile(const QString &fileName) +{ + QFile file(fileName); + if (!file.open(QFile::WriteOnly | QFile::Text)) { + QMessageBox::warning(this, tr("File"), + tr("Cannot write file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())); + return false; + } + QTextStream out(&file); + QApplication::setOverrideCursor(Qt::WaitCursor); + out << this->toPlainText(); + QApplication::restoreOverrideCursor(); + //statusBar()->showMessage(tr("Saved '%1'").arg(fileName), 2000); + return true; +} +void TextEdit::print() +{ +#ifndef QT_NO_PRINTER + QTextDocument *document = this->document(); + QPrinter printer; + + QPrintDialog *dlg = new QPrintDialog(&printer, this); + if (dlg->exec() != QDialog::Accepted) + return; + + document->print(&printer); + + //statusBar()->showMessage(tr("Ready"), 2000); +#endif +} |