From 08e7d6d882ac19eec7a4fcf72706df070f45926c Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Fri, 27 Dec 2013 11:41:10 +0000 Subject: [PATCH] Update SaveDialogs for Tabbed Athletes .. the save dialogs all assumed the current tab and current context were relevant when checking for unsaved files etc, but this was INCORRECT. .. when window is closed each tab is checked IN TURN so the context should have been passed (because the current tab/context is just one of the many to save) --- src/MainWindow.cpp | 6 +++--- src/MainWindow.h | 6 +++--- src/RideEditor.cpp | 2 +- src/SaveDialogs.cpp | 30 +++++++++++++++--------------- src/SaveDialogs.h | 6 ++++-- 5 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 04a87ce5a..9977326e3 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -868,7 +868,7 @@ MainWindow::closeEvent(QCloseEvent* event) foreach(Tab *tab, closing) { // do we need to save? - if (tab->context->mainWindow->saveRideExitDialog() == true) + if (tab->context->mainWindow->saveRideExitDialog(tab->context) == true) removeTab(tab); else needtosave = true; @@ -1174,7 +1174,7 @@ void MainWindow::saveRide() { if (currentTab->context->ride) - saveRideSingleDialog(currentTab->context->ride); // will signal save to everyone + saveRideSingleDialog(currentTab->context, currentTab->context->ride); // will signal save to everyone else { QMessageBox oops(QMessageBox::Critical, tr("No Activity To Save"), tr("There is no currently selected ride to save.")); @@ -1341,7 +1341,7 @@ bool MainWindow::closeTab() { // wipe it down ... - if (saveRideExitDialog() == false) return false; + if (saveRideExitDialog(currentTab->context) == false) return false; // if its the last tab we close the window if (tabList.count() == 1) diff --git a/src/MainWindow.h b/src/MainWindow.h index dfaa616ad..be8fde03b 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -157,8 +157,8 @@ class MainWindow : public QMainWindow // Activity Collection void addIntervals(); // pass thru to tab - bool saveRideSingleDialog(RideItem *); - void saveSilent(RideItem *); + bool saveRideSingleDialog(Context *, RideItem *); + void saveSilent(Context *, RideItem *); void downloadRide(); void manualRide(); void exportRide(); @@ -180,7 +180,7 @@ class MainWindow : public QMainWindow void deleteRide(); void saveRide(); // save current ride menu item void revertRide(); - bool saveRideExitDialog(); // save dirty rides on exit dialog + bool saveRideExitDialog(Context *); // save dirty rides on exit dialog // save and restore state to context void saveState(Context *); diff --git a/src/RideEditor.cpp b/src/RideEditor.cpp index 727176653..ad47b2475 100644 --- a/src/RideEditor.cpp +++ b/src/RideEditor.cpp @@ -272,7 +272,7 @@ void RideEditor::saveFile() { if (ride && ride->isDirty()) { - context->mainWindow->saveRideSingleDialog(ride); + context->mainWindow->saveRideSingleDialog(context, ride); } } diff --git a/src/SaveDialogs.cpp b/src/SaveDialogs.cpp index dbbedf35c..9402fc7ef 100644 --- a/src/SaveDialogs.cpp +++ b/src/SaveDialogs.cpp @@ -62,7 +62,7 @@ setWarnExit(bool setting) // User selected Save... menu option, prompt if conversion is needed //---------------------------------------------------------------------- bool -MainWindow::saveRideSingleDialog(RideItem *rideItem) +MainWindow::saveRideSingleDialog(Context *context, RideItem *rideItem) { if (rideItem->isDirty() == false) return false; // nothing to save you must be a ^S addict. @@ -73,12 +73,12 @@ MainWindow::saveRideSingleDialog(RideItem *rideItem) // either prompt etc, or just save that file away! if (currentType != "GC" && warnOnConvert() == true) { - SaveSingleDialogWidget dialog(this, rideItem); + SaveSingleDialogWidget dialog(this, context, rideItem); dialog.exec(); return true; } else { // go for it, the user doesn't want warnings! - saveSilent(rideItem); + saveSilent(context, rideItem); return true; } } @@ -87,21 +87,21 @@ MainWindow::saveRideSingleDialog(RideItem *rideItem) // Check if data needs saving on exit and prompt user for action //---------------------------------------------------------------------- bool -MainWindow::saveRideExitDialog() +MainWindow::saveRideExitDialog(Context *context) { QList dirtyList; // have we been told to not warn on exit? if (warnExit() == false) return true; // just close regardless! - for (int i=0; icontext->athlete->allRides->childCount(); i++) { - RideItem *curr = (RideItem *)currentTab->context->athlete->allRides->child(i); + for (int i=0; iathlete->allRides->childCount(); i++) { + RideItem *curr = (RideItem *)context->athlete->allRides->child(i); if (curr->isDirty() == true) dirtyList.append(curr); } // we have some files to save... if (dirtyList.count() > 0) { - SaveOnExitDialogWidget dialog(this, dirtyList); + SaveOnExitDialogWidget dialog(this, context, dirtyList); int result = dialog.exec(); if (result == QDialog::Rejected) return false; // cancel that closeEvent! } @@ -114,7 +114,7 @@ MainWindow::saveRideExitDialog() // Silently save ride and convert to GC format without warning user //---------------------------------------------------------------------- void -MainWindow::saveSilent(RideItem *rideItem) +MainWindow::saveSilent(Context *context, RideItem *rideItem) { QFile currentFile(rideItem->path + QDir::separator() + rideItem->fileName); QFileInfo currentFI(currentFile); @@ -176,7 +176,7 @@ MainWindow::saveSilent(RideItem *rideItem) // save in GC format JsonFileReader reader; - reader.writeRideFile(currentTab->context, rideItem->ride(), savedFile); + reader.writeRideFile(context, rideItem->ride(), savedFile); // rename the file and update the rideItem list to reflect the change if (convert) { @@ -197,8 +197,8 @@ MainWindow::saveSilent(RideItem *rideItem) //---------------------------------------------------------------------- // Save Single File Dialog Widget //---------------------------------------------------------------------- -SaveSingleDialogWidget::SaveSingleDialogWidget(MainWindow *mainWindow, RideItem *rideItem) : - QDialog(mainWindow, Qt::Dialog), mainWindow(mainWindow), rideItem(rideItem) +SaveSingleDialogWidget::SaveSingleDialogWidget(MainWindow *mainWindow, Context *context, RideItem *rideItem) : + QDialog(mainWindow, Qt::Dialog), mainWindow(mainWindow), context(context), rideItem(rideItem) { setWindowTitle(tr("Save and Conversion")); QVBoxLayout *mainLayout = new QVBoxLayout(this); @@ -232,7 +232,7 @@ SaveSingleDialogWidget::SaveSingleDialogWidget(MainWindow *mainWindow, RideItem void SaveSingleDialogWidget::saveClicked() { - mainWindow->saveSilent(rideItem); + mainWindow->saveSilent(context, rideItem); accept(); } @@ -259,8 +259,8 @@ SaveSingleDialogWidget::warnSettingClicked() // Save on Exit File Dialog Widget //---------------------------------------------------------------------- -SaveOnExitDialogWidget::SaveOnExitDialogWidget(MainWindow *mainWindow, QListdirtyList) : - QDialog(mainWindow, Qt::Dialog), mainWindow(mainWindow), dirtyList(dirtyList) +SaveOnExitDialogWidget::SaveOnExitDialogWidget(MainWindow *mainWindow, Context *context, QListdirtyList) : + QDialog(mainWindow, Qt::Dialog), mainWindow(mainWindow), context(context), dirtyList(dirtyList) { setWindowTitle("Save Changes"); QVBoxLayout *mainLayout = new QVBoxLayout(this); @@ -325,7 +325,7 @@ SaveOnExitDialogWidget::saveClicked() for (int i=0; icellWidget(i,0); if (c->isChecked()) { - mainWindow->saveRideSingleDialog(dirtyList.at(i)); + mainWindow->saveRideSingleDialog(context, dirtyList.at(i)); } } accept(); diff --git a/src/SaveDialogs.h b/src/SaveDialogs.h index a4a250f53..392d10d04 100644 --- a/src/SaveDialogs.h +++ b/src/SaveDialogs.h @@ -39,7 +39,7 @@ class SaveSingleDialogWidget : public QDialog public: - SaveSingleDialogWidget(MainWindow *, RideItem *); + SaveSingleDialogWidget(MainWindow *, Context *context, RideItem *); public slots: void saveClicked(); @@ -50,6 +50,7 @@ class SaveSingleDialogWidget : public QDialog private: MainWindow *mainWindow; + Context *context; RideItem *rideItem; QPushButton *saveButton, *abandonButton, *cancelButton; QCheckBox *warnCheckBox; @@ -63,7 +64,7 @@ class SaveOnExitDialogWidget : public QDialog public: - SaveOnExitDialogWidget(MainWindow *, QList); + SaveOnExitDialogWidget(MainWindow *, Context *context, QList); public slots: void saveClicked(); @@ -73,6 +74,7 @@ class SaveOnExitDialogWidget : public QDialog private: MainWindow *mainWindow; + Context *context; QListdirtyList; QPushButton *saveButton, *abandonButton, *cancelButton; QCheckBox *exitWarnCheckBox;