Skip to content

Commit

Permalink
fix #1643
Browse files Browse the repository at this point in the history
  • Loading branch information
martinrotter committed Feb 28, 2025
1 parent f0660c9 commit 4ea839b
Show file tree
Hide file tree
Showing 25 changed files with 328 additions and 246 deletions.
194 changes: 97 additions & 97 deletions localization/rssguard_en.ts

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "src/3rd-party/richtexteditor/mrichtextedit.h"

#include <librssguard/definitions/definitions.h>
#include <librssguard/gui/dialogs/filedialog.h>
#include <librssguard/miscellaneous/application.h>
#include <librssguard/miscellaneous/iconfactory.h>

Expand All @@ -36,7 +37,6 @@
#include <QClipboard>
#include <QColorDialog>
#include <QDialog>
#include <QFileDialog>
#include <QFontDatabase>
#include <QImageReader>
#include <QInputDialog>
Expand Down Expand Up @@ -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());
Expand Down
2 changes: 0 additions & 2 deletions src/librssguard-gmail/src/gmailserviceroot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
#include <librssguard/network-web/oauth2service.h>
#include <librssguard/services/abstract/labelsnode.h>

#include <QFileDialog>

GmailServiceRoot::GmailServiceRoot(RootItem* parent)
: ServiceRoot(parent), m_network(new GmailNetworkFactory(this)), m_actionReply(nullptr) {
m_network->setService(this);
Expand Down
15 changes: 8 additions & 7 deletions src/librssguard-greader/src/greaderserviceroot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,14 @@

#include <librssguard/database/databasequeries.h>
#include <librssguard/definitions/definitions.h>
#include <librssguard/gui/dialogs/filedialog.h>
#include <librssguard/gui/messagebox.h>
#include <librssguard/miscellaneous/application.h>
#include <librssguard/miscellaneous/iconfactory.h>
#include <librssguard/miscellaneous/mutex.h>
#include <librssguard/miscellaneous/textfactory.h>
#include <librssguard/network-web/oauth2service.h>

#include <QFileDialog>

GreaderServiceRoot::GreaderServiceRoot(RootItem* parent) : ServiceRoot(parent), m_network(new GreaderNetwork(this)) {
setIcon(GreaderEntryPoint().icon());
m_network->setRoot(this);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 0 additions & 2 deletions src/librssguard-reddit/src/redditserviceroot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
#include "src/redditnetworkfactory.h"
#include "src/redditsubscription.h"

#include <QFileDialog>

RedditServiceRoot::RedditServiceRoot(RootItem* parent)
: ServiceRoot(parent), m_network(new RedditNetworkFactory(this)) {
m_network->setService(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

#include <QComboBox>
#include <QDialogButtonBox>
#include <QFileDialog>
#include <QGroupBox>
#include <QNetworkCookie>

Expand Down
15 changes: 8 additions & 7 deletions src/librssguard-standard/src/gui/formstandardimportexport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
#include "src/standardserviceroot.h"

#include <librssguard/exceptions/ioexception.h>
#include <librssguard/gui/dialogs/filedialog.h>
#include <librssguard/gui/guiutilities.h>
#include <librssguard/miscellaneous/application.h>
#include <librssguard/miscellaneous/iconfactory.h>
#include <librssguard/services/abstract/category.h>

#include <QFileDialog>
#include <QTextStream>

FormStandardImportExport::FormStandardImportExport(StandardServiceRoot* service_root, QWidget* parent)
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
31 changes: 10 additions & 21 deletions src/librssguard-standard/src/gui/standardaccountdetails.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
#include "src/standardserviceentrypoint.h"

#include <librssguard/3rd-party/boolinq/boolinq.h>
#include <librssguard/gui/dialogs/filedialog.h>
#include <librssguard/miscellaneous/iconfactory.h>

#include <QFileDialog>
#include <QImageReader>

StandardAccountDetails::StandardAccountDetails(QWidget* parent) : QWidget(parent) {
Expand Down Expand Up @@ -51,26 +51,15 @@ void StandardAccountDetails::onLoadIconFromFile() {
.toStdList();

QStringList list_formats = FROM_STD_LIST(QStringList, prefixed_formats);

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)));
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);

if (!fil.isEmpty()) {
m_ui.m_btnIcon->setIcon(QIcon(fil));
}
}

Expand Down
31 changes: 10 additions & 21 deletions src/librssguard-standard/src/gui/standardfeeddetails.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
#include <librssguard/exceptions/applicationexception.h>
#include <librssguard/exceptions/networkexception.h>
#include <librssguard/exceptions/scriptexception.h>
#include <librssguard/gui/dialogs/filedialog.h>
#include <librssguard/miscellaneous/iconfactory.h>
#include <librssguard/miscellaneous/settings.h>
#include <librssguard/miscellaneous/textfactory.h>
#include <librssguard/network-web/networkfactory.h>
#include <librssguard/services/abstract/category.h>

#include <QClipboard>
#include <QFileDialog>
#include <QImageReader>
#include <QInputDialog>
#include <QMenu>
Expand Down Expand Up @@ -377,26 +377,15 @@ void StandardFeedDetails::onLoadIconFromFile() {
.toStdList();

QStringList list_formats = FROM_STD_LIST(QStringList, prefixed_formats);

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)));
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);

if (!fil.isEmpty()) {
m_ui.m_btnIcon->setIcon(QIcon(fil));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
#include <librssguard/network-web/networkfactory.h>
#include <librssguard/services/abstract/category.h>

#include <QFileDialog>
#include <QImageReader>
#include <QMenu>
#include <QMimeData>
Expand Down
2 changes: 2 additions & 0 deletions src/librssguard/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
70 changes: 70 additions & 0 deletions src/librssguard/gui/dialogs/filedialog.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// For license of this file, see <project-root-folder>/LICENSE.md.

#include "gui/dialogs/filedialog.h"

#include "miscellaneous/settings.h"

#include <QFileInfo>

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;
}
41 changes: 41 additions & 0 deletions src/librssguard/gui/dialogs/filedialog.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// For license of this file, see <project-root-folder>/LICENSE.md.

#ifndef FILEDIALOG_H
#define FILEDIALOG_H

#include <QFileDialog>
#include <QString>

#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
Loading

0 comments on commit 4ea839b

Please sign in to comment.