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)
This commit is contained in:
Mark Liversedge
2013-12-27 11:41:10 +00:00
parent 611ffde353
commit 08e7d6d882
5 changed files with 26 additions and 24 deletions

View File

@@ -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)

View File

@@ -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 *);

View File

@@ -272,7 +272,7 @@ void
RideEditor::saveFile()
{
if (ride && ride->isDirty()) {
context->mainWindow->saveRideSingleDialog(ride);
context->mainWindow->saveRideSingleDialog(context, ride);
}
}

View File

@@ -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<RideItem*> dirtyList;
// have we been told to not warn on exit?
if (warnExit() == false) return true; // just close regardless!
for (int i=0; i<currentTab->context->athlete->allRides->childCount(); i++) {
RideItem *curr = (RideItem *)currentTab->context->athlete->allRides->child(i);
for (int i=0; i<context->athlete->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, QList<RideItem *>dirtyList) :
QDialog(mainWindow, Qt::Dialog), mainWindow(mainWindow), dirtyList(dirtyList)
SaveOnExitDialogWidget::SaveOnExitDialogWidget(MainWindow *mainWindow, Context *context, QList<RideItem *>dirtyList) :
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; i<dirtyList.count(); i++) {
QCheckBox *c = (QCheckBox *)dirtyFiles->cellWidget(i,0);
if (c->isChecked()) {
mainWindow->saveRideSingleDialog(dirtyList.at(i));
mainWindow->saveRideSingleDialog(context, dirtyList.at(i));
}
}
accept();

View File

@@ -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<RideItem*>);
SaveOnExitDialogWidget(MainWindow *, Context *context, QList<RideItem*>);
public slots:
void saveClicked();
@@ -73,6 +74,7 @@ class SaveOnExitDialogWidget : public QDialog
private:
MainWindow *mainWindow;
Context *context;
QList<RideItem *>dirtyList;
QPushButton *saveButton, *abandonButton, *cancelButton;
QCheckBox *exitWarnCheckBox;