Implenent file_save and file_save_as

This allows us to do the right thing at exit (and also connects to more of
the menu actions to actually do something).

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2013-05-19 15:25:47 -07:00
parent af2354c1f3
commit 25b8092c03
2 changed files with 47 additions and 4 deletions

View file

@ -97,12 +97,12 @@ void MainWindow::on_actionOpen_triggered()
void MainWindow::on_actionSave_triggered() void MainWindow::on_actionSave_triggered()
{ {
qDebug("actionSave"); file_save();
} }
void MainWindow::on_actionSaveAs_triggered() void MainWindow::on_actionSaveAs_triggered()
{ {
qDebug("actionSaveAs"); file_save_as();
} }
void MainWindow::on_actionClose_triggered() void MainWindow::on_actionClose_triggered()
{ {
@ -295,8 +295,7 @@ bool MainWindow::askSaveChanges()
response = QMessageBox::question(this, tr("Save Changes?"), message, response = QMessageBox::question(this, tr("Save Changes?"), message,
QMessageBox::Save | QMessageBox::Cancel | QMessageBox::Ok, QMessageBox::Save); QMessageBox::Save | QMessageBox::Cancel | QMessageBox::Ok, QMessageBox::Save);
if (response == QMessageBox::Save) { if (response == QMessageBox::Save) {
// WARNING: Port. file_save();
// file_save(NULL,NULL);
return true; return true;
} else if (response == QMessageBox::Ok) { } else if (response == QMessageBox::Ok) {
return true; return true;
@ -492,3 +491,45 @@ MainTab* MainWindow::information()
{ {
return ui->InfoWidget; return ui->InfoWidget;
} }
void MainWindow::file_save_as(void)
{
QString filename;
const char *default_filename;
if (existing_filename)
default_filename = existing_filename;
else
default_filename = prefs.default_filename;
filename = QFileDialog::getSaveFileName(this, tr("Save File as"), default_filename,
tr("Subsurface XML files (*.ssrf *.xml *.XML)"));
if (!filename.isNull() && !filename.isEmpty()) {
save_dives(filename.toUtf8().data());
set_filename(filename.toUtf8().data(), TRUE);
mark_divelist_changed(FALSE);
}
}
void MainWindow::file_save(void)
{
const char *current_default;
if (!existing_filename)
return file_save_as();
current_default = prefs.default_filename;
if (strcmp(existing_filename, current_default) == 0) {
/* if we are using the default filename the directory
* that we are creating the file in may not exist */
char *current_def_dir;
struct stat sb;
current_def_dir = g_path_get_dirname(existing_filename);
if (stat(current_def_dir, &sb) != 0) {
g_mkdir(current_def_dir, S_IRWXU);
}
free(current_def_dir);
}
save_dives(existing_filename);
mark_divelist_changed(FALSE);
}

View file

@ -94,6 +94,8 @@ private:
void readSettings(); void readSettings();
void writeSettings(); void writeSettings();
void redrawProfile(); void redrawProfile();
void file_save();
void file_save_as();
}; };
MainWindow *mainWindow(); MainWindow *mainWindow();