From 63933a1821312f4fad4fd088efaf6a327069853b Mon Sep 17 00:00:00 2001 From: Matthew Budd Date: Mon, 28 Sep 2020 21:51:14 -0400 Subject: [PATCH] Added CDL File load/save logic. --- src/drivers/Qt/CodeDataLogger.cpp | 134 +++++++++++++++++++++++++++- src/drivers/Qt/CodeDataLogger.h | 3 + src/drivers/Qt/ConsoleUtilities.cpp | 4 +- 3 files changed, 138 insertions(+), 3 deletions(-) diff --git a/src/drivers/Qt/CodeDataLogger.cpp b/src/drivers/Qt/CodeDataLogger.cpp index 55e6a584..cd272d0d 100644 --- a/src/drivers/Qt/CodeDataLogger.cpp +++ b/src/drivers/Qt/CodeDataLogger.cpp @@ -1,6 +1,7 @@ // CodeDataLogger.cpp // #include +#include #include #include @@ -133,12 +134,15 @@ CodeDataLoggerDialog_t::CodeDataLoggerDialog_t(QWidget *parent) btn = new QPushButton( tr("Save") ); grid->addWidget( btn, 0, 2, Qt::AlignCenter ); + connect( btn, SIGNAL(clicked(void)), this, SLOT(saveCdlFile(void))); btn = new QPushButton( tr("Load") ); grid->addWidget( btn, 1, 0, Qt::AlignCenter ); + connect( btn, SIGNAL(clicked(void)), this, SLOT(loadCdlFile(void))); btn = new QPushButton( tr("Save As") ); grid->addWidget( btn, 1, 2, Qt::AlignCenter ); + connect( btn, SIGNAL(clicked(void)), this, SLOT(saveCdlFileAs(void))); hbox = new QHBoxLayout(); vbox1->addLayout( hbox ); @@ -287,18 +291,142 @@ void CodeDataLoggerDialog_t::StartPauseCDLogClicked(void) { if ( FCEUI_GetLoggingCD() ) { - printf("CD Logging Paused\n"); + //printf("CD Logging Paused\n"); PauseCDLogging(); startPauseButton->setText( tr("Start") ); } else { - printf("CD Logging Started\n"); + //printf("CD Logging Started\n"); StartCDLogging(); startPauseButton->setText( tr("Pause") ); } } //---------------------------------------------------- +void CodeDataLoggerDialog_t::saveCdlFile(void) +{ + SaveCDLogFile(); +} +//---------------------------------------------------- +void CodeDataLoggerDialog_t::saveCdlFileAs(void) +{ + int ret, useNativeFileDialogVal; + QString filename; + const char *romFile; + QFileDialog dialog(this, tr("Save CDL To File") ); + + dialog.setFileMode(QFileDialog::AnyFile); + + dialog.setNameFilter(tr("CDL Files (*.cdl *.CDL) ;; All files (*)")); + + dialog.setViewMode(QFileDialog::List); + dialog.setFilter( QDir::AllEntries | QDir::Hidden ); + dialog.setLabelText( QFileDialog::Accept, tr("Save") ); + dialog.setDefaultSuffix( tr(".cdl") ); + + romFile = getRomFile(); + + if ( romFile != NULL ) + { + char dir[512], base[256]; + + parseFilepath( romFile, dir, base ); + + strcat( base, ".cdl"); + + dialog.setDirectory( tr(dir) ); + + dialog.selectFile( tr(base) ); + } + + // Check config option to use native file dialog or not + g_config->getOption ("SDL.UseNativeFileDialog", &useNativeFileDialogVal); + + dialog.setOption(QFileDialog::DontUseNativeDialog, !useNativeFileDialogVal); + + dialog.show(); + ret = dialog.exec(); + + if ( ret ) + { + QStringList fileList; + fileList = dialog.selectedFiles(); + + if ( fileList.size() > 0 ) + { + filename = fileList[0]; + } + } + + if ( filename.isNull() ) + { + return; + } + //qDebug() << "selected file path : " << filename.toUtf8(); + + fceuWrapperLock(); + strcpy( loadedcdfile, filename.toStdString().c_str() ); + SaveCDLogFile(); + fceuWrapperUnLock(); +} +//---------------------------------------------------- +void CodeDataLoggerDialog_t::loadCdlFile(void) +{ + int ret, useNativeFileDialogVal; + QString filename; + char dir[512]; + const char *romFile; + QFileDialog dialog(this, tr("Load CDL File") ); + + dialog.setFileMode(QFileDialog::ExistingFile); + + dialog.setNameFilter(tr("CDL files (*.cdl *.CDL) ;; All files (*)")); + + dialog.setViewMode(QFileDialog::List); + dialog.setFilter( QDir::AllEntries | QDir::Hidden ); + dialog.setLabelText( QFileDialog::Accept, tr("Load") ); + + romFile = getRomFile(); + + if ( romFile ) + { + getDirFromFile( romFile, dir ); + + dialog.setDirectory( tr(dir) ); + } + + // Check config option to use native file dialog or not + g_config->getOption ("SDL.UseNativeFileDialog", &useNativeFileDialogVal); + + dialog.setOption(QFileDialog::DontUseNativeDialog, !useNativeFileDialogVal); + + dialog.show(); + ret = dialog.exec(); + + if ( ret ) + { + QStringList fileList; + fileList = dialog.selectedFiles(); + + if ( fileList.size() > 0 ) + { + filename = fileList[0]; + } + } + + if ( filename.isNull() ) + { + return; + } + //qDebug() << "selected file path : " << filename.toUtf8(); + + fceuWrapperLock(); + LoadCDLog ( filename.toStdString().c_str() ); + fceuWrapperUnLock(); + + return; +} +//---------------------------------------------------- static int getDefaultCDLFile( char *filepath ) { const char *romFile; @@ -399,7 +527,9 @@ bool LoadCDLog(const char* nameo) FP = fopen(nameo, "rb"); if (FP == NULL) + { return false; + } for(i = 0;i < (int)cdloggerdataSize;i++) { diff --git a/src/drivers/Qt/CodeDataLogger.h b/src/drivers/Qt/CodeDataLogger.h index c1782041..c768c8a9 100644 --- a/src/drivers/Qt/CodeDataLogger.h +++ b/src/drivers/Qt/CodeDataLogger.h @@ -45,6 +45,9 @@ class CodeDataLoggerDialog_t : public QDialog public slots: void closeWindow(void); private slots: + void loadCdlFile(void); + void saveCdlFile(void); + void saveCdlFileAs(void); void updatePeriodic(void); void ResetCDLogClicked(void); void StartPauseCDLogClicked(void); diff --git a/src/drivers/Qt/ConsoleUtilities.cpp b/src/drivers/Qt/ConsoleUtilities.cpp index c9fa3a48..9bedc75f 100644 --- a/src/drivers/Qt/ConsoleUtilities.cpp +++ b/src/drivers/Qt/ConsoleUtilities.cpp @@ -88,7 +88,9 @@ int parseFilepath( const char *filepath, char *dir, char *base, char *suffix ) int i=0,j=0,end=0; if ( filepath == NULL ) { - base[0] = 0; + if ( dir ) dir[0] = 0; + if ( base ) base[0] = 0; + if ( suffix) suffix[0] = 0; return 0; } i=0; j=0;