diff --git a/GUI/Support/Data/Dirs.cpp b/GUI/Support/Data/Dirs.cpp index 7748eacf4b7fe1c8ad1ac2cd96ed521f65c4a101..e980006076c0fcdf587b296eb888ee344d41719f 100644 --- a/GUI/Support/Data/Dirs.cpp +++ b/GUI/Support/Data/Dirs.cpp @@ -32,6 +32,7 @@ BA_GUI_API_ std::unique_ptr<Dirs> gDirs; Dirs::Dirs() { + artifacts_export_dir = QDir::homePath(); readSettings(); } diff --git a/GUI/Support/Data/Dirs.h b/GUI/Support/Data/Dirs.h index a7b8652f2fba78fc4da0bc3437c0b96a7dd7e358..fdd60268f3f33aec41e0deb78e327e67ea4f7f21 100644 --- a/GUI/Support/Data/Dirs.h +++ b/GUI/Support/Data/Dirs.h @@ -28,6 +28,7 @@ public: QString import_filter_1D; //!< Last used import filter for 1D files QString import_filter_2D; //!< Last used import filter for 2D files + QString artifacts_export_dir; //!< Last used directory to save image, script, ... QString userImportDir() const; void setImportDir(const QString& dirname); diff --git a/GUI/View/Realspace/RealspaceWidget.cpp b/GUI/View/Realspace/RealspaceWidget.cpp index a97fad24f3623a1f2d16906239028dcd04aed60c..b3413ae1b6b592830b5a8a8bbd6901987058dda9 100644 --- a/GUI/View/Realspace/RealspaceWidget.cpp +++ b/GUI/View/Realspace/RealspaceWidget.cpp @@ -15,15 +15,15 @@ #include "GUI/View/Realspace/RealspaceWidget.h" #include "Base/Util/Assert.h" #include "GUI/Model/Material/MaterialItem.h" -#include "GUI/Model/Project/ProjectDocument.h" #include "GUI/Model/Sample/SampleItem.h" +#include "GUI/Support/Data/Dirs.h" #include "GUI/View/Info/CautionSign.h" #include "GUI/View/Layout/ApplicationSettings.h" #include "GUI/View/Realspace/RealspaceBuilder.h" +#include "GUI/View/Widget/FileDialog.h" #include "Img3D/Model/Model.h" #include "Img3D/View/Canvas.h" #include <QApplication> -#include <QFileDialog> #include <QMessageBox> #include <QVBoxLayout> @@ -78,30 +78,20 @@ void RealspaceWidget::showEvent(QShowEvent*) void RealspaceWidget::savePicture() { - ASSERT(gDoc); - QString dirname = gDoc->userExportDir(); - QString defaultExtension = ".png"; - QString selectedFilter("*" + defaultExtension); - QString defaultName = dirname + "/untitled"; - QString fname = QFileDialog::getSaveFileName( - nullptr, "Save 3D real space view", defaultName, selectedFilter, nullptr, - appSettings->useNativeFileDialog() ? QFileDialog::Options() - : QFileDialog::DontUseNativeDialog); - QString nameToSave = fname.endsWith(defaultExtension) ? fname : fname + defaultExtension; - if (nameToSave.isEmpty()) + static const QString defaultExtension = ".png"; + QString fname = GUI::Dialog::fileSaveDialog("Save 3D real space view", + gDirs->artifacts_export_dir, + "*" + defaultExtension); + if (fname.isEmpty()) return; + if (!fname.endsWith(defaultExtension)) + fname += defaultExtension; QPixmap pixmap(this->size()); render(&pixmap, QPoint(), childrenRegion()); - try { - pixmap.save(nameToSave); - } catch (const std::exception& ex) { - QString message = "Attempt to save file with the name '"; - message.append(nameToSave); - message.append("' has failed with following error message\n\n"); - message.append(QString::fromStdString(ex.what())); - QMessageBox::warning(nullptr, "Cannot save", message); - } + bool ok = pixmap.save(fname); + if (!ok) + QMessageBox::warning(nullptr, "Cannot save", "Cannot save picture in file " + fname); } void RealspaceWidget::updateScene()