Files
QtGameMaker/src/editor/imagehelpers.cpp
T

90 lines
3.6 KiB
C++

#include "imagehelpers.h"
#include <QWidget>
#include <QImage>
#include <QImageWriter>
#include <QList>
#include <QByteArray>
#include <QString>
#include <QHash>
#include <QFileDialog>
#include <QMessageBox>
#include <QCoreApplication>
void saveImage(QWidget *parent, const QImage &image)
{
QList<QByteArray> formats = QImageWriter::supportedImageFormats();
if (formats.contains("png"))
formats.removeAll("png");
formats.prepend("png");
QString filterString;
QString allFormats;
QHash<QString, QByteArray> lookup;
for (const QByteArray &format : std::as_const(formats))
{
auto text = QCoreApplication::translate("imagehelpers", "%1 format (*.%2)").arg(format.toUpper(), format);
lookup.insert(text, format);
if (!filterString.isEmpty())
filterString += ";;";
filterString.append(text);
if (!allFormats.isEmpty())
allFormats += " ";
allFormats += "*.";
allFormats += format;
}
allFormats = QCoreApplication::translate("imagehelpers", "All Supported Formats (%0)").arg(allFormats);
if (!filterString.isEmpty())
filterString += ";;";
filterString.append(allFormats);
QString selectedFilter;
QString fileName = QFileDialog::getSaveFileName(parent, "Save Image", QString(), filterString, &selectedFilter);
if (fileName.isEmpty())
return;
QByteArray selectedFormat;
if (auto iter = lookup.constFind(selectedFilter); iter != std::cend(lookup))
{
selectedFormat = *iter;
QString suffix = '.' + *iter;
if (!fileName.endsWith(suffix, Qt::CaseInsensitive))
{
if (QMessageBox::warning(parent,
QCoreApplication::translate("imagehelpers", "Append file extension?"),
QCoreApplication::translate("imagehelpers", "It seems like you didnt append the expected file extension %0 at the end.\n\nDo you want to automatically append it before saving?").arg(suffix),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
{
fileName += suffix;
if (QFileInfo::exists(fileName))
{
if (QMessageBox::warning(parent,
QCoreApplication::translate("imagehelpers", "Overwrite file?"),
QCoreApplication::translate("imagehelpers", "The file\n\n%0\n\nalready exists. Should it be overwritten?").arg(fileName),
QMessageBox::Ok | QMessageBox::Cancel) != QMessageBox::Ok)
return;
}
}
}
}
else if (auto iter = std::find_if(std::cbegin(formats), std::cend(formats),
[&fileName](const QByteArray &format){
return fileName.endsWith("." + format, Qt::CaseInsensitive);
}); iter != std::cend(formats))
{
selectedFormat = *iter;
}
else
{
QMessageBox::warning(parent, QCoreApplication::translate("imagehelpers", "Unknown file format!"), QCoreApplication::translate("imagehelpers", "Unknown file format!"));
return;
}
QImageWriter writer{fileName, selectedFormat};
if (!writer.write(image))
QMessageBox::warning(parent, QCoreApplication::translate("imagehelpers", "Error saving image!"), QCoreApplication::translate("imagehelpers", "Error saving image:\n\n%0").arg(writer.errorString()));
}