From 5b5210130c31f0865659aeb8ab3dbb63f81d8c09 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Aug 2023 21:19:05 -0400 Subject: [PATCH] improve highlighting settings to also show errors with different color --- tools/lammps-gui/codeeditor.cpp | 30 ++++++++++++++++++++++-------- tools/lammps-gui/codeeditor.h | 5 ++++- tools/lammps-gui/lammpsgui.cpp | 12 ++++++++++-- tools/lammps-gui/lammpsrunner.h | 2 +- tools/lammps-gui/preferences.cpp | 2 +- tools/lammps-gui/run-file.png | Bin 0 -> 2337 bytes 6 files changed, 38 insertions(+), 13 deletions(-) create mode 100644 tools/lammps-gui/run-file.png diff --git a/tools/lammps-gui/codeeditor.cpp b/tools/lammps-gui/codeeditor.cpp index 6acba416f2..b438e51319 100644 --- a/tools/lammps-gui/codeeditor.cpp +++ b/tools/lammps-gui/codeeditor.cpp @@ -28,7 +28,7 @@ #include #include -CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent), highlight(-1) +CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent), highlight(NO_HIGHLIGHT) { help_action = new QShortcut(QKeySequence::fromString("Ctrl+?"), parent); connect(help_action, &QShortcut::activated, this, &CodeEditor::get_help); @@ -94,11 +94,9 @@ void CodeEditor::setFont(const QFont &newfont) document()->setDefaultFont(newfont); } -void CodeEditor::setHighlight(int block) +void CodeEditor::setCursor(int block) { - highlight = block; - - // also move cursor to current position + // move cursor to given position auto cursor = textCursor(); int moves = block - cursor.blockNumber(); if (moves < 0) @@ -106,6 +104,17 @@ void CodeEditor::setHighlight(int block) else cursor.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, moves); setTextCursor(cursor); +} + +void CodeEditor::setHighlight(int block, bool error) +{ + if (error) + highlight = -block; + else + highlight = block; + + // also reset the cursor + setCursor(block); // update graphics repaint(); @@ -173,12 +182,17 @@ void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1) + " "; - if ((highlight < 0) || (blockNumber != highlight)) { + if ((highlight == NO_HIGHLIGHT) || (blockNumber != std::abs(highlight))) { painter.setPen(Qt::black); } else { number = QString(">") + QString::number(blockNumber + 1) + "<"; - painter.fillRect(0, top, lineNumberArea->width(), fontMetrics().height(), - Qt::darkRed); + if (highlight < 0) + painter.fillRect(0, top, lineNumberArea->width(), fontMetrics().height(), + Qt::darkRed); + else + painter.fillRect(0, top, lineNumberArea->width(), fontMetrics().height(), + Qt::darkGreen); + painter.setPen(Qt::white); } painter.drawText(0, top, lineNumberArea->width(), fontMetrics().height(), diff --git a/tools/lammps-gui/codeeditor.h b/tools/lammps-gui/codeeditor.h index 0f2dc51c65..0b372f1bfb 100644 --- a/tools/lammps-gui/codeeditor.h +++ b/tools/lammps-gui/codeeditor.h @@ -29,7 +29,10 @@ public: void lineNumberAreaPaintEvent(QPaintEvent *event); int lineNumberAreaWidth(); void setFont(const QFont &newfont); - void setHighlight(int block); + void setCursor(int block); + void setHighlight(int block, bool error); + + static constexpr int NO_HIGHLIGHT = 1 << 30; protected: void resizeEvent(QResizeEvent *event) override; diff --git a/tools/lammps-gui/lammpsgui.cpp b/tools/lammps-gui/lammpsgui.cpp index f0a9828775..548ce4906d 100644 --- a/tools/lammps-gui/lammpsgui.cpp +++ b/tools/lammps-gui/lammpsgui.cpp @@ -504,6 +504,7 @@ void LammpsGui::open_file(const QString &fileName) break; } } + ui->textEdit->setHighlight(CodeEditor::NO_HIGHLIGHT, false); QFileInfo path(fileName); current_file = path.fileName(); @@ -527,6 +528,7 @@ void LammpsGui::open_file(const QString &fileName) ui->textEdit->document()->setModified(false); file.close(); dirstatus->setText(QString(" Directory: ") + current_dir); + status->setText("Ready."); update_variables(); } @@ -665,7 +667,7 @@ void LammpsGui::logupdate() void *ptr = lammps.last_thermo("line", 0); if (ptr) { nline = *((int *)ptr); - ui->textEdit->setHighlight(nline); + ui->textEdit->setHighlight(nline, false); } } @@ -755,7 +757,7 @@ void LammpsGui::run_done() delete logupdater; logupdater = nullptr; progress->setValue(1000); - ui->textEdit->setHighlight(-1); + ui->textEdit->setHighlight(CodeEditor::NO_HIGHLIGHT, false); capturer->EndCapture(); auto log = capturer->GetCapture(); @@ -800,13 +802,19 @@ void LammpsGui::run_done() success = false; } + int nline = CodeEditor::NO_HIGHLIGHT; + void *ptr = lammps.last_thermo("line", 0); + if (ptr) nline = *((int *)ptr); + if (success) { status->setText("Ready."); } else { status->setText("Failed."); + ui->textEdit->setHighlight(nline, true); QMessageBox::critical(this, "LAMMPS-GUI Error", QString("Error running LAMMPS:\n\n") + errorbuf); } + ui->textEdit->setCursor(nline); progress->hide(); dirstatus->show(); } diff --git a/tools/lammps-gui/lammpsrunner.h b/tools/lammps-gui/lammpsrunner.h index a864282924..44a56d00a7 100644 --- a/tools/lammps-gui/lammpsrunner.h +++ b/tools/lammps-gui/lammpsrunner.h @@ -42,7 +42,7 @@ public: { lammps = _lammps; input = _input; - file = _file; + file = _file; lammps->command("clear"); } diff --git a/tools/lammps-gui/preferences.cpp b/tools/lammps-gui/preferences.cpp index 7ce80261a9..bdb7d39dbf 100644 --- a/tools/lammps-gui/preferences.cpp +++ b/tools/lammps-gui/preferences.cpp @@ -397,7 +397,7 @@ SnapshotTab::SnapshotTab(QSettings *_settings, QWidget *parent) : auto *ssao = new QLabel("HQ Image mode:"); auto *bbox = new QLabel("Show Box:"); auto *axes = new QLabel("Show Axes:"); - auto *vdw = new QLabel("VDW Style:"); + auto *vdw = new QLabel("VDW Style:"); auto *cback = new QLabel("Background Color:"); auto *cbox = new QLabel("Box Color:"); settings->beginGroup("snapshot"); diff --git a/tools/lammps-gui/run-file.png b/tools/lammps-gui/run-file.png new file mode 100644 index 0000000000000000000000000000000000000000..abe4f716fb4642c348aa301f1bc27e4175142c5c GIT binary patch literal 2337 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 literal 0 HcmV?d00001