diff options
Diffstat (limited to 'src/ui/widgets/TextEdit.cpp')
-rw-r--r-- | src/ui/widgets/TextEdit.cpp | 91 |
1 files changed, 83 insertions, 8 deletions
diff --git a/src/ui/widgets/TextEdit.cpp b/src/ui/widgets/TextEdit.cpp index 2b1f4766..1ea96fde 100644 --- a/src/ui/widgets/TextEdit.cpp +++ b/src/ui/widgets/TextEdit.cpp @@ -126,18 +126,31 @@ void TextEdit::SlotOpen() { } void TextEdit::SlotSave() { - if (tab_widget_->count() == 0 || SlotCurPageTextEdit() == 0) { + if (tab_widget_->count() == 0) { return; } - QString file_name = SlotCurPageTextEdit()->GetFilePath(); + if (CurEMailPage() != nullptr) { + QString file_name = CurEMailPage()->GetFilePath(); - if (file_name.isEmpty()) { - // QString docname = tabWidget->tabText(tabWidget->currentIndex()); - // docname.remove(0,2); - SlotSaveAs(); - } else { - saveFile(file_name); + if (file_name.isEmpty()) { + SlotSaveAsEML(); + } else { + saveEMLFile(file_name); + } + return; + } + + if (CurTextPage() != nullptr) { + QString file_name = SlotCurPageTextEdit()->GetFilePath(); + + if (file_name.isEmpty()) { + // QString docname = tabWidget->tabText(tabWidget->currentIndex()); + // docname.remove(0,2); + SlotSaveAs(); + } else { + saveFile(file_name); + } } } @@ -171,6 +184,38 @@ auto TextEdit::saveFile(const QString& file_name) -> bool { return false; } +auto TextEdit::saveEMLFile(const QString& file_name) -> bool { + if (file_name.isEmpty()) return false; + + PlainTextEditorPage* page = CurEMailPage(); + if (page == nullptr) return false; + + QFile file(file_name); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QMessageBox::warning( + this, tr("Warning"), + tr("Cannot read file %1:\n%2.").arg(file_name).arg(file.errorString())); + return false; + } + + QTextStream output_stream(&file); + QApplication::setOverrideCursor(Qt::WaitCursor); + output_stream + << page->GetTextPage()->toPlainText().replace("\n", "\r\n").toLatin1(); + QApplication::restoreOverrideCursor(); + QTextDocument* document = page->GetTextPage()->document(); + + document->setModified(false); + + int cur_index = tab_widget_->currentIndex(); + tab_widget_->setTabText(cur_index, stripped_name(file_name)); + page->SetFilePath(file_name); + page->NotifyFileSaved(); + + file.close(); + return true; +} + auto TextEdit::SlotSaveAs() -> bool { if (tab_widget_->count() == 0 || SlotCurPageTextEdit() == nullptr) { return true; @@ -187,6 +232,22 @@ auto TextEdit::SlotSaveAs() -> bool { return saveFile(QFileDialog::getSaveFileName(this, tr("Save file"), path)); } +auto TextEdit::SlotSaveAsEML() -> bool { + if (tab_widget_->count() == 0 || CurEMailPage() == nullptr) { + return true; + } + + PlainTextEditorPage* page = CurEMailPage(); + QString path; + if (!page->GetFilePath().isEmpty()) { + path = page->GetFilePath(); + } else { + path = tab_widget_->tabText(tab_widget_->currentIndex()).remove(0, 2); + } + + return saveEMLFile(QFileDialog::getSaveFileName(this, tr("Save file"), path)); +} + void TextEdit::SlotCloseTab() { slot_remove_tab(tab_widget_->currentIndex()); if (tab_widget_->count() != 0) { @@ -321,6 +382,13 @@ auto TextEdit::MaybeSaveAnyTab() -> bool { return false; } +void TextEdit::SlotSetText2CurEMailPage(const QString& text) { + if (CurTextPage() == nullptr) SlotNewEMailTab(); + auto* edit = CurTextPage()->GetTextPage(); + edit->clear(); + edit->appendPlainText(text); +} + void TextEdit::SlotAppendText2CurTextPage(const QString& text) { if (CurTextPage() == nullptr) SlotNewTab(); CurTextPage()->GetTextPage()->appendPlainText(text); @@ -554,4 +622,11 @@ auto TextEdit::CurPlainText() const -> QString { } auto TextEdit::TabWidget() const -> QTabWidget* { return tab_widget_; } + +auto TextEdit::CurEMailPage() const -> EMailEditorPage* { + return tab_widget_->CurEMailPage(); +} + +void TextEdit::SlotNewEMailTab() { tab_widget_->SlotNewEMailTab(); } + } // namespace GpgFrontend::UI |