add unlimited buffer and import as-is
continuous-integration/drone/push Build is passing Details

1.9.x
Syping 3 years ago
parent f6f75c1f89
commit 2b2cfc210f

@ -16,10 +16,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#include "ImportDialog.h"
#include "ui_ImportDialog.h"
#include "SnapmaticPicture.h"
#include "SidebarGenerator.h"
#include "StandardPaths.h"
#include "ImportDialog.h"
#include "imagecropper.h"
#include "AppEnv.h"
#include "config.h"
@ -39,8 +40,6 @@
#include <QRgb>
// IMAGES VALUES
#define snapmaticResolutionW 960
#define snapmaticResolutionH 536
#define snapmaticAvatarResolution 470
#define snapmaticAvatarPlacementW 145
#define snapmaticAvatarPlacementH 66
@ -88,6 +87,14 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) :
ui->labBackgroundImage->setText(tr("Background Image:"));
ui->cmdBackgroundWipe->setVisible(false);
// Snapmatic Resolution
snapmaticResolution = SnapmaticPicture::getSnapmaticResolution();
ui->cbResolution->addItem("GTA V", snapmaticResolution);
ui->cbResolution->addItem("FiveM", QSize(1920, 1072));
ui->cbResolution->addItem("1280x720", QSize(1280, 720));
ui->cbResolution->addItem("1920x1080", QSize(1920, 1080));
ui->cbResolution->addItem("2560x1440", QSize(2560, 1440));
// Set Import Settings
QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR);
settings.beginGroup("Import");
@ -116,13 +123,12 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) :
#endif
// Options menu
optionsMenu = new QMenu(this);
optionsMenu->addAction(tr("&Import new Picture..."), this, SLOT(importNewPicture()));
optionsMenu->addAction(tr("&Crop Picture..."), this, SLOT(cropPicture()));
optionsMenu->addSeparator();
optionsMenu->addAction(tr("&Load Settings..."), this, SLOT(loadImportSettings()));
optionsMenu->addAction(tr("&Save Settings..."), this, SLOT(saveImportSettings()));
ui->cmdOptions->setMenu(optionsMenu);
optionsMenu.addAction(tr("&Import new Picture..."), this, SLOT(importNewPicture()));
optionsMenu.addAction(tr("&Crop Picture..."), this, SLOT(cropPicture()));
optionsMenu.addSeparator();
optionsMenu.addAction(tr("&Load Settings..."), this, SLOT(loadImportSettings()));
optionsMenu.addAction(tr("&Save Settings..."), this, SLOT(saveImportSettings()));
ui->cmdOptions->setMenu(&optionsMenu);
setMaximumSize(sizeHint());
setMinimumSize(sizeHint());
@ -131,97 +137,84 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) :
ImportDialog::~ImportDialog()
{
delete optionsMenu;
delete ui;
}
void ImportDialog::processImage()
{
if (workImage.isNull()) return;
if (workImage.isNull())
return;
QImage snapmaticImage = workImage;
QPixmap snapmaticPixmap(snapmaticResolutionW, snapmaticResolutionH);
QPixmap snapmaticPixmap(snapmaticResolution);
snapmaticPixmap.fill(selectedColour);
QPainter snapmaticPainter(&snapmaticPixmap);
qreal screenRatioPR = AppEnv::screenRatioPR();
if (!backImage.isNull())
{
if (!ui->cbStretch->isChecked())
{
if (!backImage.isNull()) {
if (!ui->cbStretch->isChecked()) {
int diffWidth = 0;
int diffHeight = 0;
if (backImage.width() != snapmaticResolutionW)
{
diffWidth = snapmaticResolutionW - backImage.width();
if (backImage.width() != snapmaticResolution.width()) {
diffWidth = snapmaticResolution.width() - backImage.width();
diffWidth = diffWidth / 2;
}
else if (backImage.height() != snapmaticResolutionH)
{
diffHeight = snapmaticResolutionH - backImage.height();
else if (backImage.height() != snapmaticResolution.height()) {
diffHeight = snapmaticResolution.height() - backImage.height();
diffHeight = diffHeight / 2;
}
snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, backImage);
}
else
{
snapmaticPainter.drawImage(0, 0, QImage(backImage).scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
else {
snapmaticPainter.drawImage(0, 0, QImage(backImage).scaled(snapmaticResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
}
if (ui->cbAvatar->isChecked() && ui->cbForceAvatarColour->isChecked())
{
if (ui->cbAvatar->isChecked() && ui->cbForceAvatarColour->isChecked()) {
snapmaticPainter.fillRect(snapmaticAvatarPlacementW, snapmaticAvatarPlacementH, snapmaticAvatarResolution, snapmaticAvatarResolution, selectedColour);
}
}
if (insideAvatarZone)
{
if (insideAvatarZone) {
// Avatar mode
int diffWidth = 0;
int diffHeight = 0;
if (!ui->cbIgnore->isChecked())
{
if (!ui->cbIgnore->isChecked()) {
snapmaticImage = snapmaticImage.scaled(snapmaticAvatarResolution, snapmaticAvatarResolution, Qt::KeepAspectRatio, Qt::SmoothTransformation);
if (snapmaticImage.width() > snapmaticImage.height())
{
if (snapmaticImage.width() > snapmaticImage.height()) {
diffHeight = snapmaticAvatarResolution - snapmaticImage.height();
diffHeight = diffHeight / 2;
}
else if (snapmaticImage.width() < snapmaticImage.height())
{
else if (snapmaticImage.width() < snapmaticImage.height()) {
diffWidth = snapmaticAvatarResolution - snapmaticImage.width();
diffWidth = diffWidth / 2;
}
}
else
{
else {
snapmaticImage = snapmaticImage.scaled(snapmaticAvatarResolution, snapmaticAvatarResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
snapmaticPainter.drawImage(snapmaticAvatarPlacementW + diffWidth, snapmaticAvatarPlacementH + diffHeight, snapmaticImage);
if (ui->cbWatermark->isChecked()) { processWatermark(&snapmaticPainter); }
if (ui->cbWatermark->isChecked())
processWatermark(&snapmaticPainter);
imageTitle = tr("Custom Avatar", "Custom Avatar Description in SC, don't use Special Character!");
}
else
{
else {
// Picture mode
int diffWidth = 0;
int diffHeight = 0;
if (!ui->cbIgnore->isChecked())
{
snapmaticImage = snapmaticImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::KeepAspectRatio, Qt::SmoothTransformation);
if (snapmaticImage.width() != snapmaticResolutionW)
{
diffWidth = snapmaticResolutionW - snapmaticImage.width();
if (!ui->cbIgnore->isChecked()) {
snapmaticImage = snapmaticImage.scaled(snapmaticResolution, Qt::KeepAspectRatio, Qt::SmoothTransformation);
if (snapmaticImage.width() != snapmaticResolution.width()) {
diffWidth = snapmaticResolution.width() - snapmaticImage.width();
diffWidth = diffWidth / 2;
}
else if (snapmaticImage.height() != snapmaticResolutionH)
{
diffHeight = snapmaticResolutionH - snapmaticImage.height();
else if (snapmaticImage.height() != snapmaticResolution.height()) {
diffHeight = snapmaticResolution.height() - snapmaticImage.height();
diffHeight = diffHeight / 2;
}
}
else
{
snapmaticImage = snapmaticImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
else {
snapmaticImage = snapmaticImage.scaled(snapmaticResolution, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, snapmaticImage);
if (ui->cbWatermark->isChecked()) { processWatermark(&snapmaticPainter); }
if (ui->cbWatermark->isChecked())
processWatermark(&snapmaticPainter);
imageTitle = tr("Custom Picture", "Custom Picture Description in SC, don't use Special Character!");
}
snapmaticPainter.end();
@ -232,6 +225,43 @@ void ImportDialog::processImage()
ui->labPicture->setPixmap(snapmaticPixmap.scaled(snapmaticResolutionLW * screenRatioPR, snapmaticResolutionLH * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
}
void ImportDialog::reworkImage()
{
workImage = QImage();
if (origImage.width() == origImage.height()) {
if (ui->cbResolution->currentIndex() == 0) {
insideAvatarZone = true;
ui->cbAvatar->setChecked(true);
}
else {
insideAvatarZone = false;
ui->cbAvatar->setChecked(false);
}
if (origImage.height() > snapmaticResolution.height()) {
workImage = origImage.scaled(snapmaticResolution.height(), snapmaticResolution.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
else {
workImage = origImage;
}
}
else if (origImage.width() > snapmaticResolution.width() && origImage.width() > origImage.height()) {
insideAvatarZone = false;
ui->cbAvatar->setChecked(false);
workImage = origImage.scaledToWidth(snapmaticResolution.width(), Qt::SmoothTransformation);
}
else if (origImage.height() > snapmaticResolution.height() && origImage.height() > origImage.width()) {
insideAvatarZone = false;
ui->cbAvatar->setChecked(false);
workImage = origImage.scaledToHeight(snapmaticResolution.height(), Qt::SmoothTransformation);
}
else {
insideAvatarZone = false;
ui->cbAvatar->setChecked(false);
workImage = origImage;
}
processImage();
}
void ImportDialog::processWatermark(QPainter *snapmaticPainter)
{
bool blackWatermark = false;
@ -277,21 +307,21 @@ void ImportDialog::processSettings(QString settingsProfile, bool setDefault)
{
QSettings settings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR);
settings.beginGroup("Import");
if (setDefault)
{
if (setDefault) {
settings.setValue("Profile", settingsProfile);
}
if (settingsProfile == "Default")
{
if (settingsProfile == "Default") {
watermarkAvatar = true;
watermarkPicture = false;
selectedColour = QColor::fromRgb(0, 0, 0, 255);
backImage = QImage();
ui->cbStretch->setChecked(false);
ui->cbForceAvatarColour->setChecked(false);
ui->cbUnlimited->setChecked(false);
ui->cbImportAsIs->setChecked(false);
ui->cbResolution->setCurrentIndex(0);
}
else
{
else {
settings.beginGroup(settingsProfile);
watermarkAvatar = settings.value("WatermarkAvatar", true).toBool();
watermarkPicture = settings.value("WatermarkPicture", false).toBool();
@ -299,27 +329,31 @@ void ImportDialog::processSettings(QString settingsProfile, bool setDefault)
selectedColour = qvariant_cast<QColor>(settings.value("SelectedColour", QColor::fromRgb(0, 0, 0, 255)));
ui->cbStretch->setChecked(settings.value("BackgroundStretch", false).toBool());
ui->cbForceAvatarColour->setChecked(settings.value("ForceAvatarColour", false).toBool());
ui->cbUnlimited->setChecked(settings.value("UnlimitedBuffer", false).toBool());
ui->cbImportAsIs->setChecked(settings.value("ImportAsIs", false).toBool());
const QVariant data = settings.value("Resolution", SnapmaticPicture::getSnapmaticResolution());
if (data.type() == QVariant::Size) {
int index = ui->cbResolution->findData(data);
if (index != -1) {
ui->cbResolution->setCurrentIndex(index);
}
}
settings.endGroup();
}
if (!workImage.isNull())
{
if (ui->cbAvatar->isChecked())
{
if (!workImage.isNull()) {
if (ui->cbAvatar->isChecked()) {
ui->cbWatermark->setChecked(watermarkAvatar);
}
else
{
else {
ui->cbWatermark->setChecked(watermarkPicture);
}
}
ui->labColour->setText(tr("Background Colour: <span style=\"color: %1\">%1</span>").arg(selectedColour.name()));
if (!backImage.isNull())
{
if (!backImage.isNull()) {
ui->labBackgroundImage->setText(tr("Background Image: %1").arg(tr("Storage", "Background Image: Storage")));
ui->cmdBackgroundWipe->setVisible(true);
}
else
{
else {
ui->labBackgroundImage->setText(tr("Background Image:"));
ui->cmdBackgroundWipe->setVisible(false);
}
@ -337,6 +371,15 @@ void ImportDialog::saveSettings(QString settingsProfile)
settings.setValue("SelectedColour", selectedColour);
settings.setValue("BackgroundStretch", ui->cbStretch->isChecked());
settings.setValue("ForceAvatarColour", ui->cbForceAvatarColour->isChecked());
const QVariant data = ui->cbResolution->currentData();
if (data.type() == QVariant::Size) {
settings.setValue("Resolution", ui->cbResolution->currentData());
}
else {
settings.setValue("Resolution", SnapmaticPicture::getSnapmaticResolution());
}
settings.setValue("UnlimitedBuffer", ui->cbUnlimited->isChecked());
settings.setValue("ImportAsIs", ui->cbImportAsIs->isChecked());
settings.endGroup();
settings.setValue("Profile", settingsProfile);
settings.endGroup();
@ -488,11 +531,11 @@ void ImportDialog::loadImportSettings()
bool ok;
QStringList profileList;
profileList << tr("Default", "Default as Default Profile")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("1")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("2")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("3")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("4")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("5");
<< tr("Profile %1", "Profile %1 as Profile 1").arg("1")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("2")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("3")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("4")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("5");
QString sProfile = QInputDialog::getItem(this, tr("Load Settings..."), tr("Please select your settings profile"), profileList, 0, false, &ok, windowFlags());
if (ok)
{
@ -536,10 +579,10 @@ void ImportDialog::saveImportSettings()
bool ok;
QStringList profileList;
profileList << tr("Profile %1", "Profile %1 as Profile 1").arg("1")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("2")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("3")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("4")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("5");
<< tr("Profile %1", "Profile %1 as Profile 1").arg("2")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("3")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("4")
<< tr("Profile %1", "Profile %1 as Profile 1").arg("5");
QString sProfile = QInputDialog::getItem(this, tr("Save Settings..."), tr("Please select your settings profile"), profileList, 0, false, &ok, windowFlags());
if (ok)
{
@ -570,44 +613,49 @@ void ImportDialog::saveImportSettings()
QImage ImportDialog::image()
{
return newImage;
if (ui->cbImportAsIs->isChecked()) {
return origImage;
}
else {
return newImage;
}
}
void ImportDialog::setImage(QImage *image_)
{
origImage = *image_;
workImage = QImage();
if (image_->width() == image_->height())
{
insideAvatarZone = true;
ui->cbAvatar->setChecked(true);
if (image_->height() > snapmaticResolutionH)
{
workImage = image_->scaled(snapmaticResolutionH, snapmaticResolutionH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
if (image_->width() == image_->height()) {
if (ui->cbResolution->currentIndex() == 0) {
insideAvatarZone = true;
ui->cbAvatar->setChecked(true);
}
else {
insideAvatarZone = false;
ui->cbAvatar->setChecked(false);
}
if (image_->height() > snapmaticResolution.height()) {
workImage = image_->scaled(snapmaticResolution.height(), snapmaticResolution.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
delete image_;
}
else
{
else {
workImage = *image_;
delete image_;
}
}
else if (image_->width() > snapmaticResolutionW && image_->width() > image_->height())
{
else if (image_->width() > snapmaticResolution.width() && image_->width() > image_->height()) {
insideAvatarZone = false;
ui->cbAvatar->setChecked(false);
workImage = image_->scaledToWidth(snapmaticResolutionW, Qt::SmoothTransformation);
workImage = image_->scaledToWidth(snapmaticResolution.width(), Qt::SmoothTransformation);
delete image_;
}
else if (image_->height() > snapmaticResolutionH && image_->height() > image_->width())
{
else if (image_->height() > snapmaticResolution.height() && image_->height() > image_->width()) {
insideAvatarZone = false;
ui->cbAvatar->setChecked(false);
workImage = image_->scaledToHeight(snapmaticResolutionH, Qt::SmoothTransformation);
workImage = image_->scaledToHeight(snapmaticResolution.height(), Qt::SmoothTransformation);
delete image_;
}
else
{
else {
insideAvatarZone = false;
ui->cbAvatar->setChecked(false);
workImage = *image_;
@ -619,18 +667,15 @@ void ImportDialog::setImage(QImage *image_)
void ImportDialog::lockSettings(bool lock)
{
ui->cbAvatar->setDisabled(lock);
ui->cbForceAvatarColour->setDisabled(lock);
ui->cbIgnore->setDisabled(lock);
ui->cbStretch->setDisabled(lock);
ui->cbWatermark->setDisabled(lock);
ui->cmdBackgroundChange->setDisabled(lock);
ui->cmdBackgroundWipe->setDisabled(lock);
ui->cmdColourChange->setDisabled(lock);
ui->labBackgroundImage->setDisabled(lock);
ui->labColour->setDisabled(lock);
ui->gbSettings->setDisabled(lock);
ui->gbBackground->setDisabled(lock);
ui->gbAdvanced->setDisabled(lock);
if (ui->cbImportAsIs->isChecked()) {
ui->gbBackground->setDisabled(true);
ui->gbSettings->setDisabled(true);
}
else {
ui->gbBackground->setDisabled(lock);
ui->gbSettings->setDisabled(lock);
}
ui->cmdOK->setDisabled(lock);
settingsLocked = lock;
}
@ -652,6 +697,11 @@ bool ImportDialog::isImportAgreed()
return importAgreed;
}
bool ImportDialog::isUnlimitedBuffer()
{
return ui->cbUnlimited->isChecked();
}
bool ImportDialog::areSettingsLocked()
{
return settingsLocked;
@ -670,10 +720,11 @@ void ImportDialog::on_cbIgnore_toggled(bool checked)
void ImportDialog::on_cbAvatar_toggled(bool checked)
{
if (!workImage.isNull() && workImage.width() == workImage.height() && !checked)
{
if (QMessageBox::No == QMessageBox::warning(this, tr("Snapmatic Avatar Zone"), tr("Are you sure to use a square image outside of the Avatar Zone?\nWhen you want to use it as Avatar the image will be detached!"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
{
if (ui->cbResolution->currentIndex() != 0)
return;
if (!workImage.isNull() && workImage.width() == workImage.height() && !checked) {
if (QMessageBox::No == QMessageBox::warning(this, tr("Snapmatic Avatar Zone"), tr("Are you sure to use a square image outside of the Avatar Zone?\nWhen you want to use it as Avatar the image will be detached!"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No)) {
ui->cbAvatar->setChecked(true);
insideAvatarZone = true;
return;
@ -681,12 +732,10 @@ void ImportDialog::on_cbAvatar_toggled(bool checked)
}
insideAvatarZone = ui->cbAvatar->isChecked();
watermarkBlock = true;
if (insideAvatarZone)
{
if (insideAvatarZone) {
ui->cbWatermark->setChecked(watermarkAvatar);
}
else
{
else {
ui->cbWatermark->setChecked(watermarkPicture);
}
watermarkBlock = false;
@ -788,7 +837,7 @@ fileDialogPreOpen:
QMessageBox::warning(this, QApplication::translate("ProfileInterface", "Import"), QApplication::translate("ProfileInterface", "Can't import %1 because file can't be parsed properly").arg("\""+selectedFileName+"\""));
goto fileDialogPreOpen;
}
backImage = importImage.scaled(snapmaticResolutionW, snapmaticResolutionH, Qt::KeepAspectRatio, Qt::SmoothTransformation);
backImage = importImage.scaled(snapmaticResolution, Qt::KeepAspectRatio, Qt::SmoothTransformation);
backgroundPath = selectedFile;
ui->labBackgroundImage->setText(tr("Background Image: %1").arg(tr("File", "Background Image: File")));
ui->cmdBackgroundWipe->setVisible(true);
@ -826,14 +875,50 @@ void ImportDialog::on_cbWatermark_toggled(bool checked)
{
if (!watermarkBlock)
{
if (insideAvatarZone)
{
if (insideAvatarZone) {
watermarkAvatar = checked;
}
else
{
else {
watermarkPicture = checked;
}
processImage();
}
}
void ImportDialog::on_cbImportAsIs_toggled(bool checked)
{
ui->cbResolution->setDisabled(checked);
ui->labResolution->setDisabled(checked);
ui->gbBackground->setDisabled(checked);
ui->gbSettings->setDisabled(checked);
}
void ImportDialog::on_cbResolution_currentIndexChanged(int index)
{
Q_UNUSED(index)
const QVariant data = ui->cbResolution->currentData();
if (data.type() == QVariant::Size) {
const QSize dataSize = data.toSize();
if (dataSize == SnapmaticPicture::getSnapmaticResolution()) {
ui->cbAvatar->setEnabled(true);
snapmaticResolution = dataSize;
reworkImage();
}
else {
if (!workImage.isNull() && workImage.width() == workImage.height() && ui->cbAvatar->isChecked()) {
if (QMessageBox::No == QMessageBox::warning(this, tr("Snapmatic Avatar Zone"), tr("Are you sure to use a square image outside of the Avatar Zone?\nWhen you want to use it as Avatar the image will be detached!"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No)) {
ui->cbResolution->setCurrentIndex(0);
ui->cbAvatar->setChecked(true);
insideAvatarZone = true;
return;
}
}
ui->cbAvatar->setChecked(false);
ui->cbAvatar->setDisabled(true);
insideAvatarZone = false;
ui->cbWatermark->setChecked(watermarkPicture);
snapmaticResolution = dataSize;
reworkImage();
}
}
}

@ -39,10 +39,12 @@ public:
void lockSettings(bool lock);
void enableOverwriteMode();
bool isImportAgreed();
bool isUnlimitedBuffer();
bool areSettingsLocked();
private slots:
void processImage();
void reworkImage();
void cropPicture();
void importNewPicture();
void loadImportSettings();
@ -58,6 +60,8 @@ private slots:
void on_cbStretch_toggled(bool checked);
void on_cbForceAvatarColour_toggled(bool checked);
void on_cbWatermark_toggled(bool checked);
void on_cbImportAsIs_toggled(bool checked);
void on_cbResolution_currentIndexChanged(int index);
private:
QString profileName;
@ -70,7 +74,8 @@ private:
QImage origImage;
QImage newImage;
QColor selectedColour;
QMenu *optionsMenu;
QMenu optionsMenu;
QSize snapmaticResolution;
bool insideAvatarZone;
bool watermarkPicture;
bool watermarkAvatar;

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>516</width>
<height>512</height>
<height>677</height>
</rect>
</property>
<property name="minimumSize">
@ -297,6 +297,63 @@
</property>
</spacer>
</item>
<item>
<widget class="QGroupBox" name="gbAdvanced">
<property name="title">
<string>Advanced</string>
</property>
<layout class="QVBoxLayout" name="vlAdvanced">
<item>
<layout class="QHBoxLayout" name="hlResolution">
<item>
<widget class="QLabel" name="labResolution">
<property name="text">
<string>Resolution:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cbResolution">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Snapmatic resolution</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="hlExpert">
<item>
<widget class="QCheckBox" name="cbUnlimited">
<property name="toolTip">
<string>Avoid compression and expand buffer instead, improves picture quality, but may break Snapmatic</string>
</property>
<property name="text">
<string>Unlimited Buffer</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbImportAsIs">
<property name="toolTip">
<string>Import as-is, don't change the picture at all, guarantee to break Snapmatic unless you know what you doing</string>
</property>
<property name="text">
<string>Import as-is</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="hlButtons">
<item>

@ -1,6 +1,6 @@
/*****************************************************************************
* gta5view Grand Theft Auto V Profile Viewer
* Copyright (C) 2016-2019 Syping
* Copyright (C) 2016-2020 Syping
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -805,7 +805,7 @@ bool ProfileInterface::importFile(QString selectedFile, QDateTime importDateTime
importDialog->exec();
if (importDialog->isImportAgreed())
{
if (picture->setImage(importDialog->image()))
if (picture->setImage(importDialog->image(), importDialog->isUnlimitedBuffer()))
{
SnapmaticProperties spJson = picture->getSnapmaticProperties();
spJson.uid = getRandomUid();
@ -1058,7 +1058,7 @@ bool ProfileInterface::importImage(QImage *snapmaticImage, QDateTime importDateT
importDialog->exec();
if (importDialog->isImportAgreed())
{
if (picture->setImage(importDialog->image()))
if (picture->setImage(importDialog->image(), importDialog->isUnlimitedBuffer()))
{
SnapmaticProperties spJson = picture->getSnapmaticProperties();
spJson.uid = getRandomUid();

@ -166,27 +166,27 @@ Pictures and Savegames</source>
<context>
<name>ImageEditorDialog</name>
<message>
<location filename="../ImportDialog.cpp" line="640"/>
<location filename="../ImportDialog.cpp" line="685"/>
<source>Overwrite Image...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="642"/>
<location filename="../ImportDialog.cpp" line="687"/>
<source>Apply changes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="641"/>
<location filename="../ImportDialog.cpp" line="686"/>
<source>&amp;Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="644"/>
<location filename="../ImportDialog.cpp" line="689"/>
<source>Discard changes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="643"/>
<location filename="../ImportDialog.cpp" line="688"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
@ -246,9 +246,9 @@ Pictures and Savegames</source>
</message>
<message>
<location filename="../ImportDialog.ui" line="150"/>
<location filename="../ImportDialog.cpp" line="87"/>
<location filename="../ImportDialog.cpp" line="315"/>
<location filename="../ImportDialog.cpp" line="728"/>
<location filename="../ImportDialog.cpp" line="86"/>
<location filename="../ImportDialog.cpp" line="351"/>
<location filename="../ImportDialog.cpp" line="777"/>
<source>Background Colour: &lt;span style=&quot;color: %1&quot;&gt;%1&lt;/span&gt;</source>
<translation type="unfinished"></translation>
</message>
@ -265,9 +265,9 @@ Pictures and Savegames</source>
</message>
<message>
<location filename="../ImportDialog.ui" line="203"/>
<location filename="../ImportDialog.cpp" line="88"/>
<location filename="../ImportDialog.cpp" line="323"/>
<location filename="../ImportDialog.cpp" line="808"/>
<location filename="../ImportDialog.cpp" line="87"/>
<location filename="../ImportDialog.cpp" line="357"/>
<location filename="../ImportDialog.cpp" line="857"/>
<source>Background Image:</source>
<translation type="unfinished"></translation>
</message>
@ -292,170 +292,207 @@ Pictures and Savegames</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="305"/>
<location filename="../ImportDialog.ui" line="303"/>
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="311"/>
<source>Resolution:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="324"/>
<source>Snapmatic resolution</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="335"/>
<source>Avoid compression and expand buffer instead, improves picture quality, but may break Snapmatic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="338"/>
<source>Unlimited Buffer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="345"/>
<source>Import as-is, don&apos;t change the picture at all, guarantee to break Snapmatic unless you know what you doing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="348"/>
<source>Import as-is</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="362"/>
<source>Import options</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="308"/>
<location filename="../ImportDialog.ui" line="365"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="337"/>
<location filename="../ImportDialog.ui" line="394"/>
<source>Import picture</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="340"/>
<location filename="../ImportDialog.ui" line="397"/>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="353"/>
<location filename="../ImportDialog.ui" line="410"/>
<source>Discard picture</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="356"/>
<location filename="../ImportDialog.ui" line="413"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="120"/>
<location filename="../ImportDialog.cpp" line="126"/>
<source>&amp;Import new Picture...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="121"/>
<location filename="../ImportDialog.cpp" line="127"/>
<source>&amp;Crop Picture...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="123"/>
<location filename="../ImportDialog.cpp" line="129"/>
<source>&amp;Load Settings...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="124"/>
<location filename="../ImportDialog.cpp" line="130"/>
<source>&amp;Save Settings...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="198"/>
<location filename="../ImportDialog.cpp" line="195"/>
<location filename="../ProfileInterface.cpp" line="721"/>
<source>Custom Avatar</source>
<comment>Custom Avatar Description in SC, don&apos;t use Special Character!</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="225"/>
<location filename="../ImportDialog.cpp" line="218"/>
<location filename="../ProfileInterface.cpp" line="740"/>
<source>Custom Picture</source>
<comment>Custom Picture Description in SC, don&apos;t use Special Character!</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="318"/>
<location filename="../ImportDialog.cpp" line="353"/>
<source>Storage</source>
<comment>Background Image: Storage</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="355"/>
<location filename="../ImportDialog.cpp" line="398"/>
<source>Crop Picture...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="397"/>
<location filename="../ImportDialog.cpp" line="440"/>
<source>&amp;Crop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="398"/>
<location filename="../ImportDialog.cpp" line="441"/>
<source>Crop Picture</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="485"/>
<location filename="../ImportDialog.cpp" line="533"/>
<location filename="../ImportDialog.cpp" line="528"/>
<location filename="../ImportDialog.cpp" line="576"/>
<source>Please import a new picture first</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="490"/>
<location filename="../ImportDialog.cpp" line="500"/>
<location filename="../ImportDialog.cpp" line="533"/>
<location filename="../ImportDialog.cpp" line="543"/>
<source>Default</source>
<comment>Default as Default Profile</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="491"/>
<location filename="../ImportDialog.cpp" line="492"/>
<location filename="../ImportDialog.cpp" line="493"/>
<location filename="../ImportDialog.cpp" line="494"/>
<location filename="../ImportDialog.cpp" line="495"/>
<location filename="../ImportDialog.cpp" line="504"/>
<location filename="../ImportDialog.cpp" line="508"/>
<location filename="../ImportDialog.cpp" line="512"/>
<location filename="../ImportDialog.cpp" line="516"/>
<location filename="../ImportDialog.cpp" line="520"/>
<location filename="../ImportDialog.cpp" line="534"/>
<location filename="../ImportDialog.cpp" line="535"/>
<location filename="../ImportDialog.cpp" line="536"/>
<location filename="../ImportDialog.cpp" line="537"/>
<location filename="../ImportDialog.cpp" line="538"/>
<location filename="../ImportDialog.cpp" line="539"/>
<location filename="../ImportDialog.cpp" line="540"/>
<location filename="../ImportDialog.cpp" line="541"/>
<location filename="../ImportDialog.cpp" line="542"/>
<location filename="../ImportDialog.cpp" line="547"/>
<location filename="../ImportDialog.cpp" line="551"/>
<location filename="../ImportDialog.cpp" line="555"/>
<location filename="../ImportDialog.cpp" line="559"/>
<location filename="../ImportDialog.cpp" line="563"/>
<location filename="../ImportDialog.cpp" line="581"/>
<location filename="../ImportDialog.cpp" line="582"/>
<location filename="../ImportDialog.cpp" line="583"/>
<location filename="../ImportDialog.cpp" line="584"/>
<location filename="../ImportDialog.cpp" line="585"/>
<location filename="../ImportDialog.cpp" line="590"/>
<location filename="../ImportDialog.cpp" line="594"/>
<location filename="../ImportDialog.cpp" line="598"/>
<location filename="../ImportDialog.cpp" line="602"/>
<location filename="../ImportDialog.cpp" line="606"/>
<source>Profile %1</source>
<comment>Profile %1 as Profile 1</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="485"/>
<location filename="../ImportDialog.cpp" line="496"/>
<location filename="../ImportDialog.cpp" line="528"/>
<location filename="../ImportDialog.cpp" line="539"/>
<source>Load Settings...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="533"/>
<location filename="../ImportDialog.cpp" line="543"/>
<location filename="../ImportDialog.cpp" line="576"/>
<location filename="../ImportDialog.cpp" line="586"/>
<source>Save Settings...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="675"/>
<location filename="../ImportDialog.cpp" line="727"/>
<location filename="../ImportDialog.cpp" line="909"/>
<source>Snapmatic Avatar Zone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="675"/>
<location filename="../ImportDialog.cpp" line="727"/>
<location filename="../ImportDialog.cpp" line="909"/>
<source>Are you sure to use a square image outside of the Avatar Zone?
When you want to use it as Avatar the image will be detached!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="724"/>
<location filename="../ImportDialog.cpp" line="773"/>
<source>Select Colour...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="318"/>
<location filename="../ImportDialog.cpp" line="793"/>
<location filename="../ImportDialog.cpp" line="353"/>
<location filename="../ImportDialog.cpp" line="842"/>
<source>Background Image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="496"/>
<location filename="../ImportDialog.cpp" line="543"/>
<location filename="../ImportDialog.cpp" line="539"/>
<location filename="../ImportDialog.cpp" line="586"/>
<source>Please select your settings profile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="793"/>
<location filename="../ImportDialog.cpp" line="842"/>
<source>File</source>
<comment>Background Image: File</comment>
<translation type="unfinished"></translation>
@ -1272,8 +1309,8 @@ Press 1 for Default View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="426"/>
<location filename="../ImportDialog.cpp" line="747"/>
<location filename="../ImportDialog.cpp" line="469"/>
<location filename="../ImportDialog.cpp" line="796"/>
<location filename="../ProfileInterface.cpp" line="496"/>
<location filename="../ProfileInterface.cpp" line="497"/>
<location filename="../ProfileInterface.cpp" line="541"/>
@ -1295,40 +1332,40 @@ Press 1 for Default View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="427"/>
<location filename="../ImportDialog.cpp" line="458"/>
<location filename="../ImportDialog.cpp" line="467"/>
<location filename="../ImportDialog.cpp" line="748"/>
<location filename="../ImportDialog.cpp" line="779"/>
<location filename="../ImportDialog.cpp" line="788"/>
<location filename="../ImportDialog.cpp" line="470"/>
<location filename="../ImportDialog.cpp" line="501"/>
<location filename="../ImportDialog.cpp" line="510"/>
<location filename="../ImportDialog.cpp" line="797"/>
<location filename="../ImportDialog.cpp" line="828"/>
<location filename="../ImportDialog.cpp" line="837"/>
<source>Import</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="437"/>
<location filename="../ImportDialog.cpp" line="758"/>
<location filename="../ImportDialog.cpp" line="480"/>
<location filename="../ImportDialog.cpp" line="807"/>
<location filename="../ProfileInterface.cpp" line="516"/>
<source>All image files (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="438"/>
<location filename="../ImportDialog.cpp" line="759"/>
<location filename="../ImportDialog.cpp" line="481"/>
<location filename="../ImportDialog.cpp" line="808"/>
<location filename="../ProfileInterface.cpp" line="517"/>
<location filename="../UserInterface.cpp" line="477"/>
<source>All files (**)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="458"/>
<location filename="../ImportDialog.cpp" line="779"/>
<location filename="../ImportDialog.cpp" line="501"/>
<location filename="../ImportDialog.cpp" line="828"/>
<location filename="../ProfileInterface.cpp" line="786"/>
<source>Can&apos;t import %1 because file can&apos;t be open</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="467"/>
<location filename="../ImportDialog.cpp" line="788"/>
<location filename="../ImportDialog.cpp" line="510"/>
<location filename="../ImportDialog.cpp" line="837"/>
<location filename="../ProfileInterface.cpp" line="796"/>
<source>Can&apos;t import %1 because file can&apos;t be parsed properly</source>
<translation type="unfinished"></translation>
@ -2008,24 +2045,24 @@ Press 1 for Default View</source>
<name>SnapmaticPicture</name>
<message>
<location filename="../JsonEditorDialog.cpp" line="177"/>
<location filename="../SnapmaticPicture.cpp" line="354"/>
<location filename="../SnapmaticPicture.cpp" line="353"/>
<source>JSON is incomplete and malformed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../JsonEditorDialog.cpp" line="181"/>
<location filename="../SnapmaticPicture.cpp" line="358"/>
<location filename="../SnapmaticPicture.cpp" line="357"/>
<source>JSON is incomplete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../JsonEditorDialog.cpp" line="185"/>
<location filename="../SnapmaticPicture.cpp" line="362"/>
<location filename="../SnapmaticPicture.cpp" line="361"/>
<source>JSON is malformed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SnapmaticPicture.cpp" line="159"/>
<location filename="../SnapmaticPicture.cpp" line="154"/>
<source>PHOTO - %1</source>
<translation type="unfinished"></translation>
</message>
@ -2035,37 +2072,37 @@ Press 1 for Default View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SnapmaticPicture.cpp" line="330"/>
<location filename="../SnapmaticPicture.cpp" line="329"/>
<source>header not exists</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SnapmaticPicture.cpp" line="334"/>
<location filename="../SnapmaticPicture.cpp" line="333"/>
<source>header is malformed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SnapmaticPicture.cpp" line="338"/>
<location filename="../SnapmaticPicture.cpp" line="337"/>
<source>picture not exists (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SnapmaticPicture.cpp" line="342"/>
<location filename="../SnapmaticPicture.cpp" line="341"/>
<source>JSON not exists (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SnapmaticPicture.cpp" line="346"/>
<location filename="../SnapmaticPicture.cpp" line="345"/>
<source>title not exists (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SnapmaticPicture.cpp" line="350"/>
<location filename="../SnapmaticPicture.cpp" line="349"/>
<source>description not exists (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SnapmaticPicture.cpp" line="364"/>
<location filename="../SnapmaticPicture.cpp" line="363"/>
<source>reading file %1 because of %2</source>
<comment>Example for %2: JSON is malformed error</comment>
<translation type="unfinished"></translation>

Binary file not shown.

@ -184,27 +184,27 @@ Snapmatic Bilder und Spielständen</translation>
<translation>Snapmatic Bild Editor</translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="640"/>
<location filename="../ImportDialog.cpp" line="685"/>
<source>Overwrite Image...</source>
<translation>Bild überschreiben...</translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="642"/>
<location filename="../ImportDialog.cpp" line="687"/>
<source>Apply changes</source>
<translation>Änderungen übernehmen</translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="641"/>
<location filename="../ImportDialog.cpp" line="686"/>
<source>&amp;Overwrite</source>
<translation>&amp;Überschreiben</translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="644"/>
<location filename="../ImportDialog.cpp" line="689"/>
<source>Discard changes</source>
<translation>Änderungen verwerfen</translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="643"/>
<location filename="../ImportDialog.cpp" line="688"/>
<source>&amp;Close</source>
<translation>S&amp;chließen</translation>
</message>
@ -256,9 +256,9 @@ Snapmatic Bilder und Spielständen</translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="150"/>
<location filename="../ImportDialog.cpp" line="87"/>
<location filename="../ImportDialog.cpp" line="315"/>
<location filename="../ImportDialog.cpp" line="728"/>
<location filename="../ImportDialog.cpp" line="86"/>
<location filename="../ImportDialog.cpp" line="351"/>
<location filename="../ImportDialog.cpp" line="777"/>
<source>Background Colour: &lt;span style=&quot;color: %1&quot;&gt;%1&lt;/span&gt;</source>
<translation>Hintergrundfarbe: &lt;span style=&quot;color: %1&quot;&gt;%1&lt;/span&gt;</translation>
</message>
@ -284,8 +284,13 @@ Snapmatic Bilder und Spielständen</translation>
<translation>Hintergrundbild entfernen</translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="318"/>
<location filename="../ImportDialog.cpp" line="793"/>
<location filename="../ImportDialog.ui" line="345"/>
<source>Import as-is, don&apos;t change the picture at all, guarantee to break Snapmatic unless you know what you doing</source>
<translation>Importiere das Bild ohne Veränderungen, Snapmatic wird garantiert beschädigt wenn du nicht weißt was du tust</translation>
</message>
<message>
<location filename="../ImportDialog.cpp" line="353"/>
<location filename="../ImportDialog.cpp" line="842"/>
<source>Background Image: %1</source>
<translation>Hintergrundbild: %1</translation>
</message>
@ -300,173 +305,205 @@ Snapmatic Bilder und Spielständen</translation>
<translation>Erzwinge Farbe in Avatar Zone</translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="305"/>
<location filename="../ImportDialog.ui" line="303"/>
<source>Advanced</source>
<translation>Erweitert</translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="311"/>
<source>Resolution:</source>
<translation>Auflösung:</translation>
</message>
<message>
<location filename="../ImportDialog.ui" line="324"/>
<source>Snapmatic resolution</source>
<translation>Snapmatic Auflösung</translation>