diff --git a/ImportDialog.cpp b/ImportDialog.cpp
index c2b9d8b..e14bb00 100644
--- a/ImportDialog.cpp
+++ b/ImportDialog.cpp
@@ -16,10 +16,11 @@
* along with this program. If not, see .
*****************************************************************************/
-#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
// 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(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: %1").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();
+ }
+ }
+}
diff --git a/ImportDialog.h b/ImportDialog.h
index 28ce21e..562e34b 100644
--- a/ImportDialog.h
+++ b/ImportDialog.h
@@ -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;
diff --git a/ImportDialog.ui b/ImportDialog.ui
index c62dcd7..601e98b 100644
--- a/ImportDialog.ui
+++ b/ImportDialog.ui
@@ -7,7 +7,7 @@
0
0
516
- 512
+ 677
@@ -297,6 +297,63 @@
+ -
+
+
+ Advanced
+
+
+
-
+
+
-
+
+
+ Resolution:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Snapmatic resolution
+
+
+
+
+
+ -
+
+
-
+
+
+ Avoid compression and expand buffer instead, improves picture quality, but may break Snapmatic
+
+
+ Unlimited Buffer
+
+
+
+ -
+
+
+ Import as-is, don't change the picture at all, guarantee to break Snapmatic unless you know what you doing
+
+
+ Import as-is
+
+
+
+
+
+
+
+
-
-
diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp
index 3e52093..4070fa8 100644
--- a/ProfileInterface.cpp
+++ b/ProfileInterface.cpp
@@ -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();
diff --git a/res/gta5sync.ts b/res/gta5sync.ts
index 5ba25e5..afdcce6 100644
--- a/res/gta5sync.ts
+++ b/res/gta5sync.ts
@@ -166,27 +166,27 @@ Pictures and Savegames
ImageEditorDialog
-
+
-
+
-
+
-
+
-
+
@@ -246,9 +246,9 @@ Pictures and Savegames
-
-
-
+
+
+
@@ -265,9 +265,9 @@ Pictures and Savegames
-
-
-
+
+
+
@@ -292,170 +292,207 @@ Pictures and Savegames
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
Custom Avatar Description in SC, don't use Special Character!
-
+
Custom Picture Description in SC, don't use Special Character!
-
+
Background Image: Storage
-
+
-
+
-
+
-
-
+
+
-
-
+
+
Default as Default Profile
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
Profile %1 as Profile 1
-
-
+
+
-
-
+
+
-
+
+
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
Background Image: File
@@ -1272,8 +1309,8 @@ Press 1 for Default View
-
-
+
+
@@ -1295,40 +1332,40 @@ Press 1 for Default View
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -2008,24 +2045,24 @@ Press 1 for Default View
SnapmaticPicture
-
+
-
+
-
+
-
+
@@ -2035,37 +2072,37 @@ Press 1 for Default View
-
+
-
+
-
+
-
+
-
+
-
+
-
+
Example for %2: JSON is malformed error
diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm
index 00627a7..41f12bd 100644
Binary files a/res/gta5sync_de.qm and b/res/gta5sync_de.qm differ
diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts
index fb2996f..3780483 100644
--- a/res/gta5sync_de.ts
+++ b/res/gta5sync_de.ts
@@ -184,27 +184,27 @@ Snapmatic Bilder und Spielständen
Snapmatic Bild Editor
-
+
Bild überschreiben...
-
+
Änderungen übernehmen
-
+
&Überschreiben
-
+
Änderungen verwerfen
-
+
S&chließen
@@ -256,9 +256,9 @@ Snapmatic Bilder und Spielständen
-
-
-
+
+
+
Hintergrundfarbe: <span style="color: %1">%1</span>
@@ -284,8 +284,13 @@ Snapmatic Bilder und Spielständen
Hintergrundbild entfernen
-
-
+
+
+ Importiere das Bild ohne Veränderungen, Snapmatic wird garantiert beschädigt wenn du nicht weißt was du tust
+
+
+
+
Hintergrundbild: %1
@@ -300,173 +305,205 @@ Snapmatic Bilder und Spielständen
Erzwinge Farbe in Avatar Zone
-
+
+
+ Erweitert
+
+
+
+
+ Auflösung:
+
+
+
+
+ Snapmatic Auflösung
+
+
+
+
+ Vermeide Komprimierung und vergrößere Buffer stattdessen, verbessert Bild Qualität, aber könnte Snapmatic beschädigen
+
+
+
+
+ Unlimitierter Buffer
+
+
+
+
+ Importiere ohne Änderungen
+
+
+
Import Optionen
-
+
&Optionen
-
+
Bild importieren
-
+
&OK
-
+
Bild verwerfen
-
+
Abbre&chen
-
-
-
+
+
+
Hintergrundbild:
-
+
Neues Bild &importieren...
-
+
Bild zu&schneiden...
-
+
Einstellungen &laden...
-
+
Einstellungen &speichern...
-
+
Custom Avatar Description in SC, don't use Special Character!
Eigener Avatar
-
+
Custom Picture Description in SC, don't use Special Character!
Eigenes Bild
-
+
Background Image: Storage
Speicher
-
+
Bild zuschneiden...
-
+
Zu&schneiden
-
+
Bild zuschneiden
-
-
+
+
Bitte importiere ein neues Bild zuerst
-
-
+
+
Default as Default Profile
Standard
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
Profile %1 as Profile 1
Profil %1
-
-
+
+
Einstellungen laden...
-
-
+
+
Bitte wähle dein Einstellungsprofil aus
-
-
+
+
Einstellungen speichern...
-
+
+
Bist du sicher ein Quadrat Bild außerhalb der Avatar Zone zu verwenden?
Wenn du es als Avatar verwenden möchtest wird es abgetrennt!
-
+
+
Snapmatic Avatar Zone
-
+
Farbe auswählen...
-
+
Background Image: File
Datei
@@ -1299,8 +1336,8 @@ Drücke 1 für Standardmodus
<h4>Folgende Snapmatic Bilder wurden repariert</h4>%1
-
-
+
+
@@ -1322,12 +1359,12 @@ Drücke 1 für Standardmodus
Importieren...
-
-
-
-
-
-
+
+
+
+
+
+
Importieren
@@ -1349,15 +1386,15 @@ Drücke 1 für Standardmodus
Importfähige Dateien (%1)
-
-
+
+
Alle Bilddateien (%1)
-
-
+
+
@@ -1391,15 +1428,15 @@ Drücke 1 für Standardmodus
Fehler beim Lesen von Spielstanddatei
-
-
+
+
Kann %1 nicht importieren weil die Datei nicht geöffnet werden kann
-
-
+
+
Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann
@@ -2040,7 +2077,7 @@ Drücke 1 für Standardmodus
SnapmaticPicture
-
+
FOTO - %1
@@ -2050,56 +2087,56 @@ Drücke 1 für Standardmodus
Datei öffnen %1
-
+
Header nicht existiert
-
+
Header fehlerhaft ist
-
+
Bild nicht existiert (%1)
-
+
JSON nicht existiert (%1)
-
+
Titel nicht existiert (%1)
-
+
Beschreibung nicht existiert (%1)
-
+
Example for %2: JSON is malformed error
Datei lesen von %1 weil %2
-
+
JSON ist unvollständig und Fehlerhaft
-
+
JSON ist unvollständig
-
+
JSON ist Fehlerhaft
diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts
index ddf1da0..b0efae3 100644
--- a/res/gta5sync_en_US.ts
+++ b/res/gta5sync_en_US.ts
@@ -174,27 +174,27 @@ Pictures and Savegames
-
+
-
+
-
+
-
+
-
+
@@ -220,9 +220,9 @@ Pictures and Savegames
-
-
-
+
+
+
Background Color: <span style="color: %1">%1</span>
@@ -264,8 +264,8 @@ Pictures and Savegames
-
-
+
+
@@ -290,172 +290,209 @@ Pictures and Savegames
Force Color in Avatar Zone
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
Custom Avatar Description in SC, don't use Special Character!
-
+
Custom Picture Description in SC, don't use Special Character!
-
+
Background Image: Storage
-
+
-
+
-
+
-
-
+
+
-
-
+
+
Default as Default Profile
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
Profile %1 as Profile 1
-
-
+
+
-
-
+
+
-
-
+
+
-
+
+
-
+
+
-
+
Select Color...
-
+
Background Image: File
@@ -1292,8 +1329,8 @@ Press 1 for Default View
-
-
+
+
@@ -1315,12 +1352,12 @@ Press 1 for Default View
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1348,15 +1385,15 @@ Press 1 for Default View
-
-
+
+
-
-
+
+
@@ -1395,15 +1432,15 @@ Press 1 for Default View
-
-
+
+
-
-
+
+
@@ -2007,7 +2044,7 @@ Press 1 for Default View
SnapmaticPicture
-
+
@@ -2017,56 +2054,56 @@ Press 1 for Default View
-
+
-
+
-
+
-
+
-
+
-
+
-
+
Example for %2: JSON is malformed error
-
+
-
+
-
+
diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts
index 79be7fb..d4e8cca 100644
--- a/res/gta5sync_fr.ts
+++ b/res/gta5sync_fr.ts
@@ -184,27 +184,27 @@ et les fichiers de sauvegarde de Grand Theft Auto V
Éditeur d'images Snapmatic
-
+
Remplacer l'image...
-
+
Appliquer les modifications
-
+
&Remplacer
-
+
Annuler les modifications
-
+
&Fermer
@@ -256,9 +256,9 @@ et les fichiers de sauvegarde de Grand Theft Auto V
-
-
-
+
+
+
Couleur de fond : <span style="color: %1">%1</span>
@@ -284,8 +284,13 @@ et les fichiers de sauvegarde de Grand Theft Auto V
Supprimer l'image de fond
-
-
+
+
+
+
+
+
+
Image de fond : %1
@@ -300,173 +305,205 @@ et les fichiers de sauvegarde de Grand Theft Auto V
Forcer la couleur dans la Zone d'Avatar
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Options d'importation
-
+
&Options
-
+
Importer l'image
-
+
&OK
-
+
Supprimer l'image
-
+
A&nnuler
-
-
-
+
+
+
Image de fond :
-
+
&Importer une nouvelle image...
-
+
&Rogner l'image...
-
+
&Charger les paramètres...
-
+
&Sauvegarder les paramètres...
-
+
Custom Avatar Description in SC, don't use Special Character!
Avatar personnalisé
-
+
Custom Picture Description in SC, don't use Special Character!
Image personnalisé
-
+
Background Image: Storage
Stockage
-
+
Rogner l'image...
-
+
&Rogner
-
+
Rogner l'image
-
-
+
+
Veuillez d'abord importer une nouvelle image
-
-
+
+
Default as Default Profile
Défaut
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
Profile %1 as Profile 1
Profil %1
-
-
+
+
Charger les paramètres...
-
-
+
+
Veuillez choisir votre profil de paramètres
-
-
+
+
Sauvegarder les paramètres...
-
+
+
Êtes-vous sûr d'utiliser une image carrée en dehors de la Zone d'Avatar ?
Si vous l'utilisez comme Avatar, l'image sera détachée !
-
+
+
Zone d'Avatar Snapmatic
-
+
Choisir une couleur...
-
+
Background Image: File
Fichier
@@ -1310,8 +1347,8 @@ Appuyer sur 1 pour le mode par défaut
<h4>Les Snapmatic suivants ont été répaés</h4>%1
-
-
+
+
@@ -1333,12 +1370,12 @@ Appuyer sur 1 pour le mode par défaut
Importer...
-
-
-
-
-
-
+
+
+
+
+
+
Importer
@@ -1355,15 +1392,15 @@ Appuyer sur 1 pour le mode par défaut
Photos Snapmatic (PGTA*)
-
-
+
+
Toutes les images (%1)
-
-
+
+
@@ -1409,15 +1446,15 @@ Appuyer sur 1 pour le mode par défaut
Impossible de lire le fichier de sauvegarde
-
-
+
+
Impossible d'importer %1, le fichier ne peut pas être ouvert
-
-
+
+
Impossible d'importer %1, le fichier ne peut pas être parsé correctement
@@ -2043,7 +2080,7 @@ Appuyer sur 1 pour le mode par défaut
SnapmaticPicture
-
+
PHOTO - %1
@@ -2053,56 +2090,56 @@ Appuyer sur 1 pour le mode par défaut
ouverture du fichier %1
-
+
les headers n'existent pas
-
+
les headers sont incorrects
-
+
l'image n'existe pas (%1)
-
+
le JSON n'existe pas (%1)
-
+
le titre n'existe pas (%1)
-
+
la description n'existe pas (%1)
-
+
Example for %2: JSON is malformed error
lecture du fichier %1 : %2
-
+
JSON incomplet ou incorrect
-
+
JSON incomplet
-
+
JSON incorrect
diff --git a/res/gta5sync_ko.ts b/res/gta5sync_ko.ts
index 53166ac..fb4ec79 100644
--- a/res/gta5sync_ko.ts
+++ b/res/gta5sync_ko.ts
@@ -176,27 +176,27 @@ Pictures and Savegames
ImageEditorDialog
-
+
이미지 덮어쓰기...
-
+
변경 사항 적용
-
+
덮어쓰기(&O)
-
+
변경 사항 무시
-
+
닫기(&C)
@@ -256,9 +256,9 @@ Pictures and Savegames
-
-
-
+
+
+
배경 색상: <span style="color: %1">%1</span>
@@ -275,9 +275,9 @@ Pictures and Savegames
-
-
-
+
+
+
배경 이미지:
@@ -302,57 +302,92 @@ Pictures and Savegames
아바타 구역에 색상을 적용합니다
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
가져오기 옵션
-
+
옵션(&O)
-
+
사진 가져오기
-
+
확인(&O)
-
+
사진 삭제
-
+
취소(&C)
-
+
새로운 사진 가져오기(&I)...
-
+
사진 자르기(&C)...
-
+
설정 불러오기(&L)...
-
+
설정 저장(&S)...
-
+
Custom Avatar Description in SC, don't use Special Character!
@@ -360,7 +395,7 @@ Pictures and Savegames
사용자 지정 아바타
-
+
Custom Picture Description in SC, don't use Special Character!
@@ -368,110 +403,112 @@ Pictures and Savegames
사용자 지정 사진
-
-
+
+
배경 이미지: %1
-
+
Background Image: Storage
배경 이미지: 저장됨
저장됨
-
+
사진 자르기...
-
+
자르기(&C)
-
+
사진 자르기
-
-
+
+
설정 불러오기...
-
-
+
+
먼저 새 사진을 가져오세요
-
-
+
+
Default as Default Profile
기본 프로필로 기본 설정
기본
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
Profile %1 as Profile 1
%1을 프로필 1로 지정합니다.
프로필 %1
-
-
+
+
설정 프로필을 선택하세요
-
-
+
+
설정 저장...
-
+
+
스낵매틱 아바타 영역
-
+
+
아바타 구역 밖에서 네모난 이미지를 정말 사용합니까?
아바타로 사용하려는 경우 이미지가 분리됩니다!
-
+
색상 선택...
-
+
Background Image: File
배경 이미지: 파일
@@ -1304,8 +1341,8 @@ Press 1 for Default View
%2 파일 중 %1 파일을 내보냅니다
-
-
+
+
@@ -1327,40 +1364,40 @@ Press 1 for Default View
가져오기...
-
-
-
-
-
-
+
+
+
+
+
+
가져오기
-
-
+
+
모든 이미지 파일 (%1)
-
-
+
+
모든 파일 (**)
-
-
+
+
파일을 열 수 없으므로 %1을 가져올 수 없습니다
-
-
+
+
파일을 구문 분석할 수 없으므로 %1을 가져올 수 없습니다
@@ -2065,24 +2102,24 @@ Press 1 for Default View
SnapmaticPicture
-
+
JSON이 불안정하고 형식이 잘못되었습니다
-
+
JSON이 불안정합니다
-
+
잘못된 JSON 형식
-
+
사진 - %1
@@ -2092,37 +2129,37 @@ Press 1 for Default View
파일 열기 %1
-
+
헤더가 존재하지 않습니다
-
+
헤더의 형식이 잘못되었습니다
-
+
사진이 존재하지 않습니다. (%1)
-
+
JSON이 존재하지 않습니다. (%1)
-
+
제목이 존재하지 않습니다. (%1)
-
+
설명이 존재하지 않습니다. (%1)
-
+
Example for %2: JSON is malformed error
%2의 예: JSON이 잘못된 형식입니다
diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts
index dec45db..29dff3e 100644
--- a/res/gta5sync_ru.ts
+++ b/res/gta5sync_ru.ts
@@ -188,27 +188,27 @@ Pictures and Savegames
Редактор картинок Snapmatic
-
+
Перезаписать картинку...
-
+
Применить изменения
-
+
&Перезаписать
-
+
Отменить изменения
-
+
&Закрыть
@@ -260,9 +260,9 @@ Pictures and Savegames
-
-
-
+
+
+
Цвет фона: <span style="color: %1">%1</span>
@@ -288,8 +288,13 @@ Pictures and Savegames
Убрать фоновую картинку
-
-
+
+
+
+
+
+
+
Фоновая картинка: %1
@@ -306,32 +311,62 @@ Pictures and Savegames
Задать цвет в зоне аватарки
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Опции импорта
-
+
&Опции
-
+
Импортировать картинку
-
+
&ОК
-
+
Отклонить картинку
-
+
Я не уверен насчет горячих клавиш...
@@ -339,141 +374,143 @@ Pictures and Savegames
-
-
-
+
+
+
Фоновая картинка:
-
+
&Импортировать картинку...
-
+
Об&резать картинку...
-
+
&Загрузить настройки...
-
+
&Сохранить настройки...
-
+
Custom Avatar Description in SC, don't use Special Character!
Свой Аватар
-
+
Custom Picture Description in SC, don't use Special Character!
Своя Картинка
-
+
Background Image: Storage
Хранилище
-
+
Обрезать картинку...
-
+
Об&резать
-
+
Обрезать картинку
-
-
+
+
Импортируй сначала новую картинку
-
-
+
+
Default as Default Profile
По умолчанию
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
Profile %1 as Profile 1
Профиль %1
-
-
+
+
Загрузить настройки...
-
-
+
+
Пожалуйста, выбери профиль для настроек
-
-
+
+
Сохранить настройки...
-
+
+
Ты точно хочешь использовать квадратное изображение вне зоны аватарки? Если это аватар, то изображение будет обрезано!
-
+
+
Зона Snapmatic Аватарки
-
+
Выбрать цвет...
-
+
Background Image: File
Файл
@@ -1311,8 +1348,8 @@ Press 1 for Default View
<h4>Нижеследующие картинки Snapmatic были восстановлены</h4>%1
-
-
+
+
@@ -1334,12 +1371,12 @@ Press 1 for Default View
Импортировать...
-
-
-
-
-
-
+
+
+
+
+
+
Импортировать
@@ -1356,8 +1393,8 @@ Press 1 for Default View
Картинка Snapmatic (PGTA*)
-
-
+
+
@@ -1408,22 +1445,22 @@ Press 1 for Default View
Файлы для импорта (%1)
-
-
+
+
Все файлы изображений (%1)
-
-
+
+
Не удалось открыть %1, файл не может быть открыт
-
-
+
+
Не получилось импортировать %1, файл не может быть правильно обработан
@@ -2055,7 +2092,7 @@ Press 1 for Default View
SnapmaticPicture
-
+
ФОТО - %1
@@ -2065,56 +2102,56 @@ Press 1 for Default View
Открыть файл %1
-
+
Отсутствует шапка (header)
-
+
Шапка (header) повреждена
-
+
Картинки не существует (%1)
-
+
JSON не существует (%1)
-
+
Заголовок отсутствует (%1)
-
+
Описание отсутствует (%1)
-
+
Example for %2: JSON is malformed error
Чтение из файла %1 из-за %2
-
+
JSON не полный и повреждён
-
+
JSON частично отсутствует
-
+
JSON повреждён
diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts
index 091be8c..8ce5730 100644
--- a/res/gta5sync_uk.ts
+++ b/res/gta5sync_uk.ts
@@ -179,27 +179,27 @@ Pictures and Savegames
ImageEditorDialog
-
+
Перезаписати зображення...
-
+
Застосувати зміни
-
+
&Перезаписати
-
+
Скасувати зміни
-
+
&Закрити
@@ -259,9 +259,9 @@ Pictures and Savegames
-
-
-
+
+
+
Фоновий колір: <span style="color: %1">%1</span>
@@ -278,9 +278,9 @@ Pictures and Savegames
-
-
-
+
+
+
Фонове зображення:
@@ -305,171 +305,208 @@ Pictures and Savegames
Примусовий колір в зоні Аватару
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Параметри імпорту
-
+
&Параметри
-
+
Імпортувати зображення
-
+
&OK
-
+
Відхилити зображення
-
+
&Скасувати
-
+
&Імпортувати нове зображення...
-
+
&Обрізати зображення...
-
+
&Завантажити параметри...
-
+
&Зберегти параметри...
-
+
Custom Avatar Description in SC, don't use Special Character!
Користувацький Аватар
-
+
Custom Picture Description in SC, don't use Special Character!
Користувацьке Зображення
-
+
Background Image: Storage
Зберігання
-
+
Обрізати зображення...
-
+
&Обрізати
-
+
Обрізати зображення
-
-
+
+
Спершу імпортуйте нове зображення
-
-
+
+
Default as Default Profile
Стандартний
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
Profile %1 as Profile 1
Профіль %1
-
-
+
+
Завантажити параметри...
-
-
+
+
Зберегти параметри...
-
+
+
Зона Snapmatic Аватару
-
+
+
Ви впевнені, що будете використовувати квадратне зображення поза зоною аватара?
Якщо ви хочете використовувати його як Аватар, зображення буде відокремлено!
-
+
Вибір кольору...
-
-
+
+
Фонове зображення: %1
-
-
+
+
Будь ласка, виберіть свій профіль налаштувань
-
+
Background Image: File
Файл
@@ -1294,8 +1331,8 @@ Press 1 for Default View
Експортується файл %1 з %2 файлів
-
-
+
+
@@ -1317,40 +1354,40 @@ Press 1 for Default View
Імпортування...
-
-
-
-
-
-
+
+
+
+
+
+
Імпорт
-
-
+
+
Файли зображень (%1)
-
-
+
+
Усі файли (**)
-
-
+
+
Неможливо імпортувати %1, оскільки файл не може бути відкритий
-
-
+
+
Неможливо імпортувати %1, оскільки файл неможливо розібрати правильно
@@ -2046,24 +2083,24 @@ Press 1 for Default View
SnapmaticPicture
-
+
JSON неповний та неправильний
-
+
JSON неповний
-
+
JSON неправильний
-
+
ФОТО - %1
@@ -2073,37 +2110,37 @@ Press 1 for Default View
відкрити файл%1
-
+
заголовок не існує
-
+
заголовок неправильний
-
+
зображення не існує (%1)
-
+
JSON не існує (%1)
-
+
заголовок не існує (%1)
-
+
опис не існує (%1)
-
+
Example for %2: JSON is malformed error
читання файлу %1 тому що %2
diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts
index 2f0a58f..1ed0c36 100644
--- a/res/gta5sync_zh_TW.ts
+++ b/res/gta5sync_zh_TW.ts
@@ -175,27 +175,27 @@ Pictures and Savegames
ImageEditorDialog
-
+
修改圖片...
-
+
套用變更
-
+
修改(&O)
-
+
捨棄變更
-
+
關閉(&C)
@@ -255,9 +255,9 @@ Pictures and Savegames
-
-
-
+
+
+
背景顏色: <span style="color: %1">%1</span>
@@ -274,9 +274,9 @@ Pictures and Savegames
-
-
-
+
+
+
背景圖片:
@@ -301,170 +301,207 @@ Pictures and Savegames
強制在大頭貼區域使用顏色
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
匯入選項
-
+
選項(&O)
-
+
匯入圖片
-
+
確定(&O)
-
+
捨棄圖片
-
+
取消(&C)
-
+
匯入新圖片(&I)...
-
+
裁剪圖片(&C)...
-
+
載入設定(&L)...
-
+
儲存設定(&S)...
-
+
Custom Avatar Description in SC, don't use Special Character!
自訂大頭貼
-
+
Custom Picture Description in SC, don't use Special Character!
自訂圖片
-
+
Background Image: Storage
儲存
-
+
裁剪圖片...
-
+
裁剪(&C)
-
+
裁剪圖片
-
-
+
+
請先匯入新圖片
-
-
+
+
Default as Default Profile
預設
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
Profile %1 as Profile 1
設定檔 %1
-
-
+
+
載入設定...
-
-
+
+
儲存設定...
-
+
+
Snapmatic 大頭貼區域
-
+
+
你確定要在大頭貼區域以外的地方使用方形圖片嗎? 作為大頭貼的圖片將被分離!
-
+
選擇顏色...
-
-
+
+
背景圖片: %1
-
-
+
+
請選擇設定檔
-
+
Background Image: File
文件
@@ -1288,8 +1325,8 @@ Press 1 for Default View
匯出檔案中 %1 共 %2 個檔案
-
-
+
+
@@ -1311,40 +1348,40 @@ Press 1 for Default View
匯入...
-
-
-
-
-
-
+
+
+
+
+
+
匯入
-
-
+
+
所有圖片 (%1)
-
-
+
+
所有檔案 (**)
-
-
+
+
無法匯入 %1,因為檔案無法開啟
-
-
+
+
無法匯入 %1,因為檔案無法正確解析
@@ -2036,24 +2073,24 @@ Press 1 for Default View
SnapmaticPicture
-
+
JSON 不完整和異常
-
+
JSON 不完整
-
+
JSON 異常
-
+
照片 - %1
@@ -2063,37 +2100,37 @@ Press 1 for Default View
開啟檔案 - %1
-
+
標頭不存在
-
+
標頭異常
-
+
圖片不存在 (%1)
-
+
JSON 不存在 (%1)
-
+
標題不存在 (%1)
-
+
描述不存在 (%1)
-
+
Example for %2: JSON is malformed error
讀取檔案 %1 失敗,因為 %2