#include "FileDialog.h" #include "Settings.h" QString FileDialog::getOpenFileName(const FileDialogTypes dialogType, QWidget* parent, const QString& caption, const QString &filter, QString *selectedFilter, Options options) { QString result = QFileDialog::getOpenFileName(parent, caption, getFileDialogPath(dialogType), filter, selectedFilter, options); if(!result.isEmpty()) setFileDialogPath(dialogType, result); return result; } QStringList FileDialog::getOpenFileNames(const FileDialogTypes dialogType, QWidget *parent, const QString &caption, const QString &filter, QString *selectedFilter, QFileDialog::Options options) { QStringList result = QFileDialog::getOpenFileNames(parent, caption, getFileDialogPath(dialogType), filter, selectedFilter, options); if(!result.isEmpty()) { QFileInfo path = QFileInfo(result.first()); setFileDialogPath(dialogType, path.absoluteFilePath()); } return result; } QString FileDialog::getSaveFileName(const FileDialogTypes dialogType, QWidget* parent, const QString& caption, const QString& filter, const QString& defaultFileName, QString* selectedFilter, Options options) { QString dir = getFileDialogPath(dialogType); if(!defaultFileName.isEmpty()) dir += "/" + defaultFileName; QString result = QFileDialog::getSaveFileName(parent, caption, dir, filter, selectedFilter, options); if(!result.isEmpty()) setFileDialogPath(dialogType, result); return result; } QString FileDialog::getExistingDirectory(const FileDialogTypes dialogType, QWidget* parent, const QString& caption, Options options) { QString result = QFileDialog::getExistingDirectory(parent, caption, getFileDialogPath(dialogType), options); if(!result.isEmpty()) setFileDialogPath(dialogType, result); return result; } QString FileDialog::getFileDialogPath(const FileDialogTypes dialogType) { switch(Settings::getValue("db", "savedefaultlocation").toInt()) { case 0: // Remember last location case 2: { // Remember last location for current session only QHash lastLocations = Settings::getValue("db", "lastlocations").toHash(); return lastLocations[QString::number(static_cast(dialogType))].toString(); } case 1: // Always use this location return Settings::getValue("db", "defaultlocation").toString(); default: return QString(); } } void FileDialog::setFileDialogPath(const FileDialogTypes dialogType, const QString& new_path) { QString dir = QFileInfo(new_path).absolutePath(); QHash lastLocations = Settings::getValue("db", "lastlocations").toHash(); lastLocations[QString::number(static_cast(dialogType))] = dir; switch(Settings::getValue("db", "savedefaultlocation").toInt()) { case 0: // Remember last location Settings::setValue("db", "lastlocations", lastLocations); break; case 2: // Remember last location for current session only Settings::setValue("db", "lastlocations", lastLocations, false); break; case 1: // Always use this locations break; // Do nothing } } QString FileDialog::getSqlDatabaseFileFilter() { return Settings::getValue("General", "DBFileExtensions").toString() + ";;" + QObject::tr("All files (*)"); //Always add "All files (*)" to the available filters }