diff --git a/localization/rssguard_en.ts b/localization/rssguard_en.ts
index 438294d58..aa4162ec0 100644
--- a/localization/rssguard_en.ts
+++ b/localization/rssguard_en.ts
@@ -1759,12 +1759,12 @@ QtWebEngine cache folder -> "%7"
Backup was created successfully.
-
+
Backup name cannot be empty.
Backup name cannot be empty.
-
+
Backup name looks okay.
Backup name looks okay.
@@ -1784,7 +1784,7 @@ QtWebEngine cache folder -> "%7"
Select destination directory
-
+
Good destination directory is specified.
Good destination directory is specified.
@@ -2378,27 +2378,27 @@ QtWebEngine cache folder -> "%7"
FormMain
-
+
No possible actions
No possible actions
-
+
No recycle bin
No recycle bin
-
+
Main menu
Main menu
-
+
Open main menu
-
+
Open &main menu
@@ -2914,7 +2914,7 @@ QtWebEngine cache folder -> "%7"
-
+
Add new category
Add new category
@@ -3149,48 +3149,48 @@ QtWebEngine cache folder -> "%7"
-
+
Add new feed
Add new feed
-
+
No actions possible
No actions possible
-
+
Cannot cleanup database
Cannot cleanup database
-
+
Cannot cleanup database, because another critical action is running.
Cannot cleanup database, because another critical action is running.
-
+
Play in media player
-
+
(not supported)
-
+
Close opened modal dialogs first.
Close opened modal dialogs first.
-
+
Fetching common data
-
+
Close dialogs
@@ -3461,38 +3461,38 @@ QtWebEngine cache folder -> "%7"
FormRestoreDatabaseSettings
+
-
No operation executed yet.
No operation executed yet.
-
+
Restoration was initiated. Restart to proceed.
Restoration was initiated. Restart to proceed.
-
+
You need to restart application for restoration process to finish.
You need to restart application for restoration process to finish.
-
+
Database and/or settings were not copied to restoration directory successully.
Database and/or settings were not copied to restoration directory successully.
-
+
Select source directory
Select source directory
-
+
Good source directory is specified.
Good source directory is specified.
-
+
Restart
@@ -3584,22 +3584,22 @@ You have to restart manually.
FormStandardFeedDetails
-
+
General
General
-
+
HTTP headers
-
+
Auth
-
+
Experimental
@@ -3607,145 +3607,145 @@ You have to restart manually.
FormStandardImportExport
-
+
No file is selected.
No file is selected.
-
+
No operation executed yet.
No operation executed yet.
-
+
Destination file
Destination file
-
+
Source feeds && categories
Source feeds && categories
-
+
Export feeds
Export feeds
-
+
Source file
Source file
-
+
Target feeds && categories
Target feeds && categories
-
+
Import feeds
Import feeds
-
+
Command is ok.
-
+
Command is empty.
-
+
Select file for feeds export
Select file for feeds export
-
-
+
+
File is selected.
File is selected.
-
+
Select file for feeds import
Select file for feeds import
-
+
Feeds were loaded.
Feeds were loaded.
-
+
Full command to execute
-
+
You can enter full command including interpreter here.
-
+
Here you can enter script executaion line, including interpreter.
-
+
Some feeds were not loaded properly. Check log for more information.
-
+
cannot open file
-
-
+
+
Feeds were exported successfully.
Feeds were exported successfully.
-
-
+
+
Critical error occurred.
Critical error occurred.
-
+
Parsing data...
Parsing data...
-
-
+
+
OPML 2.0 files (*.opml *.xml)
-
+
Cannot write into destination file: '%1'.
Cannot write into destination file: '%1'.
-
-
+
+
TXT files [one URL per line] (*.txt)
TXT files [one URL per line] (*.txt)
-
+
&Export to file
-
+
&Import from file
@@ -4256,48 +4256,48 @@ You can install it now.
GmailServiceRoot
-
+
Inbox
-
+
Sent
-
+
Drafts
-
+
Spam
-
+
Reply to this e-mail message
-
+
Authentication status: %1
Login tokens expiration: %2
-
+
logged-in
-
+
NOT logged-in
-
+
Write new e-mail message
@@ -4622,75 +4622,75 @@ Login tokens expiration: %2
GreaderServiceRoot
-
+
Other services
-
-
+
+
OPML 2.0 files (*.opml *.xml)
-
+
Select file for feeds import
Select file for feeds import
-
-
+
+
Done
-
+
Data imported successfully. Reloading feed tree.
-
+
Cannot import feeds
-
-
+
+
Error: %1
Error: %1
-
+
Select file for feeds export
Select file for feeds export
-
+
Data exported successfully.
-
+
Cannot export feeds
-
+
Export feeds
Export feeds
-
+
Import feeds
Import feeds
-
+
Cannot add item
-
+
Cannot add feed because another critical operation is ongoing.
@@ -6879,18 +6879,18 @@ List of supported readers:
RedditServiceRoot
-
+
Authentication status: %1
Login tokens expiration: %2
-
+
logged-in
-
+
NOT logged-in
@@ -7079,7 +7079,7 @@ File filter for external e-mail selection dialog.
Opera 12 or older
-
+
Enter (optional) parameters:
@@ -7284,7 +7284,7 @@ File filter for external e-mail selection dialog.
-
+
Enter parameters
@@ -7448,7 +7448,7 @@ Authors of this application are NOT responsible for lost data.
SettingsDownloads
-
+
Select downloads target directory
Select downloads target directory
@@ -9060,24 +9060,24 @@ Also, you can post-process generated feed data with yet another script if you wi
-
+
Turning this setting ON might bring considerable performance boost when fetching this feed, but only in some very specific conditions.
This setting is useful when raw XML parsing of the feed is very slow, this happens for feed which do have very long contents.
-
+
Use application settings
-
+
Enabled
-
+
Disabled
diff --git a/src/librssguard-gmail/src/3rd-party/richtexteditor/mrichtextedit.cpp b/src/librssguard-gmail/src/3rd-party/richtexteditor/mrichtextedit.cpp
index 90f1d4a9b..ac247c69b 100644
--- a/src/librssguard-gmail/src/3rd-party/richtexteditor/mrichtextedit.cpp
+++ b/src/librssguard-gmail/src/3rd-party/richtexteditor/mrichtextedit.cpp
@@ -28,6 +28,7 @@
#include "src/3rd-party/richtexteditor/mrichtextedit.h"
#include
+#include
#include
#include
@@ -36,7 +37,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -635,10 +635,12 @@ void MRichTextEdit::setText(const QString& text) {
void MRichTextEdit::insertImage() {
QSettings s;
QString attdir = s.value("general/filedialog-path").toString();
- QString file = QFileDialog::getOpenFileName(this,
- tr("Select an image"),
- attdir,
- tr("JPEG (*.jpg);; GIF (*.gif);; PNG (*.png);; BMP (*.bmp);; All (*)"));
+ QString file = FileDialog::openFileName(this,
+ tr("Select an image"),
+ attdir,
+ tr("JPEG (*.jpg);; GIF (*.gif);; PNG (*.png);; BMP (*.bmp);; All (*)"),
+ nullptr,
+ GENERAL_REMEMBERED_PATH);
QImage image = QImageReader(file).read();
m_ui.f_textedit->dropImage(image, QFileInfo(file).suffix().toUpper().toLocal8Bit().data());
diff --git a/src/librssguard-gmail/src/gmailserviceroot.cpp b/src/librssguard-gmail/src/gmailserviceroot.cpp
index 579588c43..8950feaa5 100644
--- a/src/librssguard-gmail/src/gmailserviceroot.cpp
+++ b/src/librssguard-gmail/src/gmailserviceroot.cpp
@@ -16,8 +16,6 @@
#include
#include
-#include
-
GmailServiceRoot::GmailServiceRoot(RootItem* parent)
: ServiceRoot(parent), m_network(new GmailNetworkFactory(this)), m_actionReply(nullptr) {
m_network->setService(this);
diff --git a/src/librssguard-greader/src/greaderserviceroot.cpp b/src/librssguard-greader/src/greaderserviceroot.cpp
index 938ca912d..2567d3611 100644
--- a/src/librssguard-greader/src/greaderserviceroot.cpp
+++ b/src/librssguard-greader/src/greaderserviceroot.cpp
@@ -11,6 +11,7 @@
#include
#include
+#include
#include
#include
#include
@@ -18,8 +19,6 @@
#include
#include
-#include
-
GreaderServiceRoot::GreaderServiceRoot(RootItem* parent) : ServiceRoot(parent), m_network(new GreaderNetwork(this)) {
setIcon(GreaderEntryPoint().icon());
m_network->setRoot(this);
@@ -160,10 +159,12 @@ QString GreaderServiceRoot::serviceToString(Service service) {
void GreaderServiceRoot::importFeeds() {
const QString filter_opml20 = tr("OPML 2.0 files (*.opml *.xml)");
- const QString selected_file = QFileDialog::getOpenFileName(qApp->mainFormWidget(),
- tr("Select file for feeds import"),
- qApp->homeFolder(),
- filter_opml20);
+ const QString selected_file = FileDialog::openFileName(qApp->mainFormWidget(),
+ tr("Select file for feeds import"),
+ qApp->homeFolder(),
+ filter_opml20,
+ nullptr,
+ GENERAL_REMEMBERED_PATH);
if (!QFile::exists(selected_file)) {
return;
@@ -191,7 +192,7 @@ void GreaderServiceRoot::exportFeeds() {
QSL("rssguard_feeds_%1.opml").arg(QDate::currentDate().toString(Qt::DateFormat::ISODate));
const QString filter_opml20 = tr("OPML 2.0 files (*.opml *.xml)");
const QString selected_file =
- QFileDialog::getSaveFileName(qApp->mainFormWidget(), tr("Select file for feeds export"), the_file, filter_opml20);
+ FileDialog::saveFileName(qApp->mainFormWidget(), tr("Select file for feeds export"), the_file, filter_opml20);
if (selected_file.isEmpty()) {
return;
diff --git a/src/librssguard-reddit/src/redditserviceroot.cpp b/src/librssguard-reddit/src/redditserviceroot.cpp
index 00716397a..da2d195cd 100644
--- a/src/librssguard-reddit/src/redditserviceroot.cpp
+++ b/src/librssguard-reddit/src/redditserviceroot.cpp
@@ -11,8 +11,6 @@
#include "src/redditnetworkfactory.h"
#include "src/redditsubscription.h"
-#include
-
RedditServiceRoot::RedditServiceRoot(RootItem* parent)
: ServiceRoot(parent), m_network(new RedditNetworkFactory(this)) {
m_network->setService(this);
diff --git a/src/librssguard-standard/src/gui/formstandardfeeddetails.cpp b/src/librssguard-standard/src/gui/formstandardfeeddetails.cpp
index 33cd78199..45e089a1e 100644
--- a/src/librssguard-standard/src/gui/formstandardfeeddetails.cpp
+++ b/src/librssguard-standard/src/gui/formstandardfeeddetails.cpp
@@ -18,7 +18,6 @@
#include
#include
-#include
#include
#include
diff --git a/src/librssguard-standard/src/gui/formstandardimportexport.cpp b/src/librssguard-standard/src/gui/formstandardimportexport.cpp
index e0e95691c..d5809dc60 100644
--- a/src/librssguard-standard/src/gui/formstandardimportexport.cpp
+++ b/src/librssguard-standard/src/gui/formstandardimportexport.cpp
@@ -6,12 +6,12 @@
#include "src/standardserviceroot.h"
#include
+#include
#include
#include
#include
#include
-#include
#include
FormStandardImportExport::FormStandardImportExport(StandardServiceRoot* service_root, QWidget* parent)
@@ -175,7 +175,7 @@ void FormStandardImportExport::selectExportFile(bool without_dialog) {
filter += QSL(";;");
filter += filter_txt_url_per_line;
selected_file =
- QFileDialog::getSaveFileName(this, tr("Select file for feeds export"), the_file, filter, &selected_filter);
+ FileDialog::saveFileName(this, tr("Select file for feeds export"), the_file, filter, &selected_filter);
}
else {
selected_file = the_file;
@@ -218,11 +218,12 @@ void FormStandardImportExport::selectImportFile() {
// Add more filters here.
filter += filter_opml20 + QSL(";;") + filter_txt_url_per_line;
- const QString selected_file = QFileDialog::getOpenFileName(this,
- tr("Select file for feeds import"),
- qApp->homeFolder(),
- filter,
- &selected_filter);
+ const QString selected_file = FileDialog::openFileName(this,
+ tr("Select file for feeds import"),
+ qApp->homeFolder(),
+ filter,
+ &selected_filter,
+ GENERAL_REMEMBERED_PATH);
if (!selected_file.isEmpty()) {
if (selected_filter == filter_opml20) {
diff --git a/src/librssguard-standard/src/gui/standardaccountdetails.cpp b/src/librssguard-standard/src/gui/standardaccountdetails.cpp
index eadca7650..72f98b551 100644
--- a/src/librssguard-standard/src/gui/standardaccountdetails.cpp
+++ b/src/librssguard-standard/src/gui/standardaccountdetails.cpp
@@ -5,9 +5,9 @@
#include "src/standardserviceentrypoint.h"
#include
+#include
#include
-#include
#include
StandardAccountDetails::StandardAccountDetails(QWidget* parent) : QWidget(parent) {
@@ -51,26 +51,15 @@ void StandardAccountDetails::onLoadIconFromFile() {
.toStdList();
QStringList list_formats = FROM_STD_LIST(QStringList, prefixed_formats);
+ QString fil = FileDialog::openFileName(this,
+ tr("Select icon file for the account"),
+ qApp->homeFolder(),
+ tr("Images (%1)").arg(list_formats.join(QL1C(' '))),
+ nullptr,
+ GENERAL_REMEMBERED_PATH);
- QFileDialog dialog(this,
- tr("Select icon file for the account"),
- qApp->homeFolder(),
- tr("Images (%1)").arg(list_formats.join(QL1C(' '))));
-
- dialog.setFileMode(QFileDialog::FileMode::ExistingFile);
- dialog.setWindowIcon(qApp->icons()->fromTheme(QSL("image-x-generic")));
- dialog.setOptions(QFileDialog::Option::DontUseNativeDialog | QFileDialog::Option::ReadOnly);
- dialog.setViewMode(QFileDialog::ViewMode::Detail);
- dialog.setLabelText(QFileDialog::DialogLabel::Accept, tr("Select icon"));
- dialog.setLabelText(QFileDialog::DialogLabel::Reject, tr("Cancel"));
-
- //: Label for field with icon file name textbox for selection dialog.
- dialog.setLabelText(QFileDialog::DialogLabel::LookIn, tr("Look in:"));
- dialog.setLabelText(QFileDialog::DialogLabel::FileName, tr("Icon name:"));
- dialog.setLabelText(QFileDialog::DialogLabel::FileType, tr("Icon type:"));
-
- if (dialog.exec() == QDialog::DialogCode::Accepted) {
- m_ui.m_btnIcon->setIcon(QIcon(dialog.selectedFiles().value(0)));
+ if (!fil.isEmpty()) {
+ m_ui.m_btnIcon->setIcon(QIcon(fil));
}
}
diff --git a/src/librssguard-standard/src/gui/standardfeeddetails.cpp b/src/librssguard-standard/src/gui/standardfeeddetails.cpp
index 37a73a650..5bef5984b 100644
--- a/src/librssguard-standard/src/gui/standardfeeddetails.cpp
+++ b/src/librssguard-standard/src/gui/standardfeeddetails.cpp
@@ -8,6 +8,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -15,7 +16,6 @@
#include
#include
-#include
#include
#include
#include
@@ -377,26 +377,15 @@ void StandardFeedDetails::onLoadIconFromFile() {
.toStdList();
QStringList list_formats = FROM_STD_LIST(QStringList, prefixed_formats);
+ QString fil = FileDialog::openFileName(this,
+ tr("Select icon file for the feed"),
+ qApp->homeFolder(),
+ tr("Images (%1)").arg(list_formats.join(QL1C(' '))),
+ nullptr,
+ GENERAL_REMEMBERED_PATH);
- QFileDialog dialog(this,
- tr("Select icon file for the feed"),
- qApp->homeFolder(),
- tr("Images (%1)").arg(list_formats.join(QL1C(' '))));
-
- dialog.setFileMode(QFileDialog::FileMode::ExistingFile);
- dialog.setWindowIcon(qApp->icons()->fromTheme(QSL("image-x-generic")));
- dialog.setOptions(QFileDialog::Option::DontUseNativeDialog | QFileDialog::Option::ReadOnly);
- dialog.setViewMode(QFileDialog::ViewMode::Detail);
- dialog.setLabelText(QFileDialog::DialogLabel::Accept, tr("Select icon"));
- dialog.setLabelText(QFileDialog::DialogLabel::Reject, tr("Cancel"));
-
- //: Label for field with icon file name textbox for selection dialog.
- dialog.setLabelText(QFileDialog::DialogLabel::LookIn, tr("Look in:"));
- dialog.setLabelText(QFileDialog::DialogLabel::FileName, tr("Icon name:"));
- dialog.setLabelText(QFileDialog::DialogLabel::FileType, tr("Icon type:"));
-
- if (dialog.exec() == QDialog::DialogCode::Accepted) {
- m_ui.m_btnIcon->setIcon(QIcon(dialog.selectedFiles().value(0)));
+ if (!fil.isEmpty()) {
+ m_ui.m_btnIcon->setIcon(QIcon(fil));
}
}
diff --git a/src/librssguard-standard/src/gui/standardfeedexpdetails.cpp b/src/librssguard-standard/src/gui/standardfeedexpdetails.cpp
index be74c9648..037dcc8c5 100644
--- a/src/librssguard-standard/src/gui/standardfeedexpdetails.cpp
+++ b/src/librssguard-standard/src/gui/standardfeedexpdetails.cpp
@@ -13,7 +13,6 @@
#include
#include
-#include
#include
#include
#include
diff --git a/src/librssguard/CMakeLists.txt b/src/librssguard/CMakeLists.txt
index ee9b9cb67..5d0e9dabe 100644
--- a/src/librssguard/CMakeLists.txt
+++ b/src/librssguard/CMakeLists.txt
@@ -63,6 +63,8 @@ set(SOURCES
exceptions/processexception.h
exceptions/scriptexception.cpp
exceptions/scriptexception.h
+ gui/dialogs/filedialog.cpp
+ gui/dialogs/filedialog.h
gui/dialogs/formabout.cpp
gui/dialogs/formabout.h
gui/dialogs/formaddaccount.cpp
diff --git a/src/librssguard/gui/dialogs/filedialog.cpp b/src/librssguard/gui/dialogs/filedialog.cpp
new file mode 100644
index 000000000..d1aabcbe7
--- /dev/null
+++ b/src/librssguard/gui/dialogs/filedialog.cpp
@@ -0,0 +1,70 @@
+// For license of this file, see /LICENSE.md.
+
+#include "gui/dialogs/filedialog.h"
+
+#include "miscellaneous/settings.h"
+
+#include
+
+QString FileDialog::existingDirectory(QWidget* parent,
+ const QString& caption,
+ const QString& dir,
+ const QString& id,
+ QFileDialog::Options options) {
+ QString initial_dir_file = id.isEmpty() ? dir : qApp->settings()->value(GROUP(FileDialogPaths), id, dir).toString();
+ QFileInfo initial_dir_file_info(initial_dir_file);
+ QString fldr = QFileDialog::getExistingDirectory(parent,
+ caption.isEmpty() ? QObject::tr("Select existing folder") : caption,
+ initial_dir_file_info.absolutePath(),
+ options);
+
+ if (!fldr.isEmpty() && !id.isEmpty()) {
+ qApp->settings()->setValue(GROUP(FileDialogPaths), id, fldr);
+ }
+
+ return fldr;
+}
+
+QString FileDialog::saveFileName(QWidget* parent,
+ const QString& caption,
+ const QString& dir,
+ const QString& filter,
+ QString* selected_filter,
+ const QString& id,
+ QFileDialog::Options options) {
+ QString initial_dir_file = id.isEmpty() ? dir : qApp->settings()->value(GROUP(FileDialogPaths), id, dir).toString();
+ QString file = QFileDialog::getSaveFileName(parent,
+ caption.isEmpty() ? QObject::tr("Save file") : caption,
+ initial_dir_file,
+ filter,
+ selected_filter,
+ options);
+
+ if (!file.isEmpty() && !id.isEmpty()) {
+ qApp->settings()->setValue(GROUP(FileDialogPaths), id, QFileInfo(file).absolutePath());
+ }
+
+ return file;
+}
+
+QString FileDialog::openFileName(QWidget* parent,
+ const QString& caption,
+ const QString& dir,
+ const QString& filter,
+ QString* selected_filter,
+ const QString& id,
+ QFileDialog::Options options) {
+ QString initial_dir_file = id.isEmpty() ? dir : qApp->settings()->value(GROUP(FileDialogPaths), id, dir).toString();
+ QString file = QFileDialog::getOpenFileName(parent,
+ caption.isEmpty() ? QObject::tr("Select existing file") : caption,
+ initial_dir_file,
+ filter,
+ selected_filter,
+ options);
+
+ if (!file.isEmpty() && !id.isEmpty()) {
+ qApp->settings()->setValue(GROUP(FileDialogPaths), id, QFileInfo(file).absolutePath());
+ }
+
+ return file;
+}
diff --git a/src/librssguard/gui/dialogs/filedialog.h b/src/librssguard/gui/dialogs/filedialog.h
new file mode 100644
index 000000000..388c04c8d
--- /dev/null
+++ b/src/librssguard/gui/dialogs/filedialog.h
@@ -0,0 +1,41 @@
+// For license of this file, see /LICENSE.md.
+
+#ifndef FILEDIALOG_H
+#define FILEDIALOG_H
+
+#include
+#include
+
+#define GENERAL_REMEMBERED_PATH QSL("general")
+
+class QWidget;
+
+class RSSGUARD_DLLSPEC FileDialog {
+ public:
+ static QString saveFileName(QWidget* parent = nullptr,
+ const QString& caption = QString(),
+ const QString& dir = QString(),
+ const QString& filter = QString(),
+ QString* selected_filter = nullptr,
+ const QString& id = QString(),
+ QFileDialog::Options options = QFileDialog::Options());
+
+ static QString existingDirectory(QWidget* parent = nullptr,
+ const QString& caption = QString(),
+ const QString& dir = QString(),
+ const QString& id = QString(),
+ QFileDialog::Options options = QFileDialog::Option::ShowDirsOnly);
+
+ static QString openFileName(QWidget* parent = nullptr,
+ const QString& caption = QString(),
+ const QString& dir = QString(),
+ const QString& filter = QString(),
+ QString* selected_filter = nullptr,
+ const QString& id = QString(),
+ QFileDialog::Options options = QFileDialog::Options());
+
+ private:
+ FileDialog() {}
+};
+
+#endif // FILEDIALOG_H
diff --git a/src/librssguard/gui/dialogs/formbackupdatabasesettings.cpp b/src/librssguard/gui/dialogs/formbackupdatabasesettings.cpp
index b0d3176fc..42aa60dee 100644
--- a/src/librssguard/gui/dialogs/formbackupdatabasesettings.cpp
+++ b/src/librssguard/gui/dialogs/formbackupdatabasesettings.cpp
@@ -3,6 +3,7 @@
#include "gui/dialogs/formbackupdatabasesettings.h"
#include "exceptions/applicationexception.h"
+#include "gui/dialogs/filedialog.h"
#include "gui/guiutilities.h"
#include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h"
@@ -11,7 +12,6 @@
#include
#include
#include
-#include
#include
FormBackupDatabaseSettings::FormBackupDatabaseSettings(QWidget* parent)
@@ -75,9 +75,10 @@ void FormBackupDatabaseSettings::selectFolderInitial() {
void FormBackupDatabaseSettings::selectFolder(QString path) {
if (path.isEmpty()) {
- path = QFileDialog::getExistingDirectory(this,
- tr("Select destination directory"),
- m_ui->m_lblSelectFolder->label()->text());
+ path = FileDialog::existingDirectory(this,
+ tr("Select destination directory"),
+ m_ui->m_lblSelectFolder->label()->text(),
+ GENERAL_REMEMBERED_PATH);
}
if (!path.isEmpty()) {
diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp
index 8c45f9c42..bbee34d7a 100644
--- a/src/librssguard/gui/dialogs/formmain.cpp
+++ b/src/librssguard/gui/dialogs/formmain.cpp
@@ -36,7 +36,6 @@
#include
#include
-#include
#include
#include
#include
diff --git a/src/librssguard/gui/dialogs/formrestoredatabasesettings.cpp b/src/librssguard/gui/dialogs/formrestoredatabasesettings.cpp
index 78954a30f..5cefa2f39 100644
--- a/src/librssguard/gui/dialogs/formrestoredatabasesettings.cpp
+++ b/src/librssguard/gui/dialogs/formrestoredatabasesettings.cpp
@@ -3,11 +3,10 @@
#include "gui/dialogs/formrestoredatabasesettings.h"
#include "exceptions/applicationexception.h"
+#include "gui/dialogs/filedialog.h"
#include "gui/guiutilities.h"
#include "miscellaneous/iconfactory.h"
-#include
-
FormRestoreDatabaseSettings::FormRestoreDatabaseSettings(QWidget& parent) : QDialog(&parent), m_shouldRestart(false) {
m_ui.setupUi(this);
m_btnRestart = m_ui.m_buttonBox->addButton(tr("Restart"), QDialogButtonBox::ButtonRole::ActionRole);
@@ -75,8 +74,10 @@ void FormRestoreDatabaseSettings::selectFolderWithGui() {
void FormRestoreDatabaseSettings::selectFolder(QString folder) {
if (folder.isEmpty()) {
- folder =
- QFileDialog::getExistingDirectory(this, tr("Select source directory"), m_ui.m_lblSelectFolder->label()->text());
+ folder = FileDialog::existingDirectory(this,
+ tr("Select source directory"),
+ m_ui.m_lblSelectFolder->label()->text(),
+ GENERAL_REMEMBERED_PATH);
}
if (!folder.isEmpty()) {
diff --git a/src/librssguard/gui/notifications/singlenotificationeditor.cpp b/src/librssguard/gui/notifications/singlenotificationeditor.cpp
index 1a01c30fc..0be560957 100644
--- a/src/librssguard/gui/notifications/singlenotificationeditor.cpp
+++ b/src/librssguard/gui/notifications/singlenotificationeditor.cpp
@@ -2,11 +2,11 @@
#include "gui/notifications/singlenotificationeditor.h"
+#include "gui/dialogs/filedialog.h"
#include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h"
#include
-#include
#include
SingleNotificationEditor::SingleNotificationEditor(const Notification& notification, QWidget* parent)
@@ -44,10 +44,12 @@ Notification SingleNotificationEditor::notification() const {
}
void SingleNotificationEditor::selectSoundFile() {
- auto fil = QFileDialog::getOpenFileName(window(),
- tr("Select sound file"),
- qApp->homeFolder(),
- tr("WAV files (*.wav);;MP3 files (*.mp3)"));
+ auto fil = FileDialog::openFileName(window(),
+ tr("Select sound file"),
+ qApp->homeFolder(),
+ tr("WAV files (*.wav);;MP3 files (*.mp3)"),
+ nullptr,
+ GENERAL_REMEMBERED_PATH);
if (!fil.isEmpty()) {
m_ui.m_txtSound->setText(fil);
diff --git a/src/librssguard/gui/settings/settingsbrowsermail.cpp b/src/librssguard/gui/settings/settingsbrowsermail.cpp
index 0e66215ff..ad2764fc8 100644
--- a/src/librssguard/gui/settings/settingsbrowsermail.cpp
+++ b/src/librssguard/gui/settings/settingsbrowsermail.cpp
@@ -3,6 +3,7 @@
#include "gui/settings/settingsbrowsermail.h"
#include "exceptions/applicationexception.h"
+#include "gui/dialogs/filedialog.h"
#include "gui/reusable/networkproxydetails.h"
#include "miscellaneous/application.h"
#include "miscellaneous/externaltool.h"
@@ -12,7 +13,6 @@
#include "network-web/silentnetworkaccessmanager.h"
#include "network-web/webfactory.h"
-#include
#include
#include
@@ -111,15 +111,15 @@ void SettingsBrowserMail::changeDefaultBrowserArguments(int index) {
}
void SettingsBrowserMail::selectBrowserExecutable() {
- const QString executable_file = QFileDialog::getOpenFileName(this,
- tr("Select web browser executable"),
- qApp->homeFolder(),
+ const QString executable_file = FileDialog::openFileName(this,
+ tr("Select web browser executable"),
+ qApp->homeFolder(),
//: File filter for external browser selection dialog.
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
- tr("Executables (*)"));
+ tr("Executables (*)"));
#else
- tr("Executables (*.*)"));
+ tr("Executables (*.*)"));
#endif
if (!executable_file.isEmpty()) {
@@ -156,15 +156,15 @@ void SettingsBrowserMail::changeDefaultEmailArguments(int index) {
}
void SettingsBrowserMail::selectEmailExecutable() {
- QString executable_file = QFileDialog::getOpenFileName(this,
- tr("Select e-mail executable"),
- qApp->homeFolder(),
+ QString executable_file = FileDialog::openFileName(this,
+ tr("Select e-mail executable"),
+ qApp->homeFolder(),
//: File filter for external e-mail selection dialog.
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
- tr("Executables (*)"));
+ tr("Executables (*)"));
#else
- tr("Executables (*.*)"));
+ tr("Executables (*.*)"));
#endif
if (!executable_file.isEmpty()) {
@@ -303,14 +303,16 @@ void SettingsBrowserMail::addExternalTool() {
}
ExternalTool SettingsBrowserMail::tweakExternalTool(const ExternalTool& tool) const {
- QString executable_file = QFileDialog::getOpenFileName(window(),
- tr("Select external tool"),
- tool.executable(),
+ QString executable_file = FileDialog::openFileName(window(),
+ tr("Select external tool"),
+ tool.executable(),
#if defined(Q_OS_WIN)
- tr("Executables (*.*)"));
+ tr("Executables (*.*)"),
#else
- tr("Executables (*)"));
+ tr("Executables (*)"),
#endif
+ nullptr,
+ GENERAL_REMEMBERED_PATH);
if (!executable_file.isEmpty()) {
executable_file = QDir::toNativeSeparators(executable_file);
diff --git a/src/librssguard/gui/settings/settingsdownloads.cpp b/src/librssguard/gui/settings/settingsdownloads.cpp
index 573ce3c04..5895be663 100644
--- a/src/librssguard/gui/settings/settingsdownloads.cpp
+++ b/src/librssguard/gui/settings/settingsdownloads.cpp
@@ -2,13 +2,12 @@
#include "gui/settings/settingsdownloads.h"
+#include "gui/dialogs/filedialog.h"
#include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h"
#include "miscellaneous/settings.h"
#include "network-web/downloadmanager.h"
-#include
-
SettingsDownloads::SettingsDownloads(Settings* settings, QWidget* parent)
: SettingsPanel(settings, parent), m_ui(new Ui::SettingsDownloads) {
m_ui->setupUi(this);
@@ -30,9 +29,9 @@ QIcon SettingsDownloads::icon() const {
}
void SettingsDownloads::selectDownloadsDirectory() {
- const QString target_directory = QFileDialog::getExistingDirectory(this,
- tr("Select downloads target directory"),
- m_ui->m_txtDownloadsTargetDirectory->text());
+ const QString target_directory = FileDialog::existingDirectory(this,
+ tr("Select downloads target directory"),
+ m_ui->m_txtDownloadsTargetDirectory->text());
if (!target_directory.isEmpty()) {
m_ui->m_txtDownloadsTargetDirectory->setText(QDir::toNativeSeparators(target_directory));
diff --git a/src/librssguard/gui/settings/settingsmediaplayer.cpp b/src/librssguard/gui/settings/settingsmediaplayer.cpp
index 329c761ab..006b04734 100644
--- a/src/librssguard/gui/settings/settingsmediaplayer.cpp
+++ b/src/librssguard/gui/settings/settingsmediaplayer.cpp
@@ -7,11 +7,10 @@
#include "miscellaneous/settings.h"
#if defined(ENABLE_MEDIAPLAYER_LIBMPV)
+#include "gui/dialogs/filedialog.h"
#include "gui/mediaplayer/libmpv/libmpvbackend.h"
#include
-
-#include
#endif
SettingsMediaPlayer::SettingsMediaPlayer(Settings* settings, QWidget* parent) : SettingsPanel(settings, parent) {
@@ -65,16 +64,13 @@ void SettingsMediaPlayer::loadSettings() {
#if defined(ENABLE_MEDIAPLAYER_LIBMPV)
void SettingsMediaPlayer::selectMpvConfigFolder() {
QString real_path = qApp->replaceUserDataFolderPlaceholder(m_ui.m_txtMpvConfigFolder->text());
- QFileDialog dialog(this, tr("Select folder for your MPV configuration"), real_path);
+ QString directory = FileDialog::existingDirectory(this,
+ tr("Select folder for your MPV configuration"),
+ real_path,
+ GENERAL_REMEMBERED_PATH);
- dialog.setFileMode(QFileDialog::FileMode::Directory);
- dialog.setWindowIcon(icon());
- dialog.setOptions(QFileDialog::Option::DontUseNativeDialog | QFileDialog::Option::ShowDirsOnly |
- QFileDialog::Option::HideNameFilterDetails);
- dialog.setViewMode(QFileDialog::ViewMode::Detail);
-
- if (dialog.exec() == QDialog::DialogCode::Accepted && !dialog.selectedFiles().isEmpty()) {
- m_ui.m_txtMpvConfigFolder->setText(QDir::toNativeSeparators(dialog.selectedFiles().at(0)));
+ if (!directory.isEmpty()) {
+ m_ui.m_txtMpvConfigFolder->setText(QDir::toNativeSeparators(directory));
}
}
#endif
diff --git a/src/librssguard/gui/settings/settingsnodejs.cpp b/src/librssguard/gui/settings/settingsnodejs.cpp
index 6d0ef9b95..2019cd90e 100644
--- a/src/librssguard/gui/settings/settingsnodejs.cpp
+++ b/src/librssguard/gui/settings/settingsnodejs.cpp
@@ -4,13 +4,13 @@
#include "definitions/definitions.h"
#include "exceptions/applicationexception.h"
+#include "gui/dialogs/filedialog.h"
#include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h"
#include "miscellaneous/nodejs.h"
#include "network-web/webfactory.h"
#include
-#include
SettingsNodejs::SettingsNodejs(Settings* settings, QWidget* parent) : SettingsPanel(settings, parent) {
m_ui.setupUi(this);
@@ -60,23 +60,18 @@ QIcon SettingsNodejs::icon() const {
}
void SettingsNodejs::changeFileFolder(LineEditWithStatus* tb, bool directory_select, const QString& file_filter) {
- QFileDialog d(this);
-
- d.setFileMode(directory_select ? QFileDialog::FileMode::Directory : QFileDialog::FileMode::ExistingFile);
-
- if (directory_select) {
- d.setOption(QFileDialog::Option::ShowDirsOnly);
- }
- else {
- d.setNameFilter(file_filter);
- }
-
+ QString file_dir;
QString current = qApp->replaceUserDataFolderPlaceholder(tb->lineEdit()->text());
- d.selectFile(current);
+ if (directory_select) {
+ file_dir = FileDialog::existingDirectory(this, {}, current, GENERAL_REMEMBERED_PATH);
+ }
+ else {
+ file_dir = FileDialog::openFileName(this, {}, current, file_filter, {}, GENERAL_REMEMBERED_PATH);
+ }
- if (d.exec() == QDialog::DialogCode::Accepted && !d.selectedFiles().isEmpty()) {
- tb->lineEdit()->setText(QDir::toNativeSeparators(d.selectedFiles().at(0)));
+ if (!file_dir.isEmpty()) {
+ tb->lineEdit()->setText(QDir::toNativeSeparators(file_dir));
}
}
diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp
index 9a55063f3..cc2233307 100644
--- a/src/librssguard/miscellaneous/settings.cpp
+++ b/src/librssguard/miscellaneous/settings.cpp
@@ -15,6 +15,8 @@
DKEY WebEngineAttributes::ID = "web_engine_attributes";
#endif
+DKEY FileDialogPaths::ID = "file_dialog_paths";
+
DKEY DialogGeometries::ID = "dialog_geometries";
// Media player.
diff --git a/src/librssguard/miscellaneous/settings.h b/src/librssguard/miscellaneous/settings.h
index ed7614ad6..af0766df0 100644
--- a/src/librssguard/miscellaneous/settings.h
+++ b/src/librssguard/miscellaneous/settings.h
@@ -45,6 +45,10 @@ namespace DialogGeometries {
KEY ID;
}
+namespace FileDialogPaths {
+ KEY ID;
+}
+
namespace Node {
KEY ID;
diff --git a/src/librssguard/network-web/downloadmanager.cpp b/src/librssguard/network-web/downloadmanager.cpp
index 50ba6b2fd..52f2d5f25 100644
--- a/src/librssguard/network-web/downloadmanager.cpp
+++ b/src/librssguard/network-web/downloadmanager.cpp
@@ -2,6 +2,7 @@
#include "network-web/downloadmanager.h"
+#include "gui/dialogs/filedialog.h"
#include "gui/dialogs/formmain.h"
#include "gui/messagebox.h"
#include "gui/tabwidget.h"
@@ -17,7 +18,6 @@
#include
#include
-#include
#include
#include
#include
@@ -109,8 +109,11 @@ void DownloadItem::getFileName() {
if (m_requestFileName) {
// User must provide the path where he wants to save downloaded file in.
m_gettingFileName = true;
- chosen_filename =
- QFileDialog::getSaveFileName(this, tr("Select destination for downloaded file"), filename_for_prompt);
+ chosen_filename = FileDialog::saveFileName(this,
+ tr("Select destination for downloaded file"),
+ filename_for_prompt,
+ QString(),
+ nullptr);
m_gettingFileName = false;
if (chosen_filename.isEmpty()) {
diff --git a/src/librssguard/services/abstract/gui/formcategorydetails.cpp b/src/librssguard/services/abstract/gui/formcategorydetails.cpp
index 3fe9eeb31..b3c14104a 100644
--- a/src/librssguard/services/abstract/gui/formcategorydetails.cpp
+++ b/src/librssguard/services/abstract/gui/formcategorydetails.cpp
@@ -6,6 +6,7 @@
#include "database/databasequeries.h"
#include "definitions/definitions.h"
#include "exceptions/applicationexception.h"
+#include "gui/dialogs/filedialog.h"
#include "gui/guiutilities.h"
#include "gui/reusable/baselineedit.h"
#include "miscellaneous/iconfactory.h"
@@ -17,7 +18,6 @@
#include
#include
-#include
#include
#include
#include
@@ -194,26 +194,15 @@ void FormCategoryDetails::onLoadIconFromFile() {
.toStdList();
QStringList list_formats = FROM_STD_LIST(QStringList, prefixed_formats);
+ QString fil = FileDialog::openFileName(this,
+ tr("Select icon file for the category"),
+ qApp->homeFolder(),
+ tr("Images (%1)").arg(list_formats.join(QL1C(' '))),
+ nullptr,
+ GENERAL_REMEMBERED_PATH);
- QFileDialog dialog(this,
- tr("Select icon file for the category"),
- qApp->homeFolder(),
- tr("Images (%1)").arg(list_formats.join(QL1C(' '))));
-
- dialog.setFileMode(QFileDialog::FileMode::ExistingFile);
- dialog.setWindowIcon(qApp->icons()->fromTheme(QSL("image-x-generic")));
- dialog.setOptions(QFileDialog::Option::DontUseNativeDialog | QFileDialog::Option::ReadOnly);
- dialog.setViewMode(QFileDialog::ViewMode::Detail);
- dialog.setLabelText(QFileDialog::DialogLabel::Accept, tr("Select icon"));
- dialog.setLabelText(QFileDialog::DialogLabel::Reject, tr("Cancel"));
-
- //: Label to describe the folder for icon file selection dialog.
- dialog.setLabelText(QFileDialog::DialogLabel::LookIn, tr("Look in:"));
- dialog.setLabelText(QFileDialog::DialogLabel::FileName, tr("Icon name:"));
- dialog.setLabelText(QFileDialog::DialogLabel::FileType, tr("Icon type:"));
-
- if (dialog.exec() == QDialog::DialogCode::Accepted) {
- m_ui->m_btnIcon->setIcon(QIcon(dialog.selectedFiles().value(0)));
+ if (!fil.isEmpty()) {
+ m_ui->m_btnIcon->setIcon(QIcon(fil));
}
}