diff --git a/tools/lammps-gui/logwindow.cpp b/tools/lammps-gui/logwindow.cpp index 7091b34f43..4b008ce5ca 100644 --- a/tools/lammps-gui/logwindow.cpp +++ b/tools/lammps-gui/logwindow.cpp @@ -12,7 +12,17 @@ ------------------------------------------------------------------------- */ #include "logwindow.h" + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include LogWindow::LogWindow(QWidget *parent) : QPlainTextEdit(parent) { @@ -30,6 +40,38 @@ void LogWindow::closeEvent(QCloseEvent *event) QPlainTextEdit::closeEvent(event); } +void LogWindow::save_as() +{ + QString fileName = QFileDialog::getSaveFileName(this, "Save Log to File"); + if (fileName.isEmpty()) return; + + QFileInfo path(fileName); + QFile file(path.absoluteFilePath()); + + if (!file.open(QIODevice::WriteOnly | QFile::Text)) { + QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString()); + return; + } + + QTextStream out(&file); + QString text = toPlainText(); + out << text; + if (text.back().toLatin1() != '\n') out << "\n"; // add final newline if missing + file.close(); +} + +void LogWindow::contextMenuEvent(QContextMenuEvent *event) +{ + // show augmented context menu + auto *menu = createStandardContextMenu(); + menu->addSeparator(); + auto action = menu->addAction(QString("Save Log to File ...")); + action->setIcon(QIcon(":/icons/document-save-as.png")); + connect(action, &QAction::triggered, this, &LogWindow::save_as); + menu->exec(event->globalPos()); + delete menu; +} + // Local Variables: // c-basic-offset: 4 // End: diff --git a/tools/lammps-gui/logwindow.h b/tools/lammps-gui/logwindow.h index 8807ef5cee..4765b2faa7 100644 --- a/tools/lammps-gui/logwindow.h +++ b/tools/lammps-gui/logwindow.h @@ -22,8 +22,12 @@ class LogWindow : public QPlainTextEdit { public: LogWindow(QWidget *parent = nullptr); +private slots: + void save_as(); + protected: void closeEvent(QCloseEvent *event) override; + void contextMenuEvent(QContextMenuEvent *event) override; }; #endif