diff --git a/src/SeerConsoleWidget.cpp b/src/SeerConsoleWidget.cpp index 17eb2bc..dc2e7b4 100644 --- a/src/SeerConsoleWidget.cpp +++ b/src/SeerConsoleWidget.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -49,6 +50,9 @@ SeerConsoleWidget::SeerConsoleWidget (QWidget* parent) : QWidget(parent) { QObject::connect(saveButton, &QPushButton::clicked, this, &SeerConsoleWidget::handleSaveButton); QObject::connect(wrapTextCheckBox, &QCheckBox::clicked, this, &SeerConsoleWidget::handleWrapTextCheckBox); QObject::connect(stdinLineEdit, &QLineEdit::returnPressed, this, &SeerConsoleWidget::handleStdinLineEdit); + + // Restore window settings. + readSettings(); } SeerConsoleWidget::~SeerConsoleWidget () { @@ -305,3 +309,33 @@ void SeerConsoleWidget::deleteConsole () { ::close(_ptsFD); _ptsFD = -1; } +void SeerConsoleWidget::writeSettings() { + + QSettings settings; + + settings.beginGroup("consolewindow"); + settings.setValue("size", size()); + settings.endGroup(); + + //qDebug() << __PRETTY_FUNCTION__ << ":" << size(); +} + +void SeerConsoleWidget::readSettings() { + + QSettings settings; + + settings.beginGroup("consolewindow"); + resize(settings.value("size", QSize(800, 600)).toSize()); + settings.endGroup(); + + //qDebug() << __PRETTY_FUNCTION__ << ":" << size(); +} + +void SeerConsoleWidget::resizeEvent (QResizeEvent* event) { + + // Write window settings. + writeSettings(); + + QWidget::resizeEvent(event); +} + diff --git a/src/SeerConsoleWidget.h b/src/SeerConsoleWidget.h index 276aa72..cba11cb 100644 --- a/src/SeerConsoleWidget.h +++ b/src/SeerConsoleWidget.h @@ -2,6 +2,7 @@ #include #include +#include #include #include #include "ui_SeerConsoleWidget.h" @@ -30,6 +31,9 @@ class SeerConsoleWidget : public QWidget, protected Ui::SeerConsoleWidgetForm { void connectConsole (); void disconnectConsole (); void deleteConsole (); + void writeSettings (); + void readSettings (); + void resizeEvent (QResizeEvent* event); private: QTextCursor _cursor; diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index b2bbe09..d4b9df8 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -35,10 +35,10 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { font.setFixedPitch(true); font.setStyleHint(QFont::TypeWriter); - _breakpointsBrowserWidget = new SeerBreakpointsBrowserWidget(this); - _watchpointsBrowserWidget = new SeerWatchpointsBrowserWidget(this); - _gdbOutputLog = new SeerTildeEqualAmpersandLogWidget(this); - _seerOutputLog = new SeerCaretAsteriskLogWidget(this); + _breakpointsBrowserWidget = new SeerBreakpointsBrowserWidget(this); + _watchpointsBrowserWidget = new SeerWatchpointsBrowserWidget(this); + _gdbOutputLog = new SeerTildeEqualAmpersandLogWidget(this); + _seerOutputLog = new SeerCaretAsteriskLogWidget(this); logsTabWidget->addTab(_breakpointsBrowserWidget, "Breakpoints"); logsTabWidget->addTab(_watchpointsBrowserWidget, "Watchpoints"); @@ -148,6 +148,14 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { QObject::connect(this, &SeerGdbWidget::stoppingPointReached, variableManagerWidget->variableTrackerBrowserWidget(), &SeerVariableTrackerBrowserWidget::handleStoppingPointReached); QObject::connect(this, &SeerGdbWidget::stoppingPointReached, _breakpointsBrowserWidget, &SeerBreakpointsBrowserWidget::handleStoppingPointReached); QObject::connect(this, &SeerGdbWidget::stoppingPointReached, _watchpointsBrowserWidget, &SeerWatchpointsBrowserWidget::handleStoppingPointReached); + + QObject::connect(leftCenterRightSplitter, &QSplitter::splitterMoved, this, &SeerGdbWidget::handleSplitterMoved); + QObject::connect(sourceLibraryVariableManagerSplitter, &QSplitter::splitterMoved, this, &SeerGdbWidget::handleSplitterMoved); + QObject::connect(codeManagerLogTabsSplitter, &QSplitter::splitterMoved, this, &SeerGdbWidget::handleSplitterMoved); + QObject::connect(stackThreadManagersplitter, &QSplitter::splitterMoved, this, &SeerGdbWidget::handleSplitterMoved); + + // Restore window settings. + readSettings(); } SeerGdbWidget::~SeerGdbWidget () { @@ -331,14 +339,23 @@ void SeerGdbWidget::handleGdbRunExecutable () { return; } - // Delete old console. - deleteConsole(); - // Kill previous gdb, if any. if (isGdbRuning() == true) { + + int result = QMessageBox::warning(this, "Seer", + QString("The executable is already running.\n\nAre you sure to restart it?"), + QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Cancel); + + if (result == QMessageBox::Cancel) { + return; + } + killGdb(); } + // Delete old console. + deleteConsole(); + // If gdb isn't running, start it. if (isGdbRuning() == false) { startGdb(); @@ -385,14 +402,23 @@ void SeerGdbWidget::handleGdbStartExecutable () { //qDebug() << __PRETTY_FUNCTION__ << ": newExecutableFlag = " << newExecutableFlag(); - // Delete old console. - deleteConsole(); - // Kill previous gdb, if any. if (isGdbRuning() == true) { + + int result = QMessageBox::warning(this, "Seer", + QString("The executable is already running.\n\nAre you sure to restart it?"), + QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Cancel); + + if (result == QMessageBox::Cancel) { + return; + } + killGdb(); } + // Delete old console. + deleteConsole(); + // If gdb isn't running, start it. if (isGdbRuning() == false) { startGdb(); @@ -1007,6 +1033,13 @@ void SeerGdbWidget::handleGdbMemoryEvaluateExpression (int expressionid, QString handleGdbCommand(QString::number(expressionid) + "-data-read-memory-bytes " + address + " " + QString::number(count)); } +void SeerGdbWidget::handleSplitterMoved (int pos, int index) { + + //qDebug() << __PRETTY_FUNCTION__ << ":" << "Splitter moved to " << pos << index; + + writeSettings(); +} + void SeerGdbWidget::handleFinished (int exitCode, QProcess::ExitStatus exitStatus) { Q_UNUSED(exitCode); @@ -1016,6 +1049,30 @@ void SeerGdbWidget::handleFinished (int exitCode, QProcess::ExitStatus exitStatu qApp->exit(); } +void SeerGdbWidget::writeSettings () { + + QSettings settings; + + settings.beginGroup("mainwindowsplitters"); + settings.setValue("leftCenterRightSplitter", leftCenterRightSplitter->saveState()); + settings.setValue("codeManagerLogTabsSplitter", codeManagerLogTabsSplitter->saveState()); + settings.setValue("sourceLibraryVariableManagerSplitter", sourceLibraryVariableManagerSplitter->saveState()); + settings.setValue("stackThreadManagersplitter", stackThreadManagersplitter->saveState()); + settings.endGroup(); +} + +void SeerGdbWidget::readSettings () { + + QSettings settings; + + settings.beginGroup("mainwindowsplitters"); + leftCenterRightSplitter->restoreState(settings.value("leftCenterRightSplitter").toByteArray()); + codeManagerLogTabsSplitter->restoreState(settings.value("codeManagerLogTabsSplitter").toByteArray()); + sourceLibraryVariableManagerSplitter->restoreState(settings.value("sourceLibraryVariableManagerSplitter").toByteArray()); + stackThreadManagersplitter->restoreState(settings.value("stackThreadManagersplitter").toByteArray()); + settings.endGroup(); +} + bool SeerGdbWidget::isGdbRuning () const { if (_gdbProcess->state() == QProcess::NotRunning) { diff --git a/src/SeerGdbWidget.h b/src/SeerGdbWidget.h index 1abd894..d0ff02c 100644 --- a/src/SeerGdbWidget.h +++ b/src/SeerGdbWidget.h @@ -95,12 +95,17 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm { void handleGdbDataDeleteExpressions (QString expressionids); void handleGdbMemoryAddExpression (QString expression); void handleGdbMemoryEvaluateExpression (int expressionid, QString address, int count); + void handleSplitterMoved (int pos, int index); void handleFinished (int exitCode, QProcess::ExitStatus exitStatus); signals: void stoppingPointReached (); + protected: + void writeSettings (); + void readSettings (); + private: bool isGdbRuning () const; void startGdb (); diff --git a/src/SeerGdbWidget.ui b/src/SeerGdbWidget.ui index 1cf5a36..3f7df3b 100644 --- a/src/SeerGdbWidget.ui +++ b/src/SeerGdbWidget.ui @@ -6,8 +6,8 @@ 0 0 - 1085 - 1128 + 997 + 566 @@ -15,11 +15,11 @@ - + Qt::Horizontal - + 20 @@ -52,7 +52,7 @@ - + 60 @@ -92,7 +92,7 @@ - + 20 diff --git a/src/SeerMainWindow.cpp b/src/SeerMainWindow.cpp index 1758498..45607ae 100644 --- a/src/SeerMainWindow.cpp +++ b/src/SeerMainWindow.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include SeerMainWindow::SeerMainWindow(QWidget* parent) : QMainWindow(parent) { @@ -42,10 +43,10 @@ SeerMainWindow::SeerMainWindow(QWidget* parent) : QMainWindow(parent) { QObject::connect(actionGdbRun, &QAction::triggered, centralwidget, &SeerGdbWidget::handleGdbRunExecutable); QObject::connect(actionGdbStart, &QAction::triggered, centralwidget, &SeerGdbWidget::handleGdbStartExecutable); + QObject::connect(actionGdbContinue, &QAction::triggered, centralwidget, &SeerGdbWidget::handleGdbContinue); QObject::connect(actionGdbNext, &QAction::triggered, centralwidget, &SeerGdbWidget::handleGdbNext); QObject::connect(actionGdbStep, &QAction::triggered, centralwidget, &SeerGdbWidget::handleGdbStep); QObject::connect(actionGdbFinish, &QAction::triggered, centralwidget, &SeerGdbWidget::handleGdbFinish); - QObject::connect(actionGdbContinue, &QAction::triggered, centralwidget, &SeerGdbWidget::handleGdbContinue); QObject::connect(actionInterruptProcess, &QAction::triggered, centralwidget, &SeerGdbWidget::handleGdbInterrupt); QObject::connect(nextKeyF5, &QShortcut::activated, centralwidget, &SeerGdbWidget::handleGdbNext); @@ -57,6 +58,9 @@ SeerMainWindow::SeerMainWindow(QWidget* parent) : QMainWindow(parent) { QObject::connect(centralwidget->gdbMonitor(), &GdbMonitor::astrixTextOutput, this, &SeerMainWindow::handleText); QObject::connect(centralwidget->gdbMonitor(), &GdbMonitor::caretTextOutput, this, &SeerMainWindow::handleText); + // Restore window settings. + readSettings(); + // // Initialize contents. // @@ -414,3 +418,33 @@ void SeerMainWindow::closeEvent (QCloseEvent* event) { QCoreApplication::exit(0); } +void SeerMainWindow::writeSettings() { + + QSettings settings; + + settings.beginGroup("mainwindow"); + settings.setValue("size", size()); + settings.endGroup(); + + //qDebug() << __PRETTY_FUNCTION__ << ":" << size(); +} + +void SeerMainWindow::readSettings() { + + QSettings settings; + + settings.beginGroup("mainwindow"); + resize(settings.value("size", QSize(1250, 1000)).toSize()); + settings.endGroup(); + + //qDebug() << __PRETTY_FUNCTION__ << ":" << size(); +} + +void SeerMainWindow::resizeEvent (QResizeEvent* event) { + + // Write window settings. + writeSettings(); + + QMainWindow::resizeEvent(event); +} + diff --git a/src/SeerMainWindow.h b/src/SeerMainWindow.h index 8848794..b06f0e5 100644 --- a/src/SeerMainWindow.h +++ b/src/SeerMainWindow.h @@ -3,6 +3,7 @@ #include "ui_SeerMainWindow.h" #include #include +#include #include #include @@ -38,6 +39,9 @@ class SeerMainWindow : public QMainWindow, protected Ui::SeerMainWindowForm { void handleText (const QString& text); protected: + void writeSettings (); + void readSettings (); + void resizeEvent (QResizeEvent* event); void closeEvent (QCloseEvent* event); private: diff --git a/src/SeerMainWindow.ui b/src/SeerMainWindow.ui index a979fe6..2db2a67 100644 --- a/src/SeerMainWindow.ui +++ b/src/SeerMainWindow.ui @@ -76,11 +76,10 @@ + - - diff --git a/src/SeerMemoryVisualizerWidget.cpp b/src/SeerMemoryVisualizerWidget.cpp index 913c543..bd039ce 100644 --- a/src/SeerMemoryVisualizerWidget.cpp +++ b/src/SeerMemoryVisualizerWidget.cpp @@ -5,8 +5,9 @@ #include #include #include -#include #include +#include +#include SeerMemoryVisualizerWidget::SeerMemoryVisualizerWidget (QWidget* parent) : QWidget(parent) { @@ -52,6 +53,9 @@ SeerMemoryVisualizerWidget::SeerMemoryVisualizerWidget (QWidget* parent) : QWidg QObject::connect(columnCountSpinBox, QOverload::of(&QSpinBox::valueChanged), this, &SeerMemoryVisualizerWidget::handleColumnCountSpinBox); QObject::connect(printToolButton, &QToolButton::clicked, this, &SeerMemoryVisualizerWidget::handlePrintButton); QObject::connect(saveToolButton, &QToolButton::clicked, this, &SeerMemoryVisualizerWidget::handleSaveButton); + + // Restore window settings. + readSettings(); } SeerMemoryVisualizerWidget::~SeerMemoryVisualizerWidget () { @@ -124,7 +128,7 @@ void SeerMemoryVisualizerWidget::handleText (const QString& text) { if (id_text.toInt() == _variableId) { - QStringList words = Seer::filterEscapes(Seer::parseFirst(text, "value=", '"', '"', false)).split(' ',QString::SkipEmptyParts); + QStringList words = Seer::filterEscapes(Seer::parseFirst(text, "value=", '"', '"', false)).split(' ', QString::SkipEmptyParts); setVariableAddress(words.first()); } @@ -323,3 +327,32 @@ void SeerMemoryVisualizerWidget::handleSaveButton () { } } +void SeerMemoryVisualizerWidget::writeSettings() { + + QSettings settings; + + settings.beginGroup("memoryvisualizerwindow"); + settings.setValue("size", size()); + settings.endGroup(); + + //qDebug() << __PRETTY_FUNCTION__ << ":" << size(); +} + +void SeerMemoryVisualizerWidget::readSettings() { + + QSettings settings; + + settings.beginGroup("memoryvisualizerwindow"); + resize(settings.value("size", QSize(800, 400)).toSize()); + settings.endGroup(); + + //qDebug() << __PRETTY_FUNCTION__ << ":" << size(); +} + +void SeerMemoryVisualizerWidget::resizeEvent (QResizeEvent* event) { + + writeSettings(); + + QWidget::resizeEvent(event); +} + diff --git a/src/SeerMemoryVisualizerWidget.h b/src/SeerMemoryVisualizerWidget.h index d392e74..4da2c04 100644 --- a/src/SeerMemoryVisualizerWidget.h +++ b/src/SeerMemoryVisualizerWidget.h @@ -33,6 +33,10 @@ class SeerMemoryVisualizerWidget : public QWidget, protected Ui::SeerMemoryVisua void handleSaveButton (); protected: + void writeSettings (); + void readSettings (); + void resizeEvent (QResizeEvent* event); + private: int _variableId; int _memoryId; diff --git a/src/seer.cpp b/src/seer.cpp index a0420d7..c2d503b 100644 --- a/src/seer.cpp +++ b/src/seer.cpp @@ -10,6 +10,8 @@ int main (int argc, char* argv[]) { QApplication app(argc, argv); QCoreApplication::setApplicationName("Seer"); + QCoreApplication::setOrganizationName("Pasvix"); + QCoreApplication::setOrganizationName("pasvix.com"); QCoreApplication::setApplicationVersion("1.0.3 - Ernie Pasveer (c)2021"); //