Auto add file extension when save - issue #1399 (#1521)

* draft of saving with auto added extension

* taking care of file extension, prepared option to use, WIP

* added save last used extension, cleaning needed

* cleaned

* some cleaning

* clang-formatted

* fixed unnecesary  ] in extension

* info about cancel instead of error msg

* changed regex to qstr operations, declaring filters as variables

* added cons to variables

* applied clang-formatt
This commit is contained in:
Tomek
2021-04-08 21:28:09 +02:00
committed by GitHub
parent ecfd13aa1c
commit dc1c53f1c3
4 changed files with 82 additions and 9 deletions

View File

@@ -544,6 +544,18 @@ void ConfigHandler::setUseJpgForClipboard(const bool value)
m_settings.setValue(QStringLiteral("useJpgForClipboard"), value);
}
void ConfigHandler::setSaveAsFileExtension(const QString& extension)
{
m_settings.setValue(QStringLiteral("setSaveAsFileExtension"), extension);
}
QString ConfigHandler::getSaveAsFileExtension()
{
return m_settings
.value(QStringLiteral("setSaveAsFileExtension"), QString(".png"))
.toString();
}
void ConfigHandler::setDefaultSettings()
{
foreach (const QString& key, m_settings.allKeys()) {

View File

@@ -86,6 +86,8 @@ public:
bool useJpgForClipboard() const;
void setUseJpgForClipboard(const bool);
void setSaveAsFileExtension(const QString& extension);
QString getSaveAsFileExtension();
void setDefaultSettings();
void setAllTheButtons();

View File

@@ -99,6 +99,51 @@ bool ScreenshotSaver::saveToFilesystem(const QPixmap& capture,
return ok;
}
QString ScreenshotSaver::ShowSaveFileDialog(QWidget* parent,
const QString& title,
const QString& directory,
const QString& filter)
{
#if defined(Q_WS_WIN) || defined(Q_WS_MAC)
return QFileDialog::getSaveFileName(parent, title, directory, filter);
#else
QFileDialog dialog(parent, title, directory, filter);
if (parent) {
dialog.setWindowModality(Qt::WindowModal);
}
dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.selectNameFilter(ConfigHandler().getSaveAsFileExtension());
if (dialog.exec() == QDialog::Accepted) {
ConfigHandler().setSaveAsFileExtension(dialog.selectedNameFilter());
QString file_name = dialog.selectedFiles().first();
QFileInfo info(file_name);
if ((dialog.selectedNameFilter() == defaultFilter)) {
if (info.suffix().isEmpty()) { // change to png if no suffix given,
// otherwise leave it as it is
file_name = info.filePath() + QLatin1String(".") + "png";
;
}
} else if (!dialog.selectedNameFilter()
.isEmpty()) { // if selected suffix from menu is not an
// empty entry
QString selectedExtension =
dialog.selectedNameFilter().section('.', -1);
selectedExtension.remove(QChar(')'));
file_name =
info.path() + QLatin1String("/") + info.baseName() +
QLatin1String(".") +
selectedExtension; // recreate full filename with chosen suffix
}
return file_name;
} else {
return QString();
}
#endif // Q_WS_MAC || Q_WS_WIN
}
bool ScreenshotSaver::saveToFilesystemGUI(const QPixmap& capture)
{
bool ok = false;
@@ -116,18 +161,20 @@ bool ScreenshotSaver::saveToFilesystemGUI(const QPixmap& capture)
}
#endif
if (!config.savePathFixed()) {
savePath = QFileDialog::getSaveFileName(
savePath = ShowSaveFileDialog(
nullptr,
QObject::tr("Save screenshot"),
FileNameHandler().absoluteSavePath(),
QLatin1String("Portable Network Graphic file (PNG) (*.png);;BMP "
"file (*.bmp);;JPEG file (*.jpg)"));
QString(pngFilter + separator + bmpFilter + separator + jpgFilter +
separator + defaultFilter));
}
if (!savePath.endsWith(QLatin1String(".png"), Qt::CaseInsensitive) &&
!savePath.endsWith(QLatin1String(".bmp"), Qt::CaseInsensitive) &&
!savePath.endsWith(QLatin1String(".jpg"), Qt::CaseInsensitive)) {
savePath += QLatin1String(".png");
if (savePath == "") {
QString msg = QObject::tr("Saving canceled");
QMessageBox saveInfoBox(
QMessageBox::Information, QObject::tr("Save canceled"), msg);
saveInfoBox.setWindowIcon(QIcon(":img/app/flameshot.svg"));
saveInfoBox.exec();
return ok;
}
ok = capture.save(savePath);

View File

@@ -3,8 +3,10 @@
#pragma once
#include <QString>
class QPixmap;
class QString;
class QWidget;
class ScreenshotSaver
{
@@ -20,4 +22,14 @@ public:
private:
unsigned m_id;
QString ShowSaveFileDialog(QWidget* parent,
const QString& title,
const QString& directory,
const QString& filter);
const QString pngFilter = "Portable Network Graphic file (PNG) (*.png)";
const QString bmpFilter = "BMP file (*.bmp)";
const QString jpgFilter = "JPEG file (*.jpg)";
const QString defaultFilter = "By extension [default: *.png] (*.png)";
const QString separator = ";;";
};