Skip to content

Commit d526fa0

Browse files
revolterMKleusberg
authored andcommitted
Add last location saving and loading per action type (#1587)
* Fixed code style * Added last location saving and loading per action type This saves and loads different paths per action type when presenting the native file dialog popup.
1 parent aad06b8 commit d526fa0

File tree

8 files changed

+96
-42
lines changed

8 files changed

+96
-42
lines changed

src/EditDialog.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,7 @@ void EditDialog::importData()
339339
break;
340340
}
341341
QString fileName = FileDialog::getOpenFileName(
342+
OpenDataFile,
342343
this,
343344
tr("Choose a file to import")
344345
#ifndef Q_OS_MAC // Filters on OS X are buggy
@@ -403,6 +404,7 @@ void EditDialog::exportData()
403404

404405
QString selectedFilter = filters.first();
405406
QString fileName = FileDialog::getSaveFileName(
407+
CreateDataFile,
406408
this,
407409
tr("Choose a filename to export data"),
408410
filters.join(";;"),

src/ExportDataDialog.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ void ExportDataDialog::accept()
307307
{
308308
// called from sqlexecute query tab
309309
QString sFilename = FileDialog::getSaveFileName(
310+
CreateDataFile,
310311
this,
311312
tr("Choose a filename to export data"),
312313
file_dialog_filter);
@@ -333,6 +334,7 @@ void ExportDataDialog::accept()
333334
if(selectedItems.size() == 1)
334335
{
335336
QString fileName = FileDialog::getSaveFileName(
337+
CreateDataFile,
336338
this,
337339
tr("Choose a filename to export data"),
338340
file_dialog_filter,
@@ -347,6 +349,7 @@ void ExportDataDialog::accept()
347349
} else {
348350
// ask for folder
349351
QString exportfolder = FileDialog::getExistingDirectory(
352+
CreateDataFile,
350353
this,
351354
tr("Choose a directory"),
352355
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);

src/ExportSqlDialog.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ void ExportSqlDialog::accept()
8383
defaultFileName = pdb->currentFile() + ".sql";;
8484

8585
QString fileName = FileDialog::getSaveFileName(
86+
CreateSQLFile,
8687
this,
8788
tr("Choose a filename to export"),
8889
tr("Text files(*.sql *.txt)"),

src/FileDialog.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,76 @@
11
#include "FileDialog.h"
22
#include "Settings.h"
33

4-
QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, const QString &filter, QString *selectedFilter, Options options)
4+
QString FileDialog::getOpenFileName(const FileDialogTypes dialogType, QWidget* parent, const QString& caption, const QString &filter, QString *selectedFilter, Options options)
55
{
6-
QString result = QFileDialog::getOpenFileName(parent, caption, getFileDialogPath(), filter, selectedFilter, options);
6+
QString result = QFileDialog::getOpenFileName(parent, caption, getFileDialogPath(dialogType), filter, selectedFilter, options);
77
if(!result.isEmpty())
8-
setFileDialogPath(result);
8+
setFileDialogPath(dialogType, result);
99
return result;
1010
}
1111

12-
QStringList FileDialog::getOpenFileNames(QWidget *parent, const QString &caption, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
12+
QStringList FileDialog::getOpenFileNames(const FileDialogTypes dialogType, QWidget *parent, const QString &caption, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
1313
{
14-
QStringList result = QFileDialog::getOpenFileNames(parent, caption, getFileDialogPath(), filter, selectedFilter, options);
14+
QStringList result = QFileDialog::getOpenFileNames(parent, caption, getFileDialogPath(dialogType), filter, selectedFilter, options);
1515
if(!result.isEmpty())
1616
{
1717
QFileInfo path = QFileInfo(result.first());
18-
setFileDialogPath(path.absolutePath());
18+
setFileDialogPath(dialogType, path.absolutePath());
1919
}
2020
return result;
2121
}
2222

23-
QString FileDialog::getSaveFileName(QWidget* parent, const QString& caption, const QString& filter, const QString& defaultFileName, QString* selectedFilter, Options options)
23+
QString FileDialog::getSaveFileName(const FileDialogTypes dialogType, QWidget* parent, const QString& caption, const QString& filter, const QString& defaultFileName, QString* selectedFilter, Options options)
2424
{
25-
QString dir = getFileDialogPath();
25+
QString dir = getFileDialogPath(dialogType);
2626
if(!defaultFileName.isEmpty())
2727
dir += "/" + defaultFileName;
2828

2929
QString result = QFileDialog::getSaveFileName(parent, caption, dir, filter, selectedFilter, options);
3030
if(!result.isEmpty())
31-
setFileDialogPath(result);
31+
setFileDialogPath(dialogType, result);
3232
return result;
3333
}
3434

35-
QString FileDialog::getExistingDirectory(QWidget* parent, const QString& caption, Options options)
35+
QString FileDialog::getExistingDirectory(const FileDialogTypes dialogType, QWidget* parent, const QString& caption, Options options)
3636
{
37-
QString result = QFileDialog::getExistingDirectory(parent, caption, getFileDialogPath(), options);
37+
QString result = QFileDialog::getExistingDirectory(parent, caption, getFileDialogPath(dialogType), options);
3838
if(!result.isEmpty())
39-
setFileDialogPath(result);
39+
setFileDialogPath(dialogType, result);
4040
return result;
4141
}
4242

43-
QString FileDialog::getFileDialogPath()
43+
QString FileDialog::getFileDialogPath(const FileDialogTypes dialogType)
4444
{
4545
switch(Settings::getValue("db", "savedefaultlocation").toInt())
4646
{
4747
case 0: // Remember last location
48-
case 2: // Remember last location for current session only
49-
return Settings::getValue("db", "lastlocation").toString();
48+
case 2: { // Remember last location for current session only
49+
QHash<QString, QVariant> lastLocations = Settings::getValue("db", "lastlocations").toHash();
50+
51+
return lastLocations[QString(dialogType)].toString();
52+
}
5053
case 1: // Always use this locations
5154
return Settings::getValue("db", "defaultlocation").toString();
5255
default:
5356
return "";
5457
}
5558
}
5659

57-
void FileDialog::setFileDialogPath(const QString& new_path)
60+
void FileDialog::setFileDialogPath(const FileDialogTypes dialogType, const QString& new_path)
5861
{
5962
QString dir = QFileInfo(new_path).absolutePath();
63+
QHash<QString, QVariant> lastLocations = Settings::getValue("db", "lastlocations").toHash();
64+
65+
lastLocations[QString(dialogType)] = dir;
6066

6167
switch(Settings::getValue("db", "savedefaultlocation").toInt())
6268
{
6369
case 0: // Remember last location
64-
Settings::setValue("db", "lastlocation", dir);
70+
Settings::setValue("db", "lastlocations", lastLocations);
6571
break;
6672
case 2: // Remember last location for current session only
67-
Settings::setValue("db", "lastlocation", dir, true);
73+
Settings::setValue("db", "lastlocations", lastLocations, true);
6874
break;
6975
case 1: // Always use this locations
7076
break; // Do nothing

src/FileDialog.h

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,52 @@
33

44
#include <QFileDialog>
55

6+
enum FileDialogTypes {
7+
NoSpecificType,
8+
9+
CreateProjectFile,
10+
OpenProjectFile,
11+
12+
CreateDatabaseFile,
13+
OpenDatabaseFile,
14+
15+
CreateSQLFile,
16+
OpenSQLFile,
17+
18+
OpenCSVFile,
19+
20+
CreateDataFile,
21+
OpenDataFile,
22+
23+
OpenExtensionFile,
24+
OpenCertificateFile,
25+
26+
// ImportTable,
27+
// ExportTable,
28+
};
29+
630
class FileDialog : public QFileDialog
731
{
832
Q_OBJECT
933

1034
public:
11-
static QString getOpenFileName(QWidget* parent = nullptr, const QString& caption = QString(),
35+
static QString getOpenFileName(const FileDialogTypes dialogType, QWidget* parent = nullptr, const QString& caption = QString(),
1236
const QString& filter = QString(), QString* selectedFilter = nullptr,
1337
Options options = 0);
14-
static QStringList getOpenFileNames(QWidget* parent = nullptr, const QString& caption = QString(),
38+
static QStringList getOpenFileNames(const FileDialogTypes dialogType, QWidget* parent = nullptr, const QString& caption = QString(),
1539
const QString& filter = QString(), QString* selectedFilter = nullptr,
1640
Options options = 0);
17-
static QString getSaveFileName(QWidget* parent = nullptr, const QString& caption = QString(),
41+
static QString getSaveFileName(const FileDialogTypes dialogType, QWidget* parent = nullptr, const QString& caption = QString(),
1842
const QString& filter = QString(), const QString& defaultFileName = QString(), QString* selectedFilter = nullptr,
1943
Options options = 0);
20-
static QString getExistingDirectory(QWidget* parent = nullptr, const QString& caption = QString(),
44+
static QString getExistingDirectory(const FileDialogTypes dialogType, QWidget* parent = nullptr, const QString& caption = QString(),
2145
Options options = 0);
2246

2347
static QString getSqlDatabaseFileFilter();
2448

2549
private:
26-
static QString getFileDialogPath();
27-
static void setFileDialogPath(const QString& new_path);
50+
static QString getFileDialogPath(const FileDialogTypes dialogType);
51+
static void setFileDialogPath(const FileDialogTypes dialogType, const QString& new_path);
2852
};
2953

3054
#endif

src/MainWindow.cpp

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,7 @@ bool MainWindow::fileOpen(const QString& fileName, bool dontAddToRecentFiles, bo
410410
if (!QFile::exists(wFile))
411411
{
412412
wFile = FileDialog::getOpenFileName(
413+
OpenDatabaseFile,
413414
this,
414415
tr("Choose a database file")
415416
#ifndef Q_OS_MAC // Filters on OS X are buggy
@@ -463,9 +464,11 @@ bool MainWindow::fileOpen(const QString& fileName, bool dontAddToRecentFiles, bo
463464

464465
void MainWindow::fileNew()
465466
{
466-
QString fileName = FileDialog::getSaveFileName(this,
467-
tr("Choose a filename to save under"),
468-
FileDialog::getSqlDatabaseFileFilter());
467+
QString fileName = FileDialog::getSaveFileName(
468+
CreateDatabaseFile,
469+
this,
470+
tr("Choose a filename to save under"),
471+
FileDialog::getSqlDatabaseFileFilter());
469472
if(!fileName.isEmpty())
470473
{
471474
if(QFile::exists(fileName))
@@ -1521,9 +1524,10 @@ void MainWindow::mainTabSelected(int tabindex)
15211524
void MainWindow::importTableFromCSV()
15221525
{
15231526
QStringList wFiles = FileDialog::getOpenFileNames(
1524-
this,
1525-
tr("Choose text files"),
1526-
tr("Text files(*.csv *.txt);;All files(*)"));
1527+
OpenCSVFile,
1528+
this,
1529+
tr("Choose text files"),
1530+
tr("Text files(*.csv *.txt);;All files(*)"));
15271531

15281532
QStringList validFiles;
15291533
for(const auto& file : wFiles) {
@@ -1629,6 +1633,7 @@ void MainWindow::importDatabaseFromSQL()
16291633
{
16301634
// Get file name to import
16311635
QString fileName = FileDialog::getOpenFileName(
1636+
OpenSQLFile,
16321637
this,
16331638
tr("Choose a file to import"),
16341639
tr("Text files(*.sql *.txt);;All files(*)"));
@@ -1646,6 +1651,7 @@ void MainWindow::importDatabaseFromSQL()
16461651
QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) || !db.isOpen())
16471652
{
16481653
newDbFile = FileDialog::getSaveFileName(
1654+
CreateDatabaseFile,
16491655
this,
16501656
tr("Choose a filename to save under"),
16511657
FileDialog::getSqlDatabaseFileFilter());
@@ -2109,6 +2115,7 @@ void MainWindow::changeSqlTab(int /*index*/)
21092115
void MainWindow::openSqlFile()
21102116
{
21112117
QString file = FileDialog::getOpenFileName(
2118+
OpenSQLFile,
21122119
this,
21132120
tr("Select SQL file to open"),
21142121
tr("Text files(*.sql *.txt);;All files(*)"));
@@ -2169,6 +2176,7 @@ void MainWindow::saveSqlFileAs()
21692176
return;
21702177

21712178
QString file = FileDialog::getSaveFileName(
2179+
CreateSQLFile,
21722180
this,
21732181
tr("Select file name"),
21742182
tr("Text files(*.sql *.txt);;All files(*)"));
@@ -2194,6 +2202,7 @@ void MainWindow::saveSqlResultsAsView()
21942202
void MainWindow::loadExtension()
21952203
{
21962204
QString file = FileDialog::getOpenFileName(
2205+
OpenExtensionFile,
21972206
this,
21982207
tr("Select extension file"),
21992208
tr("Extensions(*.so *.dll);;All files(*)"));
@@ -2467,9 +2476,11 @@ bool MainWindow::loadProject(QString filename, bool readOnly)
24672476
// Show the open file dialog when no filename was passed as parameter
24682477
if(filename.isEmpty())
24692478
{
2470-
filename = FileDialog::getOpenFileName(this,
2471-
tr("Choose a project file to open"),
2472-
tr("DB Browser for SQLite project file (*.sqbpro)"));
2479+
filename = FileDialog::getOpenFileName(
2480+
OpenProjectFile,
2481+
this,
2482+
tr("Choose a project file to open"),
2483+
tr("DB Browser for SQLite project file (*.sqbpro)"));
24732484
}
24742485

24752486
if(!filename.isEmpty())
@@ -2721,10 +2732,12 @@ static void saveBrowseDataTableSettings(const BrowseDataTableSettings& object, Q
27212732

27222733
void MainWindow::saveProject()
27232734
{
2724-
QString filename = FileDialog::getSaveFileName(this,
2725-
tr("Choose a filename to save under"),
2726-
tr("DB Browser for SQLite project file (*.sqbpro)"),
2727-
db.currentFile());
2735+
QString filename = FileDialog::getSaveFileName(
2736+
CreateProjectFile,
2737+
this,
2738+
tr("Choose a filename to save under"),
2739+
tr("DB Browser for SQLite project file (*.sqbpro)"),
2740+
db.currentFile());
27282741
if(!filename.isEmpty())
27292742
{
27302743
// Make sure the file has got a .sqbpro ending
@@ -2837,6 +2850,7 @@ void MainWindow::fileAttach()
28372850
{
28382851
// Get file name of database to attach
28392852
QString file = FileDialog::getOpenFileName(
2853+
OpenDatabaseFile,
28402854
this,
28412855
tr("Choose a database file"),
28422856
FileDialog::getSqlDatabaseFileFilter());

src/PlotDock.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -606,10 +606,11 @@ void PlotDock::on_treePlotColumns_itemDoubleClicked(QTreeWidgetItem* item, int c
606606

607607
void PlotDock::on_butSavePlot_clicked()
608608
{
609-
QString fileName = FileDialog::getSaveFileName(this,
610-
tr("Choose a filename to save under"),
611-
tr("PNG(*.png);;JPG(*.jpg);;PDF(*.pdf);;BMP(*.bmp);;All Files(*)")
612-
);
609+
QString fileName = FileDialog::getSaveFileName(
610+
CreateDataFile,
611+
this,
612+
tr("Choose a filename to save under"),
613+
tr("PNG(*.png);;JPG(*.jpg);;PDF(*.pdf);;BMP(*.bmp);;All Files(*)"));
613614
if(!fileName.isEmpty())
614615
{
615616
if(fileName.endsWith(".png", Qt::CaseInsensitive))

src/PreferencesDialog.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ PreferencesDialog::~PreferencesDialog()
5656
void PreferencesDialog::chooseLocation()
5757
{
5858
QString s = FileDialog::getExistingDirectory(
59+
NoSpecificType,
5960
this,
6061
tr("Choose a directory"),
6162
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
@@ -368,6 +369,7 @@ bool PreferencesDialog::eventFilter(QObject *obj, QEvent *event)
368369
void PreferencesDialog::addExtension()
369370
{
370371
QString file = FileDialog::getOpenFileName(
372+
OpenExtensionFile,
371373
this,
372374
tr("Select extension file"),
373375
tr("Extensions(*.so *.dll);;All files(*)"));
@@ -503,7 +505,7 @@ void PreferencesDialog::addClientCertificate()
503505
{
504506
// Get certificate file to import and abort here if no file gets selected
505507
// NOTE: We assume here that this file contains both, certificate and private key!
506-
QString path = FileDialog::getOpenFileName(this, tr("Import certificate file"), "*.pem");
508+
QString path = FileDialog::getOpenFileName(OpenCertificateFile, this, tr("Import certificate file"), "*.pem");
507509
if(path.isEmpty())
508510
return;
509511

@@ -575,6 +577,7 @@ void PreferencesDialog::addClientCertToTable(const QString& path, const QSslCert
575577
void PreferencesDialog::chooseRemoteCloneDirectory()
576578
{
577579
QString s = FileDialog::getExistingDirectory(
580+
NoSpecificType,
578581
this,
579582
tr("Choose a directory"),
580583
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);

0 commit comments

Comments
 (0)