diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp
index a6a564f..f1e4f99 100644
--- a/JsonEditorDialog.cpp
+++ b/JsonEditorDialog.cpp
@@ -70,9 +70,18 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) :
#if QT_VERSION >= 0x050200
ui->txtJSON->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
+#else
+ QFont jsonFont = ui->txtJSON->font();
+ jsonFont.setStyleHint(QFont::Monospace);
+ jsonFont.setFixedPitch(true);
+ ui->txtJSON->setFont(jsonFont);
#endif
QFontMetrics fontMetrics(ui->txtJSON->font());
+#if QT_VERSION >= 0x050B00
+ ui->txtJSON->setTabStopDistance(fontMetrics.horizontalAdvance(" "));
+#else
ui->txtJSON->setTabStopWidth(fontMetrics.width(" "));
+#endif
QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonCode.toUtf8());
ui->txtJSON->setStyleSheet("QPlainTextEdit{background-color: rgb(46, 47, 48); color: rgb(238, 231, 172);}");
diff --git a/MapLocationDialog.cpp b/MapLocationDialog.cpp
index 7c1b7ba..730818b 100644
--- a/MapLocationDialog.cpp
+++ b/MapLocationDialog.cpp
@@ -60,40 +60,10 @@ MapLocationDialog::~MapLocationDialog()
void MapLocationDialog::drawPointOnMap(double xpos_d, double ypos_d)
{
- qreal screenRatio = AppEnv::screenRatio();
- qreal screenRatioPR = AppEnv::screenRatioPR();
- int pointMakerSize = 8 * screenRatio * screenRatioPR;
- QPixmap pointMakerPixmap = IconLoader::loadingPointmakerIcon().pixmap(QSize(pointMakerSize, pointMakerSize));
- QSize mapPixelSize = QSize(width() * screenRatioPR, height() * screenRatioPR);
-
- int pointMakerHalfSize = pointMakerSize / 2;
- long xpos_ms = qRound(xpos_d);
- long ypos_ms = qRound(ypos_d);
- double xpos_ma = xpos_ms + 4000;
- double ypos_ma = ypos_ms + 4000;
- double xrat = (double)mapPixelSize.width() / 10000;
- double yrat = (double)mapPixelSize.height() / 12000;
- long xpos_mp = qRound(xpos_ma * xrat);
- long ypos_mp = qRound(ypos_ma * yrat);
- long xpos_pr = xpos_mp - pointMakerHalfSize;
- long ypos_pr = ypos_mp + pointMakerHalfSize;
-
- QPixmap mapPixmap(mapPixelSize);
- QPainter mapPainter(&mapPixmap);
- mapPainter.drawPixmap(0, 0, mapPixelSize.width(), mapPixelSize.height(), QPixmap(":/img/mappreview.jpg").scaled(mapPixelSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
- mapPainter.drawPixmap(xpos_pr, mapPixelSize.height() - ypos_pr, pointMakerSize, pointMakerSize, pointMakerPixmap);
- mapPainter.end();
-#if QT_VERSION >= 0x050600
- mapPixmap.setDevicePixelRatio(screenRatioPR);
-#endif
-
- QPalette backgroundPalette;
- backgroundPalette.setBrush(backgroundRole(), QBrush(mapPixmap));
- setPalette(backgroundPalette);
-
+ ui->labPos->setText(tr("X: %1\nY: %2", "X and Y position").arg(QString::number(xpos_d), QString::number(ypos_d)));
xpos_new = xpos_d;
ypos_new = ypos_d;
- ui->labPos->setText(tr("X: %1\nY: %2", "X and Y position").arg(QString::number(xpos_d), QString::number(ypos_d)));
+ repaint();
}
void MapLocationDialog::on_cmdChange_clicked()
@@ -139,6 +109,48 @@ void MapLocationDialog::updatePosFromEvent(int x, int y)
drawPointOnMap(xpos_fp, ypos_fp);
}
+void MapLocationDialog::paintEvent(QPaintEvent *ev)
+{
+ QPainter painter(this);
+ qreal screenRatio = AppEnv::screenRatio();
+ qreal screenRatioPR = AppEnv::screenRatioPR();
+
+ // Paint Map
+ QSize mapPixelSize = QSize(width() * screenRatioPR, height() * screenRatioPR);
+ painter.drawPixmap(0, 0, width(), height(), QPixmap(":/img/mappreview.jpg").scaled(mapPixelSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+
+ // Paint Marker
+ int pointMarkerSize = 8 * screenRatio;
+ int pointMarkerHalfSize = pointMarkerSize / 2;
+ long xpos_ms = qRound(xpos_new);
+ long ypos_ms = qRound(ypos_new);
+ double xpos_ma = xpos_ms + 4000;
+ double ypos_ma = ypos_ms + 4000;
+ double xrat = (double)width() / 10000;
+ double yrat = (double)height() / 12000;
+ long xpos_mp = qRound(xpos_ma * xrat);
+ long ypos_mp = qRound(ypos_ma * yrat);
+ long xpos_pr;
+ long ypos_pr;
+ if (screenRatioPR != 1) {
+#ifdef GTA5SYNC_WIN
+ xpos_pr = xpos_mp - pointMarkerHalfSize;
+ ypos_pr = ypos_mp + pointMarkerHalfSize;
+#else
+ xpos_pr = xpos_mp - pointMarkerHalfSize + screenRatioPR;
+ ypos_pr = ypos_mp + pointMarkerHalfSize - screenRatioPR;
+#endif
+ }
+ else {
+ xpos_pr = xpos_mp - pointMarkerHalfSize;
+ ypos_pr = ypos_mp + pointMarkerHalfSize;
+ }
+ QPixmap mapMarkerPixmap = IconLoader::loadingPointmakerIcon().pixmap(QSize(pointMarkerSize, pointMarkerSize));
+ painter.drawPixmap(xpos_pr, height() - ypos_pr, pointMarkerSize, pointMarkerSize, mapMarkerPixmap);
+
+ QDialog::paintEvent(ev);
+}
+
void MapLocationDialog::mouseMoveEvent(QMouseEvent *ev)
{
if (!changeMode) { ev->ignore(); }
diff --git a/MapLocationDialog.h b/MapLocationDialog.h
index f499601..46d91fe 100644
--- a/MapLocationDialog.h
+++ b/MapLocationDialog.h
@@ -39,6 +39,7 @@ public:
~MapLocationDialog();
protected:
+ void paintEvent(QPaintEvent *ev);
void mouseMoveEvent(QMouseEvent *ev);
void mouseReleaseEvent(QMouseEvent *ev);
diff --git a/MapLocationDialog.ui b/MapLocationDialog.ui
index cd46742..06da9ed 100644
--- a/MapLocationDialog.ui
+++ b/MapLocationDialog.ui
@@ -25,6 +25,11 @@
Snapmatic Map Viewer
+
+ QDialog#MapLocationDialog {
+ background-color: transparent;
+}
+
0
diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp
index fd1fdac..951566f 100644
--- a/OptionsDialog.cpp
+++ b/OptionsDialog.cpp
@@ -136,24 +136,33 @@ OptionsDialog::~OptionsDialog()
void OptionsDialog::setupTreeWidget()
{
- for (QString playerIDStr : profileDB->getPlayers())
- {
- bool ok;
- int playerID = playerIDStr.toInt(&ok);
- if (ok)
+ const QStringList players = profileDB->getPlayers();
+ if (players.length() != 0) {
+ QStringList::const_iterator it = players.constBegin();
+ QStringList::const_iterator end = players.constEnd();
+ while (it != end)
{
- QString playerName = profileDB->getPlayerName(playerID);
+ bool ok;
+ int playerID = it->toInt(&ok);
+ if (ok)
+ {
+ QString playerName = profileDB->getPlayerName(playerID);
- QStringList playerTreeViewList;
- playerTreeViewList += playerIDStr;
- playerTreeViewList += playerName;
+ QStringList playerTreeViewList;
+ playerTreeViewList += *it;
+ playerTreeViewList += playerName;
- QTreeWidgetItem *playerItem = new QTreeWidgetItem(playerTreeViewList);
- ui->twPlayers->addTopLevelItem(playerItem);
- playerItems += playerItem;
+ QTreeWidgetItem *playerItem = new QTreeWidgetItem(playerTreeViewList);
+ ui->twPlayers->addTopLevelItem(playerItem);
+ playerItems += playerItem;
+ }
+ it++;
}
+ ui->twPlayers->sortItems(1, Qt::AscendingOrder);
+ }
+ else {
+ ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabPlayers));
}
- ui->twPlayers->sortItems(1, Qt::AscendingOrder);
}
void OptionsDialog::setupLanguageBox()
@@ -362,6 +371,8 @@ void OptionsDialog::applySettings()
#if QT_VERSION >= 0x050200
settings->setValue("NavigationBar", ui->cbSnapmaticNavigationBar->isChecked());
#endif
+#else
+ settings->setValue("NavigationBar", ui->cbSnapmaticNavigationBar->isChecked());
#endif
settings->endGroup();
@@ -722,8 +733,9 @@ void OptionsDialog::setupSnapmaticPictureViewer()
ui->gbSnapmaticPictureViewer->setVisible(false);
#endif
#else
- ui->cbSnapmaticNavigationBar->setVisible(false);
- ui->gbSnapmaticPictureViewer->setVisible(false);
+ settings->beginGroup("Interface");
+ ui->cbSnapmaticNavigationBar->setChecked(settings->value("NavigationBar", true).toBool());
+ settings->endGroup();
#endif
}
diff --git a/PictureDialog.cpp b/PictureDialog.cpp
index c6225ac..bddb82c 100644
--- a/PictureDialog.cpp
+++ b/PictureDialog.cpp
@@ -135,12 +135,15 @@ void PictureDialog::setupPictureDialog()
smpic = nullptr;
crewStr = "";
+ // Get Snapmatic Resolution
+ QSize snapmaticResolution = SnapmaticPicture::getSnapmaticResolution();
+
// Avatar area
qreal screenRatio = AppEnv::screenRatio();
qreal screenRatioPR = AppEnv::screenRatioPR();
if (screenRatio != 1 || screenRatioPR != 1)
{
- avatarAreaPicture = QImage(":/img/avatararea.png").scaledToHeight(536 * screenRatio * screenRatioPR, Qt::FastTransformation);
+ avatarAreaPicture = QImage(":/img/avatararea.png").scaledToHeight(snapmaticResolution.height() * screenRatio * screenRatioPR, Qt::FastTransformation);
}
else
{
@@ -151,7 +154,7 @@ void PictureDialog::setupPictureDialog()
avatarSize = 470;
// DPI calculation (picture)
- ui->labPicture->setFixedSize(960 * screenRatio, 536 * screenRatio);
+ ui->labPicture->setFixedSize(snapmaticResolution.width() * screenRatio, snapmaticResolution.height() * screenRatio);
ui->labPicture->setFocusPolicy(Qt::StrongFocus);
ui->labPicture->setScaledContents(true);
@@ -199,8 +202,8 @@ void PictureDialog::setupPictureDialog()
ui->jsonLayout->setContentsMargins(4 * screenRatio, 10 * screenRatio, 4 * screenRatio, 4 * screenRatio);
// Pre-adapt window for DPI
- setFixedWidth(960 * screenRatio);
- setFixedHeight(536 * screenRatio);
+ setFixedWidth(snapmaticResolution.width() * screenRatio);
+ setFixedHeight(snapmaticResolution.height() * screenRatio);
}
PictureDialog::~PictureDialog()
@@ -216,6 +219,15 @@ PictureDialog::~PictureDialog()
delete layout()->menuBar();
}
#endif
+#else
+ if (naviEnabled)
+ {
+ for (QObject *obj : layout()->menuBar()->children())
+ {
+ delete obj;
+ }
+ delete layout()->menuBar();
+ }
#endif
for (QObject *obj : manageMenu->children())
{
@@ -236,18 +248,31 @@ void PictureDialog::closeEvent(QCloseEvent *ev)
void PictureDialog::addPreviousNextButtons()
{
- // Windows Vista additions
#ifdef GTA5SYNC_WIN
#if QT_VERSION >= 0x050200
QToolBar *uiToolbar = new QToolBar("Picture Toolbar", this);
uiToolbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
- uiToolbar->setObjectName("uiToolbar");
+ uiToolbar->setObjectName("UiToolbar");
uiToolbar->addAction(QIcon(":/img/back.svgz"), "", this, SLOT(previousPictureRequestedSlot()));
uiToolbar->addAction(QIcon(":/img/next.svgz"), "", this, SLOT(nextPictureRequestedSlot()));
layout()->setMenuBar(uiToolbar);
-
naviEnabled = true;
#endif
+#else
+ QToolBar *uiToolbar = new QToolBar("Picture Toolbar", this);
+#if QT_VERSION < 0x050600
+ qreal screenRatio = AppEnv::screenRatio();
+ if (screenRatio != 1) {
+ QSize iconSize = uiToolbar->iconSize();
+ uiToolbar->setIconSize(QSize(iconSize.width() * screenRatio, iconSize.height() * screenRatio));
+ }
+#endif
+ uiToolbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ uiToolbar->setObjectName("UiToolbar");
+ uiToolbar->addAction(QIcon(":/img/back.svgz"), "", this, SLOT(previousPictureRequestedSlot()));
+ uiToolbar->addAction(QIcon(":/img/next.svgz"), "", this, SLOT(nextPictureRequestedSlot()));
+ layout()->setMenuBar(uiToolbar);
+ naviEnabled = true;
#endif
}
@@ -368,7 +393,11 @@ void PictureDialog::resizeEvent(QResizeEvent *event)
void PictureDialog::adaptNewDialogSize(QSize newLabelSize)
{
Q_UNUSED(newLabelSize)
+#if QT_VERSION >= 0x050F00
+ int newDialogHeight = SnapmaticPicture::getSnapmaticResolution().height();
+#else
int newDialogHeight = (ui->labPicture->pixmap()->height() / AppEnv::screenRatioPR());
+#endif
newDialogHeight = newDialogHeight + ui->jsonFrame->height();
if (naviEnabled) newDialogHeight = newDialogHeight + layout()->menuBar()->height();
setMaximumSize(width(), newDialogHeight);
@@ -686,10 +715,11 @@ void PictureDialog::renderPicture()
{
if (overlayEnabled)
{
- QPixmap shownImagePixmap(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR);
+ QSize snapmaticResolution = SnapmaticPicture::getSnapmaticResolution();
+ QPixmap shownImagePixmap(snapmaticResolution.width() * screenRatio * screenRatioPR, snapmaticResolution.height() * screenRatio * screenRatioPR);
shownImagePixmap.fill(Qt::transparent);
QPainter shownImagePainter(&shownImagePixmap);
- shownImagePainter.drawImage(0, 0, snapmaticPicture.scaled(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ shownImagePainter.drawImage(0, 0, snapmaticPicture.scaled(snapmaticResolution.width() * screenRatio * screenRatioPR, snapmaticResolution.height() * screenRatio * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
shownImagePainter.drawImage(3 * screenRatio * screenRatioPR, 3 * screenRatio * screenRatioPR, overlayTempImage);
shownImagePainter.end();
#if QT_VERSION >= 0x050600
@@ -699,10 +729,11 @@ void PictureDialog::renderPicture()
}
else
{
- QPixmap shownImagePixmap(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR);
+ QSize snapmaticResolution = SnapmaticPicture::getSnapmaticResolution();
+ QPixmap shownImagePixmap(snapmaticResolution.width() * screenRatio * screenRatioPR, snapmaticResolution.height() * screenRatio * screenRatioPR);
shownImagePixmap.fill(Qt::transparent);
QPainter shownImagePainter(&shownImagePixmap);
- shownImagePainter.drawImage(0, 0, snapmaticPicture.scaled(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ shownImagePainter.drawImage(0, 0, snapmaticPicture.scaled(snapmaticResolution.width() * screenRatio * screenRatioPR, snapmaticResolution.height() * screenRatio * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
shownImagePainter.end();
#if QT_VERSION >= 0x050600
shownImagePixmap.setDevicePixelRatio(screenRatioPR);
@@ -713,15 +744,16 @@ void PictureDialog::renderPicture()
else
{
// Generating Avatar Preview
- QPixmap avatarPixmap(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR);
+ QSize snapmaticResolution = SnapmaticPicture::getSnapmaticResolution();
+ QPixmap avatarPixmap(snapmaticResolution.width() * screenRatio * screenRatioPR, snapmaticResolution.height() * screenRatio * screenRatioPR);
QPainter snapPainter(&avatarPixmap);
QFont snapPainterFont;
snapPainterFont.setPixelSize(12 * screenRatio * screenRatioPR);
- snapPainter.drawImage(0, 0, snapmaticPicture.scaled(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ snapPainter.drawImage(0, 0, snapmaticPicture.scaled(snapmaticResolution.width() * screenRatio * screenRatioPR, snapmaticResolution.height() * screenRatio * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
snapPainter.drawImage(0, 0, avatarAreaPicture);
snapPainter.setPen(QColor::fromRgb(255, 255, 255, 255));
snapPainter.setFont(snapPainterFont);
- snapPainter.drawText(QRect(3 * screenRatio * screenRatioPR, 3 * screenRatio * screenRatioPR, 140 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR), Qt::AlignLeft | Qt::TextWordWrap, tr("Avatar Preview Mode\nPress 1 for Default View"));
+ snapPainter.drawText(QRect(3 * screenRatio * screenRatioPR, 3 * screenRatio * screenRatioPR, 140 * screenRatio * screenRatioPR, snapmaticResolution.height() * screenRatio * screenRatioPR), Qt::AlignLeft | Qt::TextWordWrap, tr("Avatar Preview Mode\nPress 1 for Default View"));
snapPainter.end();
#if QT_VERSION >= 0x050600
avatarPixmap.setDevicePixelRatio(screenRatioPR);
diff --git a/PlayerListDialog.cpp b/PlayerListDialog.cpp
index 2f7c758..3656d24 100644
--- a/PlayerListDialog.cpp
+++ b/PlayerListDialog.cpp
@@ -73,12 +73,32 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile
// Set Icon for Manage Buttons
if (QIcon::hasThemeIcon("go-previous") && QIcon::hasThemeIcon("go-next") && QIcon::hasThemeIcon("list-add"))
{
+#if QT_VERSION < 0x050600
+ qreal screenRatio = AppEnv::screenRatio();
+ if (screenRatio != 1) {
+ QSize iconSize = ui->cmdMakeAv->iconSize();
+ iconSize = QSize(iconSize.width() * screenRatio, iconSize.height() * screenRatio);
+ ui->cmdMakeAv->setIconSize(iconSize);
+ ui->cmdMakeSe->setIconSize(iconSize);
+ ui->cmdMakeAd->setIconSize(iconSize);
+ }
+#endif
ui->cmdMakeAv->setIcon(QIcon::fromTheme("go-previous"));
ui->cmdMakeSe->setIcon(QIcon::fromTheme("go-next"));
ui->cmdMakeAd->setIcon(QIcon::fromTheme("list-add"));
}
else
{
+#if QT_VERSION < 0x050600
+ qreal screenRatio = AppEnv::screenRatio();
+ if (screenRatio != 1) {
+ QSize iconSize = ui->cmdMakeAv->iconSize();
+ iconSize = QSize(iconSize.width() * screenRatio, iconSize.height() * screenRatio);
+ ui->cmdMakeAv->setIconSize(iconSize);
+ ui->cmdMakeSe->setIconSize(iconSize);
+ ui->cmdMakeAd->setIconSize(iconSize);
+ }
+#endif
ui->cmdMakeAv->setIcon(QIcon(":/img/back.svgz"));
ui->cmdMakeSe->setIcon(QIcon(":/img/next.svgz"));
ui->cmdMakeAd->setIcon(QIcon(":/img/add.svgz"));
diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp
index 6af7fbd..0049c8b 100644
--- a/ProfileInterface.cpp
+++ b/ProfileInterface.cpp
@@ -264,7 +264,11 @@ void ProfileInterface::insertSnapmaticIPI(QWidget *widget)
QStringList widgetsKeyList = widgets.values();
QStringList pictureKeyList = widgetsKeyList.filter("PIC", Qt::CaseSensitive);
#if QT_VERSION >= 0x050600
+#if QT_VERSION >= 0x050F00
+ std::sort(pictureKeyList.rbegin(), pictureKeyList.rend());
+#else
qSort(pictureKeyList.rbegin(), pictureKeyList.rend());
+#endif
#else
qSort(pictureKeyList.begin(), pictureKeyList.end(), qGreater());
#endif
@@ -284,7 +288,11 @@ void ProfileInterface::insertSavegameIPI(QWidget *widget)
QString widgetKey = widgets[proWidget];
QStringList widgetsKeyList = widgets.values();
QStringList savegameKeyList = widgetsKeyList.filter("SGD", Qt::CaseSensitive);
+#if QT_VERSION >= 0x050F00
+ std::sort(savegameKeyList.begin(), savegameKeyList.end());
+#else
qSort(savegameKeyList.begin(), savegameKeyList.end());
+#endif
int sgdIndex = savegameKeyList.indexOf(QRegExp(widgetKey));
ui->vlSavegame->insertWidget(sgdIndex, proWidget);
@@ -303,7 +311,11 @@ void ProfileInterface::dialogNextPictureRequested(QWidget *dialog)
QStringList widgetsKeyList = widgets.values();
QStringList pictureKeyList = widgetsKeyList.filter("PIC", Qt::CaseSensitive);
#if QT_VERSION >= 0x050600
+#if QT_VERSION >= 0x050F00
+ std::sort(pictureKeyList.rbegin(), pictureKeyList.rend());
+#else
qSort(pictureKeyList.rbegin(), pictureKeyList.rend());
+#endif
#else
qSort(pictureKeyList.begin(), pictureKeyList.end(), qGreater());
#endif
@@ -338,7 +350,11 @@ void ProfileInterface::dialogPreviousPictureRequested(QWidget *dialog)
QStringList widgetsKeyList = widgets.values();
QStringList pictureKeyList = widgetsKeyList.filter("PIC", Qt::CaseSensitive);
#if QT_VERSION >= 0x050600
+#if QT_VERSION >= 0x050F00
+ std::sort(pictureKeyList.rbegin(), pictureKeyList.rend());
+#else
qSort(pictureKeyList.rbegin(), pictureKeyList.rend());
+#endif
#else
qSort(pictureKeyList.begin(), pictureKeyList.end(), qGreater());
#endif
@@ -369,7 +385,12 @@ void ProfileInterface::sortingProfileInterface()
ui->vlSnapmatic->setEnabled(false);
QStringList widgetsKeyList = widgets.values();
+
+#if QT_VERSION >= 0x050F00
+ std::sort(widgetsKeyList.begin(), widgetsKeyList.end());
+#else
qSort(widgetsKeyList.begin(), widgetsKeyList.end());
+#endif
for (QString widgetKey : widgetsKeyList)
{
@@ -1627,7 +1648,7 @@ void ProfileInterface::contextMenuTriggeredPIC(QContextMenuEvent *ev)
contextMenuOpened = true;
contextMenu.exec(ev->globalPos());
contextMenuOpened = false;
- hoverProfileWidgetCheck();
+ QTimer::singleShot(0, this, SLOT(hoverProfileWidgetCheck()));
}
void ProfileInterface::contextMenuTriggeredSGD(QContextMenuEvent *ev)
@@ -1660,7 +1681,7 @@ void ProfileInterface::contextMenuTriggeredSGD(QContextMenuEvent *ev)
contextMenuOpened = true;
contextMenu.exec(ev->globalPos());
contextMenuOpened = false;
- hoverProfileWidgetCheck();
+ QTimer::singleShot(0, this, SLOT(hoverProfileWidgetCheck()));
}
void ProfileInterface::on_saProfileContent_dropped(const QMimeData *mimeData)
@@ -1781,19 +1802,23 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event)
return true;
}
}
- else if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::WindowActivate)
+ else if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease)
{
if ((watched->objectName() == "SavegameWidget" || watched->objectName() == "SnapmaticWidget") && isProfileLoaded)
{
ProfileWidget *pWidget = nullptr;
- for (ProfileWidget *widget : widgets.keys())
+ QMap::const_iterator it = widgets.constBegin();
+ QMap::const_iterator end = widgets.constEnd();
+ while (it != end)
{
+ ProfileWidget *widget = it.key();
QPoint mousePos = widget->mapFromGlobal(QCursor::pos());
if (widget->rect().contains(mousePos))
{
pWidget = widget;
break;
}
+ it++;
}
if (pWidget != nullptr)
{
@@ -1827,7 +1852,7 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event)
}
else if (event->type() == QEvent::WindowDeactivate && isProfileLoaded)
{
- if (previousWidget != nullptr)
+ if (previousWidget != nullptr && watched == previousWidget)
{
previousWidget->setStyleSheet(QLatin1String(""));
previousWidget = nullptr;
@@ -1863,13 +1888,17 @@ bool ProfileInterface::eventFilter(QObject *watched, QEvent *event)
void ProfileInterface::hoverProfileWidgetCheck()
{
ProfileWidget *pWidget = nullptr;
- for (ProfileWidget *widget : widgets.keys())
+ QMap::const_iterator it = widgets.constBegin();
+ QMap::const_iterator end = widgets.constEnd();
+ while (it != end)
{
+ ProfileWidget *widget = it.key();
if (widget->underMouse())
{
pWidget = widget;
break;
}
+ it++;
}
if (pWidget != nullptr)
{
diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp
index a45ce2a..c10b9c3 100644
--- a/SnapmaticPicture.cpp
+++ b/SnapmaticPicture.cpp
@@ -433,8 +433,8 @@ QString SnapmaticPicture::getSnapmaticHeaderString(const QByteArray &snapmaticHe
QString SnapmaticPicture::getSnapmaticJSONString(const QByteArray &jsonBytes)
{
QByteArray jsonUsefulBytes = jsonBytes;
- jsonUsefulBytes.replace('\x00', QString());
- jsonUsefulBytes.replace('\x0c', QString());
+ jsonUsefulBytes.replace('\x00', "");
+ jsonUsefulBytes.replace('\x0c', "");
return QString::fromUtf8(jsonUsefulBytes.trimmed());
}
@@ -1339,7 +1339,8 @@ bool SnapmaticPicture::setPictureVisible()
QSize SnapmaticPicture::getSnapmaticResolution()
{
- return snapmaticResolution;
+ // keep old UI size for now
+ return QSize(960, 536);
}
// SNAPMATIC DEFAULTS
diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h
index decf070..745c511 100644
--- a/SnapmaticPicture.h
+++ b/SnapmaticPicture.h
@@ -120,7 +120,7 @@ public:
bool setVisible() { return setPictureVisible(); } // Please use setPictureVisible instead
// PREDEFINED PROPERTIES
- QSize getSnapmaticResolution();
+ static QSize getSnapmaticResolution();
// SNAPMATIC DEFAULTS
bool isSnapmaticDefaultsEnforced();
diff --git a/anpro/imagecropper.cpp b/anpro/imagecropper.cpp
index 7881c85..3d80f71 100644
--- a/anpro/imagecropper.cpp
+++ b/anpro/imagecropper.cpp
@@ -20,6 +20,7 @@
#include "imagecropper.h"
#include "AppEnv.h"
+#include
#include
#include
diff --git a/config.h b/config.h
index 0971474..71ba2ca 100644
--- a/config.h
+++ b/config.h
@@ -44,7 +44,7 @@
#endif
#ifndef GTA5SYNC_APPVER
-#define GTA5SYNC_APPVER "0.2.0"
+#define GTA5SYNC_APPVER "0.3.0"
#endif
#if __cplusplus
diff --git a/qjson4/QJsonDocument.cpp b/qjson4/QJsonDocument.cpp
index 9d503c3..7f8ad18 100644
--- a/qjson4/QJsonDocument.cpp
+++ b/qjson4/QJsonDocument.cpp
@@ -39,45 +39,45 @@ QJsonDocument::QJsonDocument() : root_(0) {
// Name: QJsonDocument
//------------------------------------------------------------------------------
QJsonDocument::QJsonDocument(const QJsonObject &object) : root_(0) {
- setObject(object);
+ setObject(object);
}
//------------------------------------------------------------------------------
// Name: QJsonDocument
//------------------------------------------------------------------------------
QJsonDocument::QJsonDocument(const QJsonArray &array) : root_(0) {
- setArray(array);
+ setArray(array);
}
//------------------------------------------------------------------------------
// Name: QJsonDocument
//------------------------------------------------------------------------------
QJsonDocument::QJsonDocument(const QJsonDocument &other) : root_(0) {
- if(other.root_) {
- root_ = other.root_->clone();
- }
+ if(other.root_) {
+ root_ = other.root_->clone();
+ }
}
//------------------------------------------------------------------------------
// Name: ~QJsonDocument
//------------------------------------------------------------------------------
QJsonDocument::~QJsonDocument() {
- delete root_;
+ delete root_;
}
//------------------------------------------------------------------------------
// Name: operator=
//------------------------------------------------------------------------------
QJsonDocument &QJsonDocument::operator=(const QJsonDocument &other) {
- QJsonDocument(other).swap(*this);
- return *this;
+ QJsonDocument(other).swap(*this);
+ return *this;
}
//------------------------------------------------------------------------------
// Name: operator!=
//------------------------------------------------------------------------------
bool QJsonDocument::operator!=(const QJsonDocument &other) const {
- return !(*this == other);
+ return !(*this == other);
}
//------------------------------------------------------------------------------
@@ -85,30 +85,30 @@ bool QJsonDocument::operator!=(const QJsonDocument &other) const {
//------------------------------------------------------------------------------
bool QJsonDocument::operator==(const QJsonDocument &other) const {
- if(isArray() && other.isArray()) {
- return array() == other.array();
- }
+ if(isArray() && other.isArray()) {
+ return array() == other.array();
+ }
- if(isObject() && other.isObject()) {
- return object() == other.object();
- }
+ if(isObject() && other.isObject()) {
+ return object() == other.object();
+ }
- if(isEmpty() && other.isEmpty()) {
- return true;
- }
+ if(isEmpty() && other.isEmpty()) {
+ return true;
+ }
- if(isNull() && other.isNull()) {
- return true;
- }
+ if(isNull() && other.isNull()) {
+ return true;
+ }
- return false;
+ return false;
}
//------------------------------------------------------------------------------
// Name: isArray
//------------------------------------------------------------------------------
bool QJsonDocument::isArray() const {
- return root_ && root_->toArray();
+ return root_ && root_->toArray();
}
//------------------------------------------------------------------------------
@@ -116,56 +116,56 @@ bool QJsonDocument::isArray() const {
//------------------------------------------------------------------------------
bool QJsonDocument::isEmpty() const {
- // TODO(eteran): figure out the rules here that Qt5 uses
- // it *looks* like they define empty as being NULL
- // which is obviously different than this
+ // TODO(eteran): figure out the rules here that Qt5 uses
+ // it *looks* like they define empty as being NULL
+ // which is obviously different than this
- return !root_;
+ return !root_;
}
//------------------------------------------------------------------------------
// Name: isNull
//------------------------------------------------------------------------------
bool QJsonDocument::isNull() const {
- return !root_;
+ return !root_;
}
//------------------------------------------------------------------------------
// Name: isObject
//------------------------------------------------------------------------------
bool QJsonDocument::isObject() const {
- return root_ && root_->toObject();
+ return root_ && root_->toObject();
}
//------------------------------------------------------------------------------
// Name: setArray
//------------------------------------------------------------------------------
void QJsonDocument::setArray(const QJsonArray &array) {
- setRoot(array);
+ setRoot(array);
}
//------------------------------------------------------------------------------
// Name: setObject
//------------------------------------------------------------------------------
void QJsonDocument::setObject(const QJsonObject &object) {
- setRoot(object);
+ setRoot(object);
}
//------------------------------------------------------------------------------
// Name: setRoot
//------------------------------------------------------------------------------
void QJsonDocument::setRoot(const QJsonRoot &root) {
- delete root_;
- root_ = root.clone();
+ delete root_;
+ root_ = root.clone();
}
//------------------------------------------------------------------------------
// Name: toBinaryData
//------------------------------------------------------------------------------
QByteArray QJsonDocument::toBinaryData() const {
- QByteArray r;
- // TODO(eteran): implement this
- return r;
+ QByteArray r;
+ // TODO(eteran): implement this
+ return r;
}
//------------------------------------------------------------------------------
@@ -173,100 +173,107 @@ QByteArray QJsonDocument::toBinaryData() const {
//------------------------------------------------------------------------------
QString QJsonDocument::escapeString(const QString &s) const {
- QString r;
+ QString r;
- Q_FOREACH(QChar ch, s) {
- switch(ch.toLatin1()) {
- case '\"': r.append("\\\""); break;
- case '\\': r.append("\\\\"); break;
- #if 0
- case '/': r.append("\\/"); break;
- #endif
- case '\b': r.append("\\b"); break;
- case '\f': r.append("\\f"); break;
- case '\n': r.append("\\n"); break;
- case '\r': r.append("\\r"); break;
- case '\t': r.append("\\t"); break;
- default:
- r += ch;
- break;
- }
- }
+ Q_FOREACH(QChar ch, s) {
+ switch(ch.toLatin1()) {
+ case '\"': r.append("\\\""); break;
+ case '\\': r.append("\\\\"); break;
+#if 0
+ case '/': r.append("\\/"); break;
+#endif
+ case '\b': r.append("\\b"); break;
+ case '\f': r.append("\\f"); break;
+ case '\n': r.append("\\n"); break;
+ case '\r': r.append("\\r"); break;
+ case '\t': r.append("\\t"); break;
+ default:
+ r += ch;
+ break;
+ }
+ }
- return r;
+ return r;
}
//------------------------------------------------------------------------------
// Name: toJson
//------------------------------------------------------------------------------
-QString QJsonDocument::toJson(const QJsonValue &v, JsonFormat format) const {
+QString QJsonDocument::toJson(const QJsonValue &v, JsonFormat format, int indent) const {
- QString b;
- QTextStream ss(&b, QIODevice::WriteOnly | QIODevice::Text);
+ QString b;
+ QTextStream ss(&b, QIODevice::WriteOnly | QIODevice::Text);
+ bool compact = (format == JsonFormat::Compact);
- switch(v.type()) {
- case QJsonValue::Null:
- ss << "null";
- break;
- case QJsonValue::Bool:
- ss << (v.toBool() ? "true" : "false");
- break;
- case QJsonValue::Double:
- {
- double d = v.toDouble ();
- if (qIsFinite(d)) {
- // +2 to format to ensure the expected precision
- ss << QByteArray::number(d, 'g', 15 + 2); // ::digits10 is 15
- } else {
- ss << "null"; // +INF || -INF || NaN (see RFC4627#section2.4)
- }
- }
- break;
- case QJsonValue::String:
- ss << '"' << escapeString(v.toString()) << '"';
- break;
- case QJsonValue::Array:
- {
- const QJsonArray a = v.toArray();
- ss << "[";
- if(!a.empty()) {
- QJsonArray::const_iterator it = a.begin();
- QJsonArray::const_iterator e = a.end();
+ switch(v.type()) {
+ case QJsonValue::Null:
+ ss << "null";
+ break;
+ case QJsonValue::Bool:
+ ss << (v.toBool() ? "true" : "false");
+ break;
+ case QJsonValue::Double:
+ {
+ double d = v.toDouble ();
+ if (qIsFinite(d)) {
+ // +2 to format to ensure the expected precision
+ ss << QByteArray::number(d, 'g', 15 + 2); // ::digits10 is 15
+ } else {
+ ss << "null"; // +INF || -INF || NaN (see RFC4627#section2.4)
+ }
+ }
+ break;
+ case QJsonValue::String:
+ ss << '"' << escapeString(v.toString()) << '"';
+ break;
+ case QJsonValue::Array:
+ {
+ const QJsonArray a = v.toArray();
+ ss << (compact ? "[" : "[\n");
+ if(!a.empty()) {
+ QJsonArray::const_iterator it = a.begin();
+ QJsonArray::const_iterator e = a.end();
- ss << toJson(*it++, format);
+ if (!compact) ss << QByteArray(4*indent, ' ');
+ ss << toJson(*it++, format, indent+1);
- for(;it != e; ++it) {
- ss << ',';
- ss << toJson(*it, format);
- }
- }
- ss << "]";
- }
- break;
- case QJsonValue::Object:
- {
- const QJsonObject o = v.toObject();
- ss << "{";
- if(!o.empty()) {
- QJsonObject::const_iterator it = o.begin();
- QJsonObject::const_iterator e = o.end();
+ for(;it != e; ++it) {
+ ss << (compact ? "," : ",\n");
+ if (!compact) ss << QByteArray(4*indent, ' ');
+ ss << toJson(*it, format, indent+1);
+ }
+ }
+ indent--;
+ ss << (compact ? "]" : QString("\n%1]").arg(QString(4*indent, ' ')));
+ }
+ break;
+ case QJsonValue::Object:
+ {
+ const QJsonObject o = v.toObject();
+ ss << (compact ? "{" : "{\n");
+ if(!o.empty()) {
+ QJsonObject::const_iterator it = o.begin();
+ QJsonObject::const_iterator e = o.end();
- ss << '"' << escapeString(it.key()) << "\": " << toJson(it.value(), format);
- ++it;
- for(;it != e; ++it) {
- ss << ',';
- ss << '"' << escapeString(it.key()) << "\": " << toJson(it.value(), format);
- }
- }
- ss << "}";
- }
- break;
- case QJsonValue::Undefined:
- Q_ASSERT(0);
- break;
- }
+ if (!compact) ss << QByteArray(4*indent, ' ');
+ ss << '"' << escapeString(it.key()) << (compact ? "\":" : "\": ") << toJson(it.value(), format, indent+1);
+ ++it;
+ for(;it != e; ++it) {
+ ss << (compact ? "," : ",\n");
+ if (!compact) ss << QByteArray(4*indent, ' ');
+ ss << '"' << escapeString(it.key()) << (compact ? "\":" : "\": ") << toJson(it.value(), format, indent+1);
+ }
+ }
+ indent--;
+ ss << (compact ? "}" : QString("\n%1}").arg(QString(4*indent, ' ')));
+ }
+ break;
+ case QJsonValue::Undefined:
+ Q_ASSERT(0);
+ break;
+ }
- return b;
+ return b;
}
//------------------------------------------------------------------------------
@@ -274,19 +281,19 @@ QString QJsonDocument::toJson(const QJsonValue &v, JsonFormat format) const {
//------------------------------------------------------------------------------
QByteArray QJsonDocument::toJson(JsonFormat format) const {
- Q_UNUSED(format);
+ Q_UNUSED(format);
- if(isArray()) {
- QString s = toJson(array(), format);
- return s.toUtf8();
- }
+ if(isArray()) {
+ QString s = toJson(array(), format);
+ return s.toUtf8();
+ }
- if(isObject()) {
- QString s = toJson(object(), format);
- return s.toUtf8();
- }
+ if(isObject()) {
+ QString s = toJson(object(), format);
+ return s.toUtf8();
+ }
- return QByteArray();
+ return QByteArray();
}
//------------------------------------------------------------------------------
@@ -294,17 +301,17 @@ QByteArray QJsonDocument::toJson(JsonFormat format) const {
//------------------------------------------------------------------------------
QVariant QJsonDocument::toVariant() const {
- if(!isEmpty()) {
- if(QJsonObject *const object = root_->toObject()) {
- return object->toVariantMap();
- }
+ if(!isEmpty()) {
+ if(QJsonObject *const object = root_->toObject()) {
+ return object->toVariantMap();
+ }
- if(QJsonArray *const array = root_->toArray()) {
- return array->toVariantList();
- }
- }
+ if(QJsonArray *const array = root_->toArray()) {
+ return array->toVariantList();
+ }
+ }
- return QVariant();
+ return QVariant();
}
//------------------------------------------------------------------------------
@@ -312,13 +319,13 @@ QVariant QJsonDocument::toVariant() const {
//------------------------------------------------------------------------------
QJsonArray QJsonDocument::array() const {
- if(!isEmpty()) {
- if(QJsonArray *const array = root_->toArray()) {
- return *array;
- }
- }
+ if(!isEmpty()) {
+ if(QJsonArray *const array = root_->toArray()) {
+ return *array;
+ }
+ }
- return QJsonArray();
+ return QJsonArray();
}
//------------------------------------------------------------------------------
@@ -326,54 +333,54 @@ QJsonArray QJsonDocument::array() const {
//------------------------------------------------------------------------------
QJsonObject QJsonDocument::object() const {
- if(!isEmpty()) {
- if(QJsonObject *const object = root_->toObject()) {
- return *object;
- }
- }
+ if(!isEmpty()) {
+ if(QJsonObject *const object = root_->toObject()) {
+ return *object;
+ }
+ }
- return QJsonObject();
+ return QJsonObject();
}
//------------------------------------------------------------------------------
// Name: rawData
//------------------------------------------------------------------------------
const char *QJsonDocument::rawData(int *size) const {
- Q_UNUSED(size);
- // TODO(eteran): implement this
- return 0;
+ Q_UNUSED(size);
+ // TODO(eteran): implement this
+ return 0;
}
//------------------------------------------------------------------------------
// Name: fromBinaryData
//------------------------------------------------------------------------------
QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation) {
- Q_UNUSED(data);
- Q_UNUSED(validation);
+ Q_UNUSED(data);
+ Q_UNUSED(validation);
- QJsonDocument doc;
- // TODO(eteran): implement this
- return doc;
+ QJsonDocument doc;
+ // TODO(eteran): implement this
+ return doc;
}
//------------------------------------------------------------------------------
// Name: fromJson
//------------------------------------------------------------------------------
QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error) {
- QJsonDocument doc;
+ QJsonDocument doc;
- const char *const begin = json.constData();
- const char *const end = begin + json.size();
+ const char *const begin = json.constData();
+ const char *const end = begin + json.size();
- QJsonParser parser(begin, end);
+ QJsonParser parser(begin, end);
- doc.root_ = parser.parse();
+ doc.root_ = parser.parse();
- if(error) {
- *error = parser.state();
- }
+ if(error) {
+ *error = parser.state();
+ }
- return doc;
+ return doc;
}
//------------------------------------------------------------------------------
@@ -381,10 +388,10 @@ QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *e
//------------------------------------------------------------------------------
QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation) {
- // data has to be aligned to a 4 byte boundary.
- Q_ASSERT(!(reinterpret_cast(data) % 3));
+ // data has to be aligned to a 4 byte boundary.
+ Q_ASSERT(!(reinterpret_cast(data) % 3));
- return fromBinaryData(QByteArray::fromRawData(data, size), validation);
+ return fromBinaryData(QByteArray::fromRawData(data, size), validation);
}
//------------------------------------------------------------------------------
@@ -392,26 +399,26 @@ QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidat
//------------------------------------------------------------------------------
QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) {
- QJsonDocument doc;
+ QJsonDocument doc;
- if (variant.type() == QVariant::Map) {
- doc.setObject(QJsonObject::fromVariantMap(variant.toMap()));
- } else if (variant.type() == QVariant::Hash) {
- doc.setObject(QJsonObject::fromVariantHash(variant.toHash()));
- } else if (variant.type() == QVariant::List) {
- doc.setArray(QJsonArray::fromVariantList(variant.toList()));
- } else if (variant.type() == QVariant::StringList) {
- doc.setArray(QJsonArray::fromStringList(variant.toStringList()));
- }
+ if (variant.type() == QVariant::Map) {
+ doc.setObject(QJsonObject::fromVariantMap(variant.toMap()));
+ } else if (variant.type() == QVariant::Hash) {
+ doc.setObject(QJsonObject::fromVariantHash(variant.toHash()));
+ } else if (variant.type() == QVariant::List) {
+ doc.setArray(QJsonArray::fromVariantList(variant.toList()));
+ } else if (variant.type() == QVariant::StringList) {
+ doc.setArray(QJsonArray::fromStringList(variant.toStringList()));
+ }
- return doc;
+ return doc;
}
//------------------------------------------------------------------------------
// Name: swap
//------------------------------------------------------------------------------
void QJsonDocument::swap(QJsonDocument &other) {
- qSwap(root_, other.root_);
+ qSwap(root_, other.root_);
}
#endif
diff --git a/qjson4/QJsonDocument.h b/qjson4/QJsonDocument.h
index 5b1e17a..3731f62 100644
--- a/qjson4/QJsonDocument.h
+++ b/qjson4/QJsonDocument.h
@@ -36,66 +36,66 @@ class QJsonRoot;
class QJsonDocument {
public:
- enum DataValidation {
- Validate = 0,
- BypassValidation = 1
- };
+ enum DataValidation {
+ Validate = 0,
+ BypassValidation = 1
+ };
- enum JsonFormat {
- Indented,
- Compact
- };
+ enum JsonFormat {
+ Indented,
+ Compact
+ };
public:
- QJsonDocument();
- QJsonDocument(const QJsonObject &object);
- QJsonDocument(const QJsonArray &array);
- QJsonDocument(const QJsonDocument &other);
- ~QJsonDocument();
+ QJsonDocument();
+ QJsonDocument(const QJsonObject &object);
+ QJsonDocument(const QJsonArray &array);
+ QJsonDocument(const QJsonDocument &other);
+ ~QJsonDocument();
public:
- QJsonDocument &operator=(const QJsonDocument &other);
+ QJsonDocument &operator=(const QJsonDocument &other);
public:
- bool operator!=(const QJsonDocument &other) const;
- bool operator==(const QJsonDocument &other) const;
+ bool operator!=(const QJsonDocument &other) const;
+ bool operator==(const QJsonDocument &other) const;
public:
- bool isArray() const;
- bool isEmpty() const;
- bool isNull() const;
- bool isObject() const;
+ bool isArray() const;
+ bool isEmpty() const;
+ bool isNull() const;
+ bool isObject() const;
public:
- QByteArray toBinaryData() const;
- QByteArray toJson(JsonFormat format = Indented) const;
- QVariant toVariant() const;
+ QByteArray toBinaryData() const;
+ QByteArray toJson(JsonFormat format = Indented) const;
+ QVariant toVariant() const;
public:
- QJsonArray array() const;
- QJsonObject object() const;
- const char *rawData(int *size) const;
+ QJsonArray array() const;
+ QJsonObject object() const;
+ const char *rawData(int *size) const;
public:
- void setArray(const QJsonArray &array);
- void setObject(const QJsonObject &object);
+ void setArray(const QJsonArray &array);
+ void setObject(const QJsonObject &object);
public:
- static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate);
- static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0);
- static QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate);
- static QJsonDocument fromVariant(const QVariant &variant);
+ static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate);
+ static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0);
+ static QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate);
+ static QJsonDocument fromVariant(const QVariant &variant);
private:
- void setRoot(const QJsonRoot &root);
- QString toJson(const QJsonValue &v, JsonFormat format) const;
- QString escapeString(const QString &s) const;
+ void setRoot(const QJsonRoot &root);
+ QString toJson(const QJsonValue &v, JsonFormat format, int indent = 1) const;
+ QString escapeString(const QString &s) const;
private:
- void swap(QJsonDocument &other);
+ void swap(QJsonDocument &other);
private:
- QJsonRoot *root_;
+ QJsonRoot *root_;
};
#endif
diff --git a/res/gta5sync.ts b/res/gta5sync.ts
index 4ec67af..7c0108e 100644
--- a/res/gta5sync.ts
+++ b/res/gta5sync.ts
@@ -191,21 +191,21 @@ Pictures and Savegames
-
-
+
+
-
+
-
+
@@ -343,14 +343,14 @@ Pictures and Savegames
-
+
Custom Avatar Description in SC, don't use Special Character!
-
+
Custom Picture Description in SC, don't use Special Character!
@@ -489,7 +489,7 @@ When you want to use it as Avatar the image will be detached!
-
+
@@ -502,57 +502,57 @@ When you want to use it as Avatar the image will be detached!
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
X and Y position
@@ -705,26 +705,26 @@ Y: %2
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -745,7 +745,7 @@ Y: %2
-
+
@@ -781,8 +781,8 @@ Y: %2
-
-
+
+
@@ -804,8 +804,8 @@ Y: %2
-
-
+
+
@@ -862,95 +862,95 @@ Y: %2
-
+
System in context of System default
-
+
Next closest language compared to the Game settings
-
-
+
+
Next closest language compared to the Interface
-
-
-
+
+
+
Automatic language choice.
-
+
First language a person can talk with a different person/application. "Native" or "Not Native".
-
+
%1
-
+
-
+
No Profile, as default
-
-
-
+
+
+
-
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -991,80 +991,80 @@ Y: %2
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
@@ -1201,28 +1201,28 @@ Press 1 for Default View
-
+
-
+
-
-
+
+
-
+
-
+
@@ -1274,23 +1274,23 @@ Press 1 for Default View
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1307,14 +1307,14 @@ Press 1 for Default View
-
+
-
+
@@ -1322,14 +1322,14 @@ Press 1 for Default View
-
+
-
+
@@ -1344,189 +1344,189 @@ Press 1 for Default View
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
-
+
+
-
-
-
+
+
+
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1534,81 +1534,81 @@ Press 1 for Default View
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
%1 failed with...
-
-
+
+
-
+
%1 failed with...
-
-
-
+
+
+
-
+
-
+
%1 failed with...
-
-
-
+
+
+
-
+
-
+
%1 failed with...
@@ -1710,37 +1710,37 @@ Press 1 for Default View
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1834,11 +1834,11 @@ Press 1 for Default View
-
-
-
-
-
+
+
+
+
+
@@ -1920,48 +1920,48 @@ Press 1 for Default View
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -2017,19 +2017,19 @@ Press 1 for Default View
SnapmaticPicture
-
+
-
+
-
+
@@ -2136,52 +2136,52 @@ Press 1 for Default View
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2363,7 +2363,7 @@ Press 1 for Default View
-
+
@@ -2400,15 +2400,15 @@ Press 1 for Default View
-
-
+
+
-
-
+
+
diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts
index 97a0a1d..c45f6fc 100644
--- a/res/gta5sync_de.ts
+++ b/res/gta5sync_de.ts
@@ -176,8 +176,8 @@ Snapmatic Bilder und Spielständen
ImageEditorDialog
-
-
+
+
@@ -209,13 +209,13 @@ Snapmatic Bilder und Spielständen
S&chließen
-
+
Patchen von Snapmatic Bild fehlgeschlagen wegen I/O Fehler
-
+
Patchen von Snapmatic Bild fehlgeschlagen wegen Bild Fehler
@@ -359,14 +359,14 @@ Snapmatic Bilder und Spielständen
-
+
Custom Avatar Description in SC, don't use Special Character!
Eigener Avatar
-
+
Custom Picture Description in SC, don't use Special Character!
Eigenes Bild
@@ -500,7 +500,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt!
S&chließen
-
+
JSON Fehler
@@ -513,57 +513,57 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt!
Snapmatic Kartenansicht
-
+
Ansicht schließen
-
+
S&chließen
-
+
Neue Position festlegen
-
+
&Übernehmen
-
+
Alte Position wiederherstellen
-
+
&Zurücksetzen
-
+
Neue Position auswählen
-
+
Au&swählen
-
+
Position auswählen verlassen
-
+
&Fertig
-
+
X and Y position
@@ -717,26 +717,26 @@ Y: %2
-
-
-
-
-
-
+
+
+
+
+
+
Gefunden: %1
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Sprache: %1
@@ -757,7 +757,7 @@ Y: %2
-
+
An %1 Benutzerstatistik teilnehmen
@@ -788,8 +788,8 @@ Y: %2
-
-
+
+
Teilnahme ID: %1
@@ -846,8 +846,8 @@ Y: %2
-
-
+
+
Aktuell: %1
@@ -874,95 +874,95 @@ Y: %2
Abbre&chen
-
+
%1
%1
-
+
System in context of System default
System
-
+
Next closest language compared to the Game settings
%1 (Spielsprache)
-
-
+
+
Next closest language compared to the Interface
%1 (Näheste zur Oberfläche)
-
-
-
+
+
+
Automatic language choice.
Automatisch
-
+
First language a person can talk with a different person/application. "Native" or "Not Native".
%1 (Sprachenpriorität)
-
+
Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast.
-
+
%1 Benutzerstatistik Online ansehen
-
+
Nicht registriert
-
-
-
-
+
+
+
+
Ja
-
-
+
+
Nein
-
-
+
+
OS-defined
-
-
+
+
Steam-definiert
-
+
No Profile, as default
Kein Profil
-
-
-
+
+
+
Profil: %1
@@ -1012,37 +1012,37 @@ Y: %2
Exportieren
-
-
+
+
Als &Bild exportieren...
-
-
+
+
Als &Snapmatic exportieren...
-
-
+
+
Eigenschaften bearb&eiten...
-
-
+
+
Bild &überschreiben...
-
-
+
+
&Kartenansicht öffnen...
-
+
@@ -1051,39 +1051,39 @@ Taste 2 - Overlay umschalten
Pfeiltasten - Navigieren
-
-
+
+
Snapmatic Bildansicht
-
-
+
+
Fehlgeschlagen beim %1
-
-
+
+
Keine Crew
-
-
+
+
Keine Spieler
-
+
Avatar Vorschaumodus
Drücke 1 für Standardmodus
-
+
Unbekannter Standort
@@ -1185,8 +1185,8 @@ Drücke 1 für Standardmodus
Keine gültige Datei wurde ausgewählt
-
-
+
+
&JSON Editor öffnen...
@@ -1219,28 +1219,28 @@ Drücke 1 für Standardmodus
Abbre&chen
-
+
Spieler hinzufügen...
-
+
Fehlgeschlagen beim Hinzufügen von mehr Spielern weil der Limit von Spielern %1 ist!
-
-
+
+
Spieler hinzufügen...
-
+
Social Club Spieler ID eingeben
-
+
Fehlgeschlagen beim Hinzufügen vom Spieler %1 weil Spieler %1 bereits hinzugefügt wurde!
@@ -1289,35 +1289,35 @@ Drücke 1 für Standardmodus
Lade...
-
+
Snapmatic Lader
-
+
<h4>Folgende Snapmatic Bilder wurden repariert</h4>%1
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Importieren...
@@ -1332,45 +1332,45 @@ Drücke 1 für Standardmodus
Importieren
-
+
Spielstanddateien (SRDR*)
-
+
Snapmatic Bilder (PRDR*)
-
+
Importfähige Dateien (%1)
-
+
Alle Bilddateien (%1)
-
+
Alle Dateien (**)
-
-
+
+
Importiere Datei %1 von %2 Dateien
-
+
@@ -1379,13 +1379,13 @@ Drücke 1 für Standardmodus
%1
-
+
Fehler beim Lesen vom Snapmatic Bild
-
+
Fehler beim Lesen von Spielstanddatei
@@ -1393,40 +1393,40 @@ Drücke 1 für Standardmodus
-
+
Kann %1 nicht importieren weil die Datei nicht geöffnet werden kann
-
+
Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann
-
+
Kann %1 nicht importieren weil das Dateiformat nicht erkannt werden kann
-
+
Initialisiere Export...
-
+
Fehlgeschlagen beim Importieren vom Snapmatic Bild, Datei beginnt nicht mit PRDR oder endet mit .r5e
-
+
%1Exportiere Snapmatic Bilder%2<br><br>JPG Bilder machen es möglich sie mit ein Bildansicht Programm zu öffnen<br>Das GTA Snapmatic Format macht es möglich sie wieder ins Game zu importieren<br><br>Exportieren als:
-
-
+
+
Keine gültige Datei wurde ausgewählt
@@ -1437,91 +1437,91 @@ Drücke 1 für Standardmodus
Aktivierte Bilder: %1 von %2
-
+
Ein Snapmatic Bild mit der Uid %1 existiert bereits, möchtest du dein Import eine neue Uid und Zeitstempel zuweisen?
-
+
Fehlgeschlagen beim Importieren vom Snapmatic Bild, kann Snapmatic Bild nicht ins Profil kopieren
-
+
Fehlgeschlagen beim Importieren vom Spielstand, kann Spielstanddatei nicht ins Profil kopieren
-
+
Fehlgeschlagen beim Importieren vom Spielstand, kein Spielstandslot mehr frei
-
-
+
+
JPG Bilder und GTA Snapmatic
-
-
+
+
Nur JPG Bilder
-
-
+
+
Nur GTA Snapmatic
-
-
-
-
+
+
+
+
Auswahl patchen...
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Patche Datei %1 von %2 Dateien
-
-
+
+
Als Avatar qualifizieren
-
-
-
-
-
-
+
+
+
+
+
+
Keine Snapmatic Bilder sind ausgewählt
-
+
Fehlgeschlagen beim Entfernen von allen augewählten Snapmatic Bildern und/oder Spielstanddateien
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1531,93 +1531,93 @@ Drücke 1 für Standardmodus
%2
-
+
Bereite Inhalt für Import vor...
-
+
%1 failed with...
Qualifizieren
-
-
+
+
Spieler ändern...
-
+
%1 failed with...
Spieler ändern
-
-
-
+
+
+
Crew ändern...
-
+
Fehlgeschlagen beim Eingeben von einer gültigen Crew ID
-
+
%1 failed with...
Crew ändern
-
-
-
+
+
+
Titel ändern...
-
+
Fehlgeschlagen beim Eingeben eines gültigen Snapmatic Titel
-
+
%1 failed with...
Titel ändern
-
-
+
+
Keine Snapmatic Bilder oder Spielstände sind ausgewählt
-
-
-
+
+
+
Auswahl löschen
-
+
Möchtest du wirklich die ausgewählten Snapmatic Bilder und Spielstanddateien löschen?
-
-
-
-
-
+
+
+
+
+
Auswahl exportieren...
-
+
@@ -1636,7 +1636,7 @@ Drücke 1 für Standardmodus
Alle Profildateien (*.r5e SRDR* PRDR*)
-
+
RDR 2 Export (*.r5e)
@@ -1771,32 +1771,32 @@ Drücke 1 für Standardmodus
Fehlgeschlagen beim Löschen %1 von deinen Spielständen
-
+
A&nsehen
-
+
Entfe&rnen
-
+
Au&swählen
-
+
A&bwählen
-
+
&Alles auswählen
-
+
Alles a&bwählen
@@ -1811,7 +1811,7 @@ Drücke 1 für Standardmodus
Spielstand kopieren
-
+
&Exportieren
@@ -1859,11 +1859,11 @@ Drücke 1 für Standardmodus
-
-
-
-
-
+
+
+
+
+
@@ -1905,7 +1905,7 @@ Drücke 1 für Standardmodus
Meme
-
+
Snapmatic Titel
@@ -1998,42 +1998,42 @@ Drücke 1 für Standardmodus
Nein
-
+
<h4>Ungespeicherte Änderungen erkannt</h4>Möchtest du den JSON Inhalt speichern bevor du verlässt?
-
+
Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen %1
-
+
Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen JSON Fehler
-
-
+
+
Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen I/O Fehler
-
+
Neuer Snapmatic Titel:
-
+
Snapmatic Crew
-
+
Neue Snapmatic Crew:
@@ -2088,19 +2088,19 @@ Drücke 1 für Standardmodus
Datei lesen von %1 weil %2
-
+
JSON ist unvollständig und Fehlerhaft
-
+
JSON ist unvollständig
-
+
JSON ist Fehlerhaft
@@ -2161,52 +2161,52 @@ Drücke 1 für Standardmodus
Fehlgeschlagen beim Anzeigen von %1 im Spiel von deinen Snapmatic Bildern
-
+
Bearbei&ten
-
+
&Exportieren
-
+
&Im Spiel anzeigen
-
+
&Im Spiel ausblenden
-
+
A&nsehen
-
+
Entfe&rnen
-
+
Au&swählen
-
+
A&bwählen
-
+
Alles &auswählen
-
+
Alles a&bwählen
@@ -2407,7 +2407,7 @@ Drücke 1 für Standardmodus
-
+
@@ -2450,15 +2450,15 @@ Drücke 1 für Standardmodus
&Neuladen
-
-
+
+
Im Spiel anzeigen
-
-
+
+
Im Spiel ausblenden
diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts
index 421019a..08eb6e7 100644
--- a/res/gta5sync_en_US.ts
+++ b/res/gta5sync_en_US.ts
@@ -166,8 +166,8 @@ Pictures and Savegames
ImageEditorDialog
-
-
+
+
@@ -199,13 +199,13 @@ Pictures and Savegames
-
+
-
+
@@ -349,14 +349,14 @@ Pictures and Savegames
-
+
Custom Avatar Description in SC, don't use Special Character!
-
+
Custom Picture Description in SC, don't use Special Character!
@@ -489,7 +489,7 @@ When you want to use it as Avatar the image will be detached!
-
+
@@ -502,57 +502,57 @@ When you want to use it as Avatar the image will be detached!
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
X and Y position
@@ -705,26 +705,26 @@ Y: %2
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -740,7 +740,7 @@ Y: %2
-
+
@@ -761,8 +761,8 @@ Y: %2
-
-
+
+
@@ -829,8 +829,8 @@ Y: %2
-
-
+
+
@@ -862,95 +862,95 @@ Y: %2
-
+
System in context of System default
-
+
Next closest language compared to the Game settings
-
-
+
+
Next closest language compared to the Interface
-
-
-
+
+
+
Automatic language choice.
-
+
First language a person can talk with a different person/application. "Native" or "Not Native".
-
+
%1
-
+
The new Custom Folder will initialize after you restart %1.
-
+
No Profile, as default
-
-
-
+
+
+
-
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -991,74 +991,74 @@ Y: %2
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
@@ -1167,8 +1167,8 @@ Press 1 for Default View
-
-
+
+
@@ -1201,28 +1201,28 @@ Press 1 for Default View
-
+
-
+
-
-
+
+
-
+
-
+
@@ -1282,35 +1282,35 @@ Press 1 for Default View
-
+
-
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1325,24 +1325,24 @@ Press 1 for Default View
-
+
-
+
-
+
-
+
@@ -1350,46 +1350,46 @@ Press 1 for Default View
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
@@ -1397,147 +1397,147 @@ Press 1 for Default View
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
-
-
-
+
+
+
+
+
-
+
Initializing export...
-
+
-
-
+
+
-
-
-
+
+
+
-
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1545,70 +1545,70 @@ Press 1 for Default View
-
+
-
+
-
+
-
+
%1 failed with...
-
-
+
+
-
+
%1 failed with...
-
-
-
+
+
+
-
+
-
+
%1 failed with...
-
-
-
+
+
+
-
+
-
+
%1 failed with...
@@ -1710,37 +1710,37 @@ Press 1 for Default View
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1834,11 +1834,11 @@ Press 1 for Default View
-
-
-
-
-
+
+
+
+
+
@@ -1967,48 +1967,48 @@ Press 1 for Default View
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
@@ -2063,19 +2063,19 @@ Press 1 for Default View
-
+
-
+
-
+
@@ -2136,52 +2136,52 @@ Press 1 for Default View
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2358,7 +2358,7 @@ Press 1 for Default View
-
+
@@ -2425,15 +2425,15 @@ Press 1 for Default View
-
-
+
+
-
-
+
+
diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts
index 338c57f..b4e5f74 100644
--- a/res/gta5sync_fr.ts
+++ b/res/gta5sync_fr.ts
@@ -176,8 +176,8 @@ et les fichiers de sauvegarde de Red Dead Redemption 2
ImageEditorDialog
-
-
+
+
@@ -209,13 +209,13 @@ et les fichiers de sauvegarde de Red Dead Redemption 2
&Fermer
-
+
Échec du patch Snapmatic : I/O Error
-
+
Échec du patch Snapmatic : Image Error
@@ -359,14 +359,14 @@ et les fichiers de sauvegarde de Red Dead Redemption 2
-
+
Custom Avatar Description in SC, don't use Special Character!
Avatar personnalisé
-
+
Custom Picture Description in SC, don't use Special Character!
Image personnalisé
@@ -500,7 +500,7 @@ Si vous l'utilisez comme Avatar, l'image sera détachée !&Fermer
-
+
Erreur JSON
@@ -513,57 +513,57 @@ Si vous l'utilisez comme Avatar, l'image sera détachée !Visionneuse de Carte Snapmatic
-
+
Fermer la visionneuse
-
+
&Fermer
-
+
Appliquer la nouvelle position
-
+
&Appliquer
-
+
Revenir à l'ancienne position
-
+
&Revenir
-
+
Sélectionner la nouvelle position
-
+
&Sélectionner
-
+
Quitter la sélection de position
-
+
&Terminer
-
+
X and Y position
@@ -717,26 +717,26 @@ Y : %2
-
-
-
-
-
-
+
+
+
+
+
+
Trouvé : %1
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Langue : %1
@@ -757,7 +757,7 @@ Y : %2
-
+
Participer aux statistiques d'usage %1
@@ -788,8 +788,8 @@ Y : %2
-
-
+
+
ID de participation : %1
@@ -841,8 +841,8 @@ Y : %2
-
-
+
+
Actuel : %1
@@ -874,95 +874,95 @@ Y : %2
&Annuler
-
+
System in context of System default
Système
-
+
Next closest language compared to the Game settings
%1 (Langue du jeu)
-
-
+
+
Next closest language compared to the Interface
%1 (Langage proche de l'interface)
-
-
-
+
+
+
Automatic language choice.
Automatique
-
+
First language a person can talk with a different person/application. "Native" or "Not Native".
%1 (Priorité de la langue)
-
+
%1
%1
-
+
Le nouveau Dossier personnalisé sera initialisé au redémarrage de %1.
-
+
Voir les statistiques d'usage %1 en ligne
-
+
Pas enregistré
-
-
-
-
+
+
+
+
Oui
-
-
+
+
Non
-
-
+
+
Défini par le système d'exploitation
-
-
+
+
Défini par Steam
-
+
No Profile, as default
Aucun profil
-
-
-
+
+
+
Profil : %1
@@ -1092,37 +1092,37 @@ Y : %2
Fichier invalide
-
-
+
+
Exporter comme &image...
-
-
+
+
Exporter comme &Snapmatic...
-
-
+
+
&Remplacer l'image...
-
-
+
+
Modifier les &propriétés...
-
-
+
+
Ouvrir la &Visionneuse de Carte...
-
+
@@ -1131,39 +1131,39 @@ Touche 2 - Activer/désactiver l'overlay
Touches fléchées - Naviguer
-
-
+
+
Visionneuse de photo Snapmatic
-
-
+
+
Echec de %1
-
-
+
+
Aucun crew
-
-
+
+
Aucun joueurs
-
+
Mode Aperçu Avatar
Appuyer sur 1 pour le mode par défaut
-
+
Emplacement inconnu
@@ -1185,8 +1185,8 @@ Appuyer sur 1 pour le mode par défaut
Échec de l'export de la photo Snapmatic
-
-
+
+
Ouvrir l'éditeur &JSON...
@@ -1219,28 +1219,28 @@ Appuyer sur 1 pour le mode par défaut
A&nnuler
-
+
Ajouter des joueurs...
-
+
Échec de l'ajout de joueurs : la limite de %1 est atteinte !
-
-
+
+
Ajouter un joueur...
-
+
Entrer l'ID Social Club du joueur
-
+
Échec de l'ajout du joueur %1 car le joueur %1 est déjà ajouté !
@@ -1300,35 +1300,35 @@ Appuyer sur 1 pour le mode par défaut
Chargement...
-
+
Snapmatic Loader
-
+
<h4>Les Snapmatic suivants ont été répaés</h4>%1
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Importer...
@@ -1343,7 +1343,7 @@ Appuyer sur 1 pour le mode par défaut
Importer
-
+
Fichiers de sauvegarde GTA (SRDR*)
@@ -1351,26 +1351,26 @@ Appuyer sur 1 pour le mode par défaut
-
+
Toutes les images (%1)
-
+
Tous les fichiers (**)
-
-
+
+
Importation du fichier %1 sur %2
-
+
@@ -1379,25 +1379,25 @@ Appuyer sur 1 pour le mode par défaut
%1
-
-
+
+
Fichier invalide
-
+
Fichiers importables (%1)
-
+
Impossible d'ouvrir la photo Snapmatic
-
+
Impossible de lire le fichier de sauvegarde
@@ -1405,122 +1405,122 @@ Appuyer sur 1 pour le mode par défaut
-
+
Impossible d'importer %1, le fichier ne peut pas être ouvert
-
+
Impossible d'importer %1, le fichier ne peut pas être parsé correctement
-
+
Impossible d'importer %1, le format du fichier n'est pas détecté
-
+
Impossible d'importer la photo Snapmatic,nom de fichier incorrect (PRDR*, *.r5e)
-
+
Impossible d'importer la photo Snapmatic, impossible de copier le fichier dans le profil
-
+
Impossible d'importer la sauvegarde, impossible de copier le fichier dans le profil
-
+
Impossible d'importer la sauvegarde, aucun emplacement libre
-
-
+
+
Images JPG et GTA Snapmatic
-
-
+
+
Images JPG seulement
-
-
+
+
GTA Snapmatic seulement
-
+
%1Exporter les photos Snapmatic%2<br><br>Les fichiers JPG permettent d'ouvrir les photos avec une visionneuse d'images<br>Les GTA Snapmatic permettent d'importer les photos dans le jeu<br><br>Exporter comme :
-
-
-
-
-
+
+
+
+
+
Exporter la sélection...
-
+
Initialisation de l'export...
-
-
+
+
Qualifier comme Avatar
-
-
-
-
-
-
+
+
+
+
+
+
Aucun Snapmatic sélectionné
-
-
-
-
+
+
+
+
Patcher la sélection...
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Patch du fichier %1 sur %2
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1530,82 +1530,82 @@ Appuyer sur 1 pour le mode par défaut
%2
-
+
Échec de la supression des Snapmatic et/ou des fichiers de sauvegarde sélectionnés
-
+
Préparation du contenu pour l'import...
-
+
Fichiers GTA Snapmatic (PRDR*)
-
+
Un Snapmatic existe déjà avec le uid %1, voulez-vous assigner à votre import un nouvel uid et timestamp ?
-
+
%1 failed with...
Qualifier
-
-
+
+
Modifier les joueurs...
-
+
%1 failed with...
Modifier les joueurs
-
-
-
+
+
+
Modifier le Crew...
-
+
Snapmatic Crew ID invalide
-
+
%1 failed with...
Changer le Crew
-
-
-
+
+
+
Changer le titre...
-
+
Titre Snapmatic invalide
-
+
%1 failed with...
Changer le titre
-
+
@@ -1614,20 +1614,20 @@ Appuyer sur 1 pour le mode par défaut
%1
-
-
+
+
Aucun fichier de sauvegarde ou photo Snapmatic sélectionné
-
-
-
+
+
+
Supprimer la sélection
-
+
Supprimer la sélection ?
@@ -1637,7 +1637,7 @@ Appuyer sur 1 pour le mode par défaut
Tous les fichiers de profil (*.r5e SRDR* PRDR*)
-
+
RDR 2 Export (*.r5e)
@@ -1734,7 +1734,7 @@ Appuyer sur 1 pour le mode par défaut
Supprimer
-
+
&Exporter
@@ -1825,32 +1825,32 @@ Appuyer sur 1 pour le mode par défaut
Impossible de supprimer %1
-
+
&Voir
-
+
&Supprimer
-
+
&Sélectionner
-
+
&Déselectionner
-
+
Sélectionner to&ut
-
+
&Déselectionner tout
@@ -1860,11 +1860,11 @@ Appuyer sur 1 pour le mode par défaut
-
-
-
-
-
+
+
+
+
+
@@ -1906,7 +1906,7 @@ Appuyer sur 1 pour le mode par défaut
Meme
-
+
Titre Snapmatic
@@ -2001,42 +2001,42 @@ Appuyer sur 1 pour le mode par défaut
Non
-
+
<h4>Modifications détectées</h4>Voulez-vous sauvegarder le contenu JSON avant de quitter ?
-
+
Patch des propriétés Snapmatic échoué : %1
-
+
Patch des propriétés Snapmatic échoué : erreur JSON
-
-
+
+
La modification des propriétés Snapmatic a échoué : erreur d'entrée/sortie
-
+
Nouveau titre Snapmatic :
-
+
Crew Snapmatic
-
+
Nouveau crew Snapmatic :
@@ -2091,19 +2091,19 @@ Appuyer sur 1 pour le mode par défaut
lecture du fichier %1 : %2
-
+
JSON incomplet ou incorrect
-
+
JSON incomplet
-
+
JSON incorrect
@@ -2184,52 +2184,52 @@ Appuyer sur 1 pour le mode par défaut
%1 n'a pas pu être rendu visible en jeu
-
+
Édi&ter
-
+
&Visible en jeu
-
+
&Invisible en jeu
-
+
&Exporter
-
+
&Voir
-
+
S&upprimer
-
+
&Sélectionner
-
+
&Déselectionner
-
+
Sélectionner &tout
-
+
&Déselectionner tout
@@ -2368,7 +2368,7 @@ Appuyer sur 1 pour le mode par défaut
-
+
@@ -2453,15 +2453,15 @@ Appuyer sur 1 pour le mode par défaut
Impossible d'ouvrir %1, format invalide
-
-
+
+
Visible en jeu
-
-
+
+
Invisible en jeu
diff --git a/res/gta5sync_ko.ts b/res/gta5sync_ko.ts
index f037691..88a1353 100644
--- a/res/gta5sync_ko.ts
+++ b/res/gta5sync_ko.ts
@@ -201,21 +201,21 @@ Pictures and Savegames
닫기(&C)
-
-
+
+
스냅매틱 이미지 편집기
-
+
I/O 오류로 인해 스냅매틱 이미지를 패치하지 못했습니다
-
+
이미지 오류로 인해 스냅매틱 이미지를 패치하지 못했습니다
@@ -353,7 +353,7 @@ Pictures and Savegames
-
+
Custom Avatar Description in SC, don't use Special Character!
소셜클럽의 사용자 지정 아바타 설명입니다. 특수 문자를 사용하지 마십시오!
@@ -361,7 +361,7 @@ Pictures and Savegames
-
+
Custom Picture Description in SC, don't use Special Character!
소셜클럽의 사용자 지정 그림 설명입니다. 특수 문자를 사용하지 마십시오!
@@ -506,7 +506,7 @@ When you want to use it as Avatar the image will be detached!
닫기(&C)
-
+
JSON 오류
@@ -519,57 +519,57 @@ When you want to use it as Avatar the image will be detached!
스냅매틱 지도 뷰어
-
+
뷰어 닫기
-
+
닫기(&C)
-
+
새 위치 적용
-
+
적용(&A)
-
+
이전 위치 되돌리기
-
+
되돌리기(&R)
-
+
새 위치 선택
-
+
선택(&S)
-
+
선택 위치 종료
-
+
완료(&D)
-
+
X and Y position
@@ -724,26 +724,26 @@ Y: %2
-
-
-
-
-
-
+
+
+
+
+
+
찾음: %1
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
언어: %1
@@ -764,7 +764,7 @@ Y: %2
-
+
사용자 통계 참가 %1
@@ -800,8 +800,8 @@ Y: %2
-
-
+
+
참여 아이디: %1
@@ -823,8 +823,8 @@ Y: %2
-
-
+
+
현재: %1
@@ -883,100 +883,100 @@ Y: %2
취소(&C)
-
+
First language a person can talk with a different person/application. "Native" or "Not Native".
%1 (우선 순위)
-
+
System in context of System default
시스템
-
+
Next closest language compared to the Game settings
게임 설정과 가장 가까운 언어
%1 (게임 언어)
-
-
-
+
+
+
Automatic language choice.
언어 자동 선택
자동
-
-
+
+
Next closest language compared to the Interface
인터페이스와 가장 가까운 언어
%1 (인터페이스와 가까운 언어)
-
+
%1
%1
%1
-
+
다시 시작한 후 새 사용자 지정 폴더가 초기화됩니다. %1.
-
+
No Profile, as default
프로필 없음 (기본값)
프로필 없음
-
-
-
+
+
+
프로필: %1
-
+
온라인 %1 사용자 통계 보기
-
+
등록되지 않았습니다
-
-
-
-
+
+
+
+
예
-
-
+
+
아니요
-
-
+
+
OS 정의
-
-
+
+
스팀 정의
@@ -1020,43 +1020,43 @@ Y: %2
닫기(&C)
-
-
+
+
사진으로 내보내기(&P)...
-
-
+
+
스낵매틱으로 내보내기(&S)...
-
-
+
+
속성 편집(&E)...
-
-
+
+
이미지 덮어쓰기(&O)...
-
-
+
+
지도 뷰어 열기(&M)...
-
-
+
+
JSON 편집기 열기(&J)...
-
+
@@ -1065,37 +1065,37 @@ Arrow Keys - Navigate
화살표키 - 이동
-
-
+
+
스낵매틱 사진 뷰어
-
-
+
+
%1에서 실패했습니다
-
-
+
+
플레이어 없음
-
-
+
+
조직 없음
-
+
알 수 없는 위치
-
+
아바타 미리 보기 모드입니다
@@ -1233,28 +1233,28 @@ Press 1 for Default View
취소(&C)
-
+
플레이어 추가...
-
+
플레이어의 제한이 %1이므로 플레이어를 추가하지 못했습니다!
-
-
+
+
플레이어 추가...
-
+
소셜 클럽 플레이어 아이디 입력
-
+
%1 플레이어가 이미 추가되어 %1 플레이어를 추가하지 못했습니다!
@@ -1306,23 +1306,23 @@ Press 1 for Default View
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
가져오기...
@@ -1339,14 +1339,14 @@ Press 1 for Default View
-
+
모든 이미지 파일 (%1)
-
+
모든 파일 (**)
@@ -1354,14 +1354,14 @@ Press 1 for Default View
-
+
파일을 열 수 없으므로 %1을 가져올 수 없습니다
-
+
파일을 구문 분석할 수 없으므로 %1을 가져올 수 없습니다
@@ -1376,53 +1376,53 @@ Press 1 for Default View
불러오는 중...
-
+
스냅매틱 로더
-
+
<h4>다음 스냅매틱 사진을 복구했습니다 </h4>%1
-
+
가져올 수 있는 파일 (%1)
-
+
RDR 2로 내보내기 (*.r5e)
-
+
세이브 파일 (SRDR*)
-
+
스냅매틱 사진 (PRDR*)
-
-
+
+
올바른 파일이 선택되지 않았습니다
-
-
+
+
%2 파일 중 %1 파일을 가져옵니다
-
+
@@ -1431,91 +1431,91 @@ Press 1 for Default View
%1
-
+
스냅매틱 사진을 읽지 못했습니다
-
+
세이브 파일을 읽지 못했습니다
-
+
파일 형식을 검색할 수 없으므로 %1을 가져올 수 없습니다
-
+
가져올 컨텐츠를 준비합니다...
-
+
스냅매틱 사진을 가져오지 못했습니다. 파일이 PRDR로 시작되거나 .r5e로 끝나지 않습니다
-
+
uid %1이(가) 있는 스냅매틱 사진이 이미 있습니다. 가져오기를 새 uid 및 타임스탬프를 할당하시겠습니까?
-
+
스냅매틱 사진을 가져오지 못했습니다. 파일을 프로파일에 복사할 수 없습니다
-
+
게임 저장 파일을 가져오지 못했습니다. 파일을 프로필에 복사할 수 없습니다
-
+
게임 저장 파일을 가져오지 못했습니다. 게임 저장 슬롯이 남아 있지 않습니다
-
-
-
-
-
+
+
+
+
+
내보내기를 선택했습니다...
-
-
+
+
JPG 사진 및 GTA 스냅매틱
-
-
+
+
JPG 사진만
-
-
+
+
GTA 스냅매틱만
-
+
%1 스냅 사진 내보내기를 수행합니다%2 <br><br>JPG 사진을 사용하면 이미지 뷰어 로 사진을 열 수 있습니다<br>GTA 스냅매틱을 사용하면 다음과 같이 사진을 게임으로 가져올 수 있습니다
-
+
내보내기를 초기화하는 중...
-
+
@@ -1524,45 +1524,45 @@ Press 1 for Default View
%1
-
-
+
+
스냅매틱 사진 또는 세이브 파일이 선택되지 않았습니다
-
-
-
+
+
+
선택한 항목 삭제
-
+
선택한 스냅매틱 사진 및 세이브 파일을 삭제하시겠습니까?
-
+
선택한 모든 스냅매틱 사진 및 세이브 파일을 삭제하지 못했습니다
-
-
-
-
-
-
+
+
+
+
+
+
스냅매틱 사진이 선택되지 않았습니다
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1573,84 +1573,84 @@ Press 1 for Default View
%2
-
-
+
+
아바타 자격 부여
-
-
-
-
+
+
+
+
패치가 선택됨...
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
%2 파일의 %1 패치 파일입니다
-
+
%1 failed with...
%1이(가) 실패한 경우...
자격 부여
-
-
+
+
플레이어 변경...
-
+
%1 failed with...
%1이(가) 실패한 경우...
플레이어 변경
-
-
-
+
+
+
조직 변경...
-
+
올바른 스냅매틱 조직 아이디를 입력하지 못했습니다
-
+
%1 failed with...
%1이(가) 실패한 경우...
조직 변경
-
-
-
+
+
+
제목 변경...
-
+
올바른 스냅매틱 제목을 입력하지 못했습니다
-
+
%1 failed with...
%1이(가) 실패한 경우...
@@ -1753,37 +1753,37 @@ Press 1 for Default View
삭제
-
+
보기(&V)
-
+
내보내기(&E)
-
+
삭제(&R)
-
+
선택(&S)
-
+
선택 해제(&D)
-
+
모두 선택(&A)
-
+
모두 선택 해제(&D)
@@ -1879,11 +1879,11 @@ Press 1 for Default View
-
-
-
-
-
+
+
+
+
+
@@ -1965,48 +1965,48 @@ Press 1 for Default View
취소(&C)
-
+
< h4>저장되지 않은 변경 내용이 감지되었습니다. </h4>그만두기 전에 JSON 콘텐츠를 저장하겠습니까?
-
+
%1로 인해 스냅매틱 속성을 패치하지 못했습니다
-
-
+
+
I/O 오류로 인해 스냅매틱 속성을 패치하지 못했습니다
-
+
JSON 오류로 인해 스냅매틱 속성을 패치하지 못했습니다
-
+
조직 스냅매틱
-
+
새로운 조직 스냅매틱:
-
+
스냅매틱 제목
-
+
새로운 스냅매틱 제목:
@@ -2066,19 +2066,19 @@ Press 1 for Default View
SnapmaticPicture
-
+
JSON이 불안정하고 형식이 잘못되었습니다
-
+
JSON이 불안정합니다
-
+
잘못된 JSON 형식
@@ -2186,52 +2186,52 @@ Press 1 for Default View
삭제
-
+
편집(&T)
-
+
인게임에서 보이기(&I)
-
+
인게임에서 숨기기(&I)
-
+
내보내기(&E)
-
+
보기(&V)
-
+
삭제(&R)
-
+
선택(&S)
-
+
선택 해제(&D)
-
+
모두 선택(&A)
-
+
모두 선택 해제(&D)
@@ -2414,7 +2414,7 @@ Press 1 for Default View
-
+
@@ -2451,15 +2451,15 @@ Press 1 for Default View
플레이어 변경(&P)...
-
-
+
+
인게임 보이기
-
-
+
+
인게임 숨기기
diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts
index ca646eb..a84cf99 100644
--- a/res/gta5sync_ru.ts
+++ b/res/gta5sync_ru.ts
@@ -180,8 +180,8 @@ Pictures and Savegames
ImageEditorDialog
-
-
+
+
@@ -213,13 +213,13 @@ Pictures and Savegames
&Закрыть
-
+
Не удалось изменить картинку Snapmatic из-за ошибки ввода-вывода
-
+
Не удалось изменить картинку Snapmatic из-за ошибки Image Error
@@ -367,14 +367,14 @@ Pictures and Savegames
-
+
Custom Avatar Description in SC, don't use Special Character!
Свой Аватар
-
+
Custom Picture Description in SC, don't use Special Character!
Своя Картинка
@@ -507,7 +507,7 @@ When you want to use it as Avatar the image will be detached!
&Закрыть
-
+
Ошибка JSON
@@ -520,57 +520,57 @@ When you want to use it as Avatar the image will be detached!
Просмотрщик карты Snapmatic
-
+
Закрыть просмотрщик
-
+
&Закрыть
-
+
Применить новую позицию
-
+
&Применить
-
+
Вернуть старую позицию
-
+
&Откатить
-
+
Выбрать новую позицию
-
+
&Выбрать
-
+
Покинуть выбор позиции
-
+
&Готово
-
+
X and Y position
@@ -724,26 +724,26 @@ Y: %2
-
-
-
-
-
-
+
+
+
+
+
+
Найдено: %1
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Язык: %1
@@ -764,7 +764,7 @@ Y: %2
-
+
Участвовать в пользовательской статистике %1
@@ -797,8 +797,8 @@ Y: %2
-
-
+
+
Номер участника: %1
@@ -852,8 +852,8 @@ Y: %2
-
-
+
+
Сейчас: %1
@@ -885,95 +885,95 @@ Y: %2
От&мена
-
+
System in context of System default
Система
-
+
Next closest language compared to the Game settings
%1 (Язык игры)
-
-
+
+
Next closest language compared to the Interface
%1 (Совпадает с интерфейсом)
-
-
-
+
+
+
Automatic language choice.
Автоматически
-
+
First language a person can talk with a different person/application. "Native" or "Not Native".
%1 (Приоритетный язык)
-
+
%1
%1
-
+
Другая папка будет загружена после перезапуска %1.
-
+
Посмотреть пользовательскую статистику %1 онлайн
-
+
Не зарегистрирован
-
-
-
-
+
+
+
+
Да
-
-
+
+
Нет
-
-
+
+
Настройка от ОС
-
-
+
+
Настройка от Steam
-
+
No Profile, as default
Нет профиля
-
-
-
+
+
+
Профиль: %1
@@ -1023,37 +1023,37 @@ Y: %2
Экспортировать
-
-
+
+
Экспортировать как &картинку...
-
-
+
+
Экспортировать как &Snapmatic...
-
-
+
+
&Перезаписать картинку...
-
-
+
+
&Изменить свойства...
-
-
+
+
Открыть &карту...
-
+
@@ -1062,39 +1062,39 @@ Arrow Keys - Navigate
Стрелки - Навигация
-
-
+
+
Просмотрщик фотографий Snapmatic
-
-
+
+
Ошибка при %1
-
-
+
+
Вне банды
-
-
+
+
Игроков нет
-
+
Режим просмотра аватарок
Нажмите 1 для стандартного просмотра
-
+
Неизвестное место
@@ -1196,8 +1196,8 @@ Press 1 for Default View
Картинки Snapmatic (PRDR*)
-
-
+
+
Открыть &редактор JSON...
@@ -1230,28 +1230,28 @@ Press 1 for Default View
&Отмена
-
+
Добавить игроков...
-
+
Невозможно добавить больше игроков из-за ограничения в %1!
-
-
+
+
Добавить игрока...
-
+
Введите идентификатор игрока из Social Club
-
+
Нельзя повторно добавить игрока %1, %1 уже добавлен!
@@ -1299,12 +1299,12 @@ Press 1 for Default View
Загрузка...
-
+
Загрузчик Snapmatic
-
+
Change wording if the %1 is not a multiline beginning at new line
@@ -1313,23 +1313,23 @@ Press 1 for Default View
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Импортировать...
@@ -1344,13 +1344,13 @@ Press 1 for Default View
Импортировать
-
+
Файлы сохранения (SRDR*)
-
+
Картинка Snapmatic (PRDR*)
@@ -1358,19 +1358,19 @@ Press 1 for Default View
-
+
Все файлы (**)
-
-
+
+
Импортируются файлы %1 из %2
-
+
@@ -1379,20 +1379,20 @@ Press 1 for Default View
%1
-
+
Не удалось загрузить картинку Snapmatic
-
+
Не удалось загрузить файл сохранения
-
-
+
+
Выбранный файл неверен
@@ -1403,145 +1403,145 @@ Press 1 for Default View
Включенные картинки: %1 из %2
-
+
Файлы для импорта (%1)
-
+
Все файлы изображений (%1)
-
+
Не удалось открыть %1, файл не может быть открыт
-
+
Не получилось импортировать %1, файл не может быть правильно обработан
-
+
Не получилось импортировать %1, не удалось определить формат файла
-
+
Не удалось импортировать картинку Snapmatic, название не начинается с PRDR или не заканчивается с .r5e
-
+
Не удалось импортировать картинку Snapmatic, не получилось скопировать файл в профиль
-
+
Не удалось импортировать сохранение, не получилось скопировать файл в профиль
-
+
Не удалось импортировать сохранение, нет пустых ячеек под сохранения
-
-
+
+
Картинки JPG и GTA Snapmatic
-
-
+
+
Только картинки JPG
-
-
+
+
Только GTA Snapmatic
-
+
Подготовка к экспорту...
-
-
+
+
Не выделены ни один Snapmatic или сохранение
-
-
-
+
+
+
Снять выделение
-
+
Точно ли хочешь удалить выбранные картинки Snapmatic и файлы сохранений?
-
+
Подготовка данных к импорту...
-
-
+
+
Пометить как Аватар
-
-
-
-
-
-
+
+
+
+
+
+
Не выделена ни одна картинка Snapmatic
-
-
-
-
+
+
+
+
Пропатчить выделенные...
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Изменяется файл %1 из %2
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1551,86 +1551,86 @@ Press 1 for Default View
%2
-
+
Можно использовать слово "приписать"
-
+
Не удалось удалить все выделенные картинки Snapmatic и/или сохранения
-
+
%1 failed with...
Помечание
-
-
+
+
Изменить игроков...
-
+
%1 failed with...
Измение игроков
-
-
-
+
+
+
Изменить банду...
-
+
Введённый идентификатор банды не верен
-
+
%1 failed with...
Изменение банды
-
-
-
+
+
+
Изменить заголовок...
-
+
Введённый заголовок не верен
-
+
%1 failed with...
Изменение заголовка
-
+
%1Эскпортировать картинки Snapmatic%2<br><br>Картинки JPG можно открыть любым просмотрщиком<br>Картинки формата GTA Snapmatic можно снова импортировать в игру<br><br>Экспортировать как:
-
-
-
-
-
+
+
+
+
+
Экпортировать выделенное...
-
+
@@ -1651,7 +1651,7 @@ Press 1 for Default View
Все файлы профиля (*.r5e SRDR* PRDR*)
-
+
RDR 2 Export (*.r5e)
@@ -1791,32 +1791,32 @@ Press 1 for Default View
Не удалось удалить сохранение %1
-
+
&Просмотр
-
+
&Удалить
-
+
&Выбрать
-
+
Сн&ять выбор
-
+
В&ыбрать все
-
+
Снять выбо&р со всех
@@ -1826,7 +1826,7 @@ Press 1 for Default View
Копировать сохранение
-
+
&Экспортировать
@@ -1874,11 +1874,11 @@ Press 1 for Default View
-
-
-
-
-
+
+
+
+
+
@@ -1930,7 +1930,7 @@ Press 1 for Default View
Meme
-
+
Заголовок Snapmatic
@@ -2013,42 +2013,42 @@ Press 1 for Default View
Нет
-
+
<h4>Несохранённые изменения</h4>Сохранить изменения в JSON перед выходом?
-
+
Не удалось изменить свойства Snapmatic из-за %1
-
+
Не удалось измененить свойства Snapmatic из-за ошибки JSON
-
-
+
+
Не удалось измененить свойства Snapmatic из-за проблемы ввода/вывода
-
+
Новый заголовок Snapmatic:
-
+
Банда на Snapmatic
-
+
Новая банда на Snapmatic:
@@ -2103,19 +2103,19 @@ Press 1 for Default View
Чтение из файла %1 из-за %2
-
+
JSON не полный и повреждён
-
+
JSON частично отсутствует
-
+
JSON повреждён
@@ -2186,52 +2186,52 @@ Press 1 for Default View
Не удалось показать %1 в списке картинок Snapmatic в игре
-
+
&Правка
-
+
Показывать в &игре
-
+
Ск&рыть в игре
-
+
&Экспорт
-
+
По&казать
-
+
У&далить
-
+
&Выделить
-
+
Сн&ять выделение
-
+
В&ыбрать все
-
+
Снять выбо&р со всех
@@ -2422,7 +2422,7 @@ Press 1 for Default View
-
+
@@ -2465,15 +2465,15 @@ Press 1 for Default View
Пере&загрузить
-
-
+
+
Показывать в игре
-
-
+
+
Скрыть в игре
diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts
index f6c7401..d427a44 100644
--- a/res/gta5sync_uk.ts
+++ b/res/gta5sync_uk.ts
@@ -204,21 +204,21 @@ Pictures and Savegames
&Закрити
-
-
+
+
Редактор Snapmatic зображень
-
+
Виправлення Snapmatic зображення не вдалося через I/O Error
-
+
Виправлення Snapmatic зображення не вдалося через помилку картинки
@@ -356,14 +356,14 @@ Pictures and Savegames
-
+
Custom Avatar Description in SC, don't use Special Character!
Користувацький Аватар
-
+
Custom Picture Description in SC, don't use Special Character!
Користувацьке Зображення
@@ -503,7 +503,7 @@ When you want to use it as Avatar the image will be detached!
&Закрити
-
+
JSON помилка
@@ -516,57 +516,57 @@ When you want to use it as Avatar the image will be detached!
Перегляд карти Snapmatic
-
+
Закрити переглядач
-
+
&Закрити
-
+
Застосувати нову позицію
-
+
&Застосувати
-
+
Повернути стару позицію
-
+
&Повернути
-
+
Виберіть нову позицію
-
+
&Виділення
-
+
Вийти з вибору позиції
-
+
&Готово
-
+
X and Y position
@@ -720,26 +720,26 @@ Y: %2
-
-
-
-
-
-
+
+
+
+
+
+
Знайдено:%1
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Мова: %1
@@ -761,7 +761,7 @@ Y: %2
-
+
Опитування %1 про устаткування ПК
@@ -797,8 +797,8 @@ Y: %2
-
-
+
+
ID учасника : %1
@@ -820,8 +820,8 @@ Y: %2
-
-
+
+
Зараз: %1
@@ -878,95 +878,95 @@ Y: %2
&Скасувати
-
+
System in context of System default
Як у системи
-
+
Next closest language compared to the Game settings
%1 (Мова гри)
-
-
+
+
Next closest language compared to the Interface
%1 (Співпадає з інтерфейсом)
-
-
-
+
+
+
Automatic language choice.
Автоматично
-
+
First language a person can talk with a different person/application. "Native" or "Not Native".
%1 (пріоритет мови)
-
+
%1
%1
-
+
Нова користувацька папка буде ініціалізована після перезапуску %1.
-
+
No Profile, as default
Жодного
-
-
-
+
+
+
Профіль: %1
-
+
Переглянути користувацьку статистику %1 онлайн
-
+
Не зареєстрований
-
-
-
-
+
+
+
+
Так
-
-
+
+
Ні
-
-
+
+
Визначається ОС
-
-
+
+
Визначається Steam
@@ -1010,43 +1010,43 @@ Y: %2
&Закрити
-
-
+
+
Експортувати як &зображення...
-
-
+
+
Експортувати як &Snapmatic...
-
-
+
+
&Змінити властивості...
-
-
+
+
&Перезаписати зображення...
-
-
+
+
Відкрити &карту...
-
-
+
+
Відкрити редактор &JSON...
-
+
@@ -1055,37 +1055,37 @@ Arrow Keys - Navigate
Стрілки - Навігація
-
-
+
+
Переглядач фотографій Snapmatic
-
-
+
+
Помилка на%1
-
-
+
+
Гравців немає
-
-
+
+
Банди немає
-
+
Невідома локація
-
+
Режим для аватарок
@@ -1223,28 +1223,28 @@ Press 1 for Default View
&Скасувати
-
+
Додати гравців...
-
+
Не вдалося додати більше гравців, бо ліміт %1!
-
-
+
+
Додати гравця...
-
+
Введіть ID гравця Social Club
-
+
Не вдалося додати гравця %1, оскільки %1 вже доданий!
@@ -1296,23 +1296,23 @@ Press 1 for Default View
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Імпортування...
@@ -1329,14 +1329,14 @@ Press 1 for Default View
-
+
Файли зображень (%1)
-
+
Усі файли (**)
@@ -1344,14 +1344,14 @@ Press 1 for Default View
-
+
Неможливо імпортувати %1, оскільки файл не може бути відкритий
-
+
Неможливо імпортувати %1, оскільки файл неможливо розібрати правильно
@@ -1366,53 +1366,53 @@ Press 1 for Default View
Завантаження...
-
+
Snapmatic Loader
-
+
<h4>Наступні Snapmatic зображення були відновлені</h4>%1
-
+
Імпортуються файли (%1)
-
+
RDR 2 Export (*.r5e)
-
+
Файли збереження гри (SRDR*)
-
+
Snapmatic зображення (PRDR*)
-
-
+
+
Вибрані недійсні файли
-
-
+
+
Імпортується файл %1 з %2 файлів
-
+
@@ -1421,81 +1421,81 @@ Press 1 for Default View
%1
-
+
Не вдалося прочитати Snapmatic картинку
-
+
Не вдалося прочитати файл збереження гри
-
+
Неможливо імпортувати%1, оскільки формат файлу не може бути виявлений
-
+
Не вдалося імпортувати зображення Snapmatic, файл не починається з PRDR або закінчується .r5e
-
+
Не вдалося імпортувати зображення Snapmatic, не можна скопіювати файл у профіль
-
+
Не вдалося імпортувати Сейв, не можна скопіювати файл у профіль
-
+
Не вдалося імпортувати Сейв, немає вільного слота
-
-
-
-
-
+
+
+
+
+
Експорт обраних...
-
-
+
+
JPG картинки і GTA Snapmatic
-
-
+
+
Тільки JPG картинки
-
-
+
+
Тільки GTA Snapmatic
-
+
%1 Експортувати Snapmatic фотографії %2 <br><br> Фотографії JPG дозволяють відкривати зображення за допомогою засобу перегляду зображень<br>GTA Snapmatic дає змогу імпортувати зображення в гру<br><br>Експортувати як:
-
+
Ініціалізація експорту...
-
+
@@ -1504,45 +1504,45 @@ Press 1 for Default View
%1
-
-
+
+
Не вибрано жодного Snapmatic зображення або файлу збереження
-
-
-
+
+
+
Видалити вибрані
-
+
Ви дійсно хочете видалити вибрані Snapmatic фотографії та файли збереження гри?
-
+
Не вдалося видалити всі обрані Snapmatic фотографії та/або Сейви
-
-
-
-
-
-
+
+
+
+
+
+
Не вибрано жодного Snapmatic зображення
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1552,91 +1552,91 @@ Press 1 for Default View
%2
-
+
Підготувати контент для імпорту ...
-
+
Snapmatic зображення з uid %1 вже існує, ви хочете призначити для імпорту новий uid та мітку часу?
-
-
+
+
Позначити як Аватар
-
-
-
-
+
+
+
+
Вибір патчу...
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Патч файлу %1 з %2 файлів
-
+
%1 failed with...
Якість
-
-
+
+
Зміна гравців...
-
+
%1 failed with...
Змінити гравців
-
-
-
+
+
+
Зміна банди...
-
+
Не вдалося ввести дійсний ID Банди Snapmatic
-
+
%1 failed with...
Змінити банду
-
-
-
+
+
+
Зміна назви...
-
+
Не вдалося ввести дійсний заголовок Snapmatic
-
+
%1 failed with...
Змінити назву
@@ -1738,37 +1738,37 @@ Press 1 for Default View
Видалити
-
+
&Перегляд
-
+
&Експорт
-
+
&Видалення
-
+
&Виділення
-
+
&Зняти виділення
-
+
Вибрати &усі
-
+
&Зняти виділення усіх
@@ -1864,11 +1864,11 @@ Press 1 for Default View
-
-
-
-
-
+
+
+
+
+
@@ -1950,48 +1950,48 @@ Press 1 for Default View
&Скасувати
-
+
<h4> Виявлені незбережені зміни </h4> Ви хочете зберегти вміст JSON перед тим, як вийти?
-
+
Змінити властивості Snapmatic не вдалося тому що%1
-
-
+
+
Змінити властивості Snapmatic не вдалося через I/O Помилку
-
+
Змінити властивості Snapmatic не вдалося через JSON Помилку
-
+
Snapmatic банда
-
+
Нова Snapmatic банда:
-
+
Snapmatic назва
-
+
Новий Snapmatic заголовок:
@@ -2047,19 +2047,19 @@ Press 1 for Default View
SnapmaticPicture
-
+
JSON неповний та неправильний
-
+
JSON неповний
-
+
JSON неправильний
@@ -2166,52 +2166,52 @@ Press 1 for Default View
Видалити
-
+
Редагува&ти
-
+
Показати &у грі
-
+
Сховати &у грі
-
+
&Експортувати
-
+
&Переглянути
-
+
&Видалити
-
+
&Виділення
-
+
&Зняти виділення
-
+
Вибрати &усі
-
+
&Зняти виділення усіх
@@ -2394,7 +2394,7 @@ Press 1 for Default View
-
+
@@ -2431,15 +2431,15 @@ Press 1 for Default View
Змінити &гравців...
-
-
+
+
Показати у грі
-
-
+
+
Сховати у грі
diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts
index 54c8e22..86f32c7 100644
--- a/res/gta5sync_zh_TW.ts
+++ b/res/gta5sync_zh_TW.ts
@@ -200,21 +200,21 @@ Pictures and Savegames
關閉(&C)
-
-
+
+
Snapmatic 圖片編輯器
-
+
I/O 錯誤,Snapmatic 圖片更新失敗
-
+
圖片錯誤,Snapmatic 圖片更新失敗
@@ -352,14 +352,14 @@ Pictures and Savegames
-
+
Custom Avatar Description in SC, don't use Special Character!
自訂大頭貼
-
+
Custom Picture Description in SC, don't use Special Character!
自訂圖片
@@ -498,7 +498,7 @@ When you want to use it as Avatar the image will be detached!
關閉(&C)
-
+
JSON 錯誤
@@ -511,57 +511,57 @@ When you want to use it as Avatar the image will be detached!
Snapmatic 地圖檢視器
-
+
關閉檢視器
-
+
關閉(&C)
-
+
套用新位置
-
+
套用(&A)
-
+
還原舊位置
-
+
還原(&R)
-
+
選擇新位置
-
+
選擇(&S)
-
+
離開位置選擇
-
+
完成(&D)
-
+
X and Y position
@@ -715,26 +715,26 @@ Y: %2
-
-
-
-
-
-
+
+
+
+
+
+
找到: %1
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
語言: %1
@@ -755,7 +755,7 @@ Y: %2
-
+
參與 %1 使用者統計
@@ -791,8 +791,8 @@ Y: %2
-
-
+
+
參與 ID: %1
@@ -814,8 +814,8 @@ Y: %2
-
-
+
+
目前: %1
@@ -872,95 +872,95 @@ Y: %2
取消(&C)
-
+
System in context of System default
系統
-
-
+
+
Next closest language compared to the Interface
%1 (與介面接近的語言)
-
-
-
+
+
+
Automatic language choice.
自動
-
+
First language a person can talk with a different person/application. "Native" or "Not Native".
%1 (語言優先)
-
+
Next closest language compared to the Game settings
%1 (遊戲語言)
-
+
%1
%1
-
+
自訂資料夾將在 %1 重新啟動後初始化.
-
+
No Profile, as default
無
-
-
-
+
+
+
設定檔: %1
-
+
檢視 %1 使用者統計資訊
-
+
未註冊參與
-
-
-
-
+
+
+
+
是
-
-
+
+
否
-
-
+
+
系統定義
-
-
+
+
Steam 定義
@@ -1004,43 +1004,43 @@ Y: %2
關閉(&C)
-
-
+
+
匯出成圖片(&P)...
-
-
+
+
匯出成 Snapmatic(&S)...
-
-
+
+
編輯屬性(&E) ...
-
-
+
+
修改圖片(&O)...
-
-
+
+
開啟地圖檢視器(&M)...
-
-
+
+
開啟 JSON 編輯器(&J)...
-
+
@@ -1049,37 +1049,37 @@ Arrow Keys - Navigate
方向鍵 - 導覽
-
-
+
+
Snapmatic 圖片檢視器
-
-
+
+
失敗: %1
-
-
+
+
無
-
-
+
+
無
-
+
未知地點
-
+
大頭貼預覽模式
@@ -1217,28 +1217,28 @@ Press 1 for Default View
取消(&C)
-
+
新增玩家...
-
+
因為數量限制 %1,無法新增更多玩家!
-
-
+
+
新增玩家...
-
+
輸入玩家的 Social Club ID
-
+
新增 %1 失敗,因為 %1 已被新增!
@@ -1290,23 +1290,23 @@ Press 1 for Default View
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
匯入...
@@ -1323,14 +1323,14 @@ Press 1 for Default View
-
+
所有圖片 (%1)
-
+
所有檔案 (**)
@@ -1338,14 +1338,14 @@ Press 1 for Default View
-
+
無法匯入 %1,因為檔案無法開啟
-
+
無法匯入 %1,因為檔案無法正確解析
@@ -1360,179 +1360,179 @@ Press 1 for Default View
載入中...
-
+
Snapmatic 載入器
-
+
<h4>下列的 Snapmatic 圖片已被更新</h4>%1
-
+
可匯入的檔案 (%1)
-
+
RDR 2 Export (*.r5e)
-
+
遊戲存檔 (SRDR*)
-
+
Snapmatic 圖片 (PRDR*)
-
-
+
+
沒有選擇有效的檔案
-
-
+
+
匯入檔案 %1 共 %2 個
-
+
%1 匯入失敗
-
+
無法讀取 Snapmatic 圖片
-
+
無法讀取遊戲存檔
-
+
無法匯入 %1,因為無法檢測該檔案格式
-
+
匯入 Snapmatic 圖片失敗,檔案不是 PRDR 開頭或附檔名不是 .r5e
-
+
匯入 Snapmatic 圖片失敗,無法將該檔案複製到設定檔中
-
+
匯入遊戲存檔失敗,無法將該檔案複製到設定檔中
-
+
匯入遊戲存檔失敗,沒有遊戲存檔欄位
-
-
-
-
-
+
+
+
+
+
匯出所選...
-
-
+
+
JPG 圖片和 GTA Snapmatic
-
-
+
+
只有 JPG 圖片
-
-
+
+
只有 GTA Snapmatic
-
+
%1 匯出 Snapmatic 圖片 %2<br><br>JPG 圖片可使用圖片檢視器開啟<br>GTA Snapmatic 可以匯入到遊戲中<br><br>匯出成:
-
+
初始化...
-
+
%1 匯出失敗
-
-
+
+
未選擇 Snapmatic 圖片或遊戲存檔
-
-
-
+
+
+
移除所選
-
+
你想移除所選的 Snapmatic 圖片/存檔嗎?
-
+
無法移除所選擇的 Snapmatic 圖片/遊戲存檔
-
-
-
-
-
-
+
+
+
+
+
+
未選擇 Snapmatic 圖片
-
-
-
-
-
-
+
+
+
+
+
+
@@ -1542,91 +1542,91 @@ Press 1 for Default View
%2
-
+
準備匯入內容...
-
+
已有與 uid %1 相同的 Snapmatic 圖片,你想要匯入新的 uid 和時間戳嗎?
-
-
+
+
合格大頭貼
-
-
-
-
+
+
+
+
修改所選...
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
修改檔案 %1 共 %2 個檔案
-
+
%1 failed with...
合格
-
-
+
+
更改玩家...
-
+
%1 failed with...
更改玩家
-
-
-
+
+
+
更改幫會...
-
+
輸入了無效的幫會 ID
-
+
%1 failed with...
更改幫會
-
-
-
+
+
+
更改標題...
-
+
輸入了無效的標題
-
+
%1 failed with...
更改標題
@@ -1728,37 +1728,37 @@ Press 1 for Default View
刪除
-
+
檢視(&V)
-
+
匯出(&E)
-
+
移除(&R)
-
+
選擇(&S)
-
+
取消選擇(&D)
-
+
選擇全部(&A)
-
+
取消選擇全部(&D)
@@ -1854,11 +1854,11 @@ Press 1 for Default View
-
-
-
-
-
+
+
+
+
+
@@ -1940,48 +1940,48 @@ Press 1 for Default View
取消(&C)
-
+
<h4>目前的變更未儲存</h4> 你想要在退出之前儲存 JSON 嗎?
-
+
更新 Snapmatic 屬性失敗,因為 %1
-
-
+
+
讀寫錯誤,未能更新 Snapmatic 屬性
-
+
JSON 錯誤,未能更新 Snapmatic 屬性
-
+
幫會
-
+
輸入新的幫會:
-
+
標題
-
+
輸入新的標題:
@@ -2037,19 +2037,19 @@ Press 1 for Default View
SnapmaticPicture
-
+
JSON 不完整和異常
-
+
JSON 不完整
-
+
JSON 異常
@@ -2156,52 +2156,52 @@ Press 1 for Default View
刪除
-
+
編輯(&E)
-
+
在遊戲中顯示(&I)
-
+
在遊戲中隱藏(&I)
-
+
匯出(&E)
-
+
檢視(&V)
-
+
移除(&R)
-
+
選擇(&S)
-
+
取消選擇(&D)
-
+
選擇全部(&A)
-
+
取消選擇全部(&D)
@@ -2383,7 +2383,7 @@ Press 1 for Default View
-
+
@@ -2420,15 +2420,15 @@ Press 1 for Default View
更改玩家(&P)...
-
-
+
+
在遊戲中顯示
-
-
+
+
在遊戲中隱藏