From 88da7225332bb347f4b8163372805eee8baaef19 Mon Sep 17 00:00:00 2001 From: mjbudd77 Date: Tue, 10 Aug 2021 21:49:44 -0400 Subject: [PATCH] Added a few missing config parameters to Qt trace logger. Namely, save to file (flag and path) and automatic window update. --- src/drivers/Qt/TraceLogger.cpp | 47 ++++++++++++++++++++++++++-------- src/drivers/Qt/TraceLogger.h | 2 ++ src/drivers/Qt/config.cpp | 3 +++ 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/drivers/Qt/TraceLogger.cpp b/src/drivers/Qt/TraceLogger.cpp index be4f62b9..aabb6b66 100644 --- a/src/drivers/Qt/TraceLogger.cpp +++ b/src/drivers/Qt/TraceLogger.cpp @@ -121,7 +121,7 @@ static HANDLE logFile = INVALID_HANDLE_VALUE; #else static int logFile = -1; #endif -static char logFilePath[512] = { 0 }; +static std::string logFilePath; //---------------------------------------------------- static void initLogOption( const char *name, int bitmask ) { @@ -151,7 +151,7 @@ TraceLoggerDialog_t::TraceLoggerDialog_t(QWidget *parent) QMenu *fileMenu; QAction *act; QLabel *lbl; - int useNativeMenuBar; + int opt, useNativeMenuBar; if (recBufMax == 0) { @@ -244,7 +244,15 @@ TraceLoggerDialog_t::TraceLoggerDialog_t(QWidget *parent) autoUpdateCbox = new QCheckBox(tr("Automatically update this window while logging")); clearButton = new QPushButton(tr("Clear Log")); - autoUpdateCbox->setChecked(true); + g_config->getOption("SDL.TraceLogSaveFilePath", &logFilePath); + + g_config->getOption("SDL.TraceLogSaveToFile", &opt ); + logFileCbox->setChecked( opt ); + connect(logFileCbox, SIGNAL(stateChanged(int)), this, SLOT(logToFileStateChanged(int))); + + g_config->getOption("SDL.TraceLogPeriodicWindowUpdate", &opt ); + autoUpdateCbox->setChecked( opt ); + connect(autoUpdateCbox, SIGNAL(stateChanged(int)), this, SLOT(autoUpdateStateChanged(int))); if (logging) { @@ -512,7 +520,7 @@ void TraceLoggerDialog_t::toggleLoggingOnOff(void) { if (logFileCbox->isChecked()) { - if ( logFilePath[0] == 0 ) + if ( logFilePath.size() == 0 ) { openLogFile(); } @@ -563,11 +571,18 @@ void TraceLoggerDialog_t::openLogFile(void) if (romFile != NULL) { - char dir[512]; + char dir[1024]; getDirFromFile(romFile, dir); dialog.setDirectory(tr(dir)); } + if ( logFilePath.size() != 0 ) + { + char dir[1024]; + getDirFromFile(logFilePath.c_str(), dir); + dialog.setDirectory(tr(dir)); + } + // Check config option to use native file dialog or not g_config->getOption("SDL.UseNativeFileDialog", &useNativeFileDialogVal); @@ -592,7 +607,9 @@ void TraceLoggerDialog_t::openLogFile(void) } //qDebug() << "selected file path : " << filename.toUtf8(); - strcpy( logFilePath, filename.toStdString().c_str() ); + logFilePath = filename.toStdString(); + + g_config->setOption("SDL.TraceLogSaveFilePath", logFilePath); return; } @@ -608,6 +625,16 @@ void TraceLoggerDialog_t::vbarChanged(int val) traceView->update(); } //---------------------------------------------------- +void TraceLoggerDialog_t::logToFileStateChanged(int state) +{ + g_config->setOption("SDL.TraceLogSaveToFile", state != Qt::Unchecked ); +} +//---------------------------------------------------- +void TraceLoggerDialog_t::autoUpdateStateChanged(int state) +{ + g_config->setOption("SDL.TraceLogPeriodicWindowUpdate", state != Qt::Unchecked ); +} +//---------------------------------------------------- void TraceLoggerDialog_t::logRegStateChanged(int state) { if (state == Qt::Unchecked) @@ -2337,24 +2364,24 @@ void TraceLogDiskThread_t::run(void) setPriority( QThread::HighestPriority ); #ifdef WIN32 - logFile = CreateFileA( logFilePath, GENERIC_WRITE, + logFile = CreateFileA( logFilePath.c_str(), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING, NULL ); if ( logFile == INVALID_HANDLE_VALUE ) { char stmp[1024]; - sprintf( stmp, "Error: Failed to open log file for writing: %s", logFilePath ); + sprintf( stmp, "Error: Failed to open log file for writing: %s", logFilePath.c_str() ); consoleWindow->QueueErrorMsgWindow(stmp); return; } #else - logFile = open( logFilePath, O_CREAT | O_WRONLY | O_TRUNC, + logFile = open( logFilePath.c_str(), O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH ); if ( logFile == -1 ) { char stmp[1024]; - sprintf( stmp, "Error: Failed to open log file for writing: %s", logFilePath ); + sprintf( stmp, "Error: Failed to open log file for writing: %s", logFilePath.c_str() ); consoleWindow->QueueErrorMsgWindow(stmp); return; } diff --git a/src/drivers/Qt/TraceLogger.h b/src/drivers/Qt/TraceLogger.h index adb0accb..8e0454e3 100644 --- a/src/drivers/Qt/TraceLogger.h +++ b/src/drivers/Qt/TraceLogger.h @@ -199,6 +199,8 @@ public slots: private slots: void updatePeriodic(void); void toggleLoggingOnOff(void); + void autoUpdateStateChanged(int state); + void logToFileStateChanged(int state); void logRegStateChanged(int state); void logFrameStateChanged(int state); void logEmuMsgStateChanged(int state); diff --git a/src/drivers/Qt/config.cpp b/src/drivers/Qt/config.cpp index ee002b66..93e4d25a 100644 --- a/src/drivers/Qt/config.cpp +++ b/src/drivers/Qt/config.cpp @@ -639,6 +639,9 @@ InitConfig() config->addOption("autoResumeCDL", "SDL.AutoResumeCDL", 0); // Trace Logger Options + config->addOption("SDL.TraceLogSaveToFile", 0); + config->addOption("SDL.TraceLogSaveFilePath", ""); + config->addOption("SDL.TraceLogPeriodicWindowUpdate", 1); config->addOption("SDL.TraceLogRegisterState", 1); config->addOption("SDL.TraceLogProcessorState", 1); config->addOption("SDL.TraceLogNewInstructions", 0);