diff --git a/AboutDialog.cpp b/AboutDialog.cpp index 2e58a9d..642f9f7 100644 --- a/AboutDialog.cpp +++ b/AboutDialog.cpp @@ -29,7 +29,11 @@ AboutDialog::AboutDialog(QWidget *parent) : ui(new Ui::AboutDialog) { // Set Window Flags +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#endif // Build Strings QString appVersion = QApplication::applicationVersion(); diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e6ee10..08824db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,7 +47,6 @@ endif() list(APPEND GTA5VIEW_DEFINES -DGTA5SYNC_CMAKE -DGTA5SYNC_PROJECT - -DSNAPMATIC_NODEFAULT ) set(GTA5VIEW_SOURCES diff --git a/ImportDialog.cpp b/ImportDialog.cpp index a32f45b..369e1cf 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -49,7 +49,11 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) : ui(new Ui::ImportDialog) { // Set Window Flags +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#endif ui->setupUi(this); ui->cmdOK->setDefault(true); diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp index 9706934..ae13966 100644 --- a/JsonEditorDialog.cpp +++ b/JsonEditorDialog.cpp @@ -28,7 +28,6 @@ #if QT_VERSION >= 0x050200 #include -#include #endif #ifdef GTA5SYNC_TELEMETRY @@ -40,29 +39,30 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : ui(new Ui::JsonEditorDialog) { // Set Window Flags +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::WindowContextHelpButtonHint, false); + setWindowFlag(Qt::WindowMinMaxButtonsHint, true); +#else setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowMinMaxButtonsHint); +#endif ui->setupUi(this); ui->cmdClose->setDefault(true); ui->cmdClose->setFocus(); // Set Icon for Close Button - if (QIcon::hasThemeIcon("dialog-close")) - { + if (QIcon::hasThemeIcon("dialog-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); } - else if (QIcon::hasThemeIcon("gtk-close")) - { + else if (QIcon::hasThemeIcon("gtk-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("gtk-close")); } // Set Icon for Save Button - if (QIcon::hasThemeIcon("document-save")) - { + if (QIcon::hasThemeIcon("document-save")) { ui->cmdSave->setIcon(QIcon::fromTheme("document-save")); } - else if (QIcon::hasThemeIcon("gtk-save")) - { + else if (QIcon::hasThemeIcon("gtk-save")) { ui->cmdSave->setIcon(QIcon::fromTheme("gtk-save")); } @@ -99,8 +99,7 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : ui->hlButtons->setContentsMargins(9 * screenRatio, 0, 9 * screenRatio, 0); ui->vlInterface->setContentsMargins(0, 0, 0, 9 * screenRatio); #endif - if (screenRatio > 1) - { + if (screenRatio > 1) { ui->lineJSON->setMinimumHeight(qRound(1 * screenRatio)); ui->lineJSON->setMaximumHeight(qRound(1 * screenRatio)); ui->lineJSON->setLineWidth(qRound(1 * screenRatio)); @@ -121,28 +120,22 @@ void JsonEditorDialog::closeEvent(QCloseEvent *ev) QJsonDocument jsonOriginal = QJsonDocument::fromJson(jsonCode.toUtf8()); QString originalCode = QString::fromUtf8(jsonOriginal.toJson(QJsonDocument::Compact)); QString newCode = QString::fromUtf8(jsonNew.toJson(QJsonDocument::Compact)); - if (newCode != originalCode) - { + if (newCode != originalCode) { QMessageBox::StandardButton button = QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("

Unsaved changes detected

You want to save the JSON content before you quit?"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Cancel); - if (button == QMessageBox::Yes) - { - if (saveJsonContent()) - { + if (button == QMessageBox::Yes) { + if (saveJsonContent()) { ev->accept(); } - else - { + else { ev->ignore(); } return; } - else if (button == QMessageBox::No) - { + else if (button == QMessageBox::No) { ev->accept(); return; } - else - { + else { ev->ignore(); return; } @@ -153,47 +146,38 @@ bool JsonEditorDialog::saveJsonContent() { QString jsonPatched = QString(ui->txtJSON->toPlainText()).replace("\t", " "); QJsonDocument jsonNew = QJsonDocument::fromJson(jsonPatched.toUtf8()); - if (!jsonNew.isEmpty()) - { + if (!jsonNew.isEmpty()) { QJsonDocument jsonOriginal = QJsonDocument::fromJson(jsonCode.toUtf8()); QString originalCode = QString::fromUtf8(jsonOriginal.toJson(QJsonDocument::Compact)); QString newCode = QString::fromUtf8(jsonNew.toJson(QJsonDocument::Compact)); - if (newCode != originalCode) - { + if (newCode != originalCode) { QString currentFilePath = smpic->getPictureFilePath(); QString originalFilePath = smpic->getOriginalPictureFilePath(); QString backupFileName = originalFilePath % ".bak"; - if (!QFile::exists(backupFileName)) - { + if (!QFile::exists(backupFileName)) { QFile::copy(currentFilePath, backupFileName); } smpic->setJsonStr(newCode, true); - if (!smpic->isJsonOk()) - { + if (!smpic->isJsonOk()) { QString lastStep = smpic->getLastStep(false); QString readableError; - if (lastStep.contains("JSONINCOMPLETE") && lastStep.contains("JSONERROR")) - { + if (lastStep.contains("JSONINCOMPLETE") && lastStep.contains("JSONERROR")) { readableError = SnapmaticPicture::tr("JSON is incomplete and malformed"); } - else if (lastStep.contains("JSONINCOMPLETE")) - { + else if (lastStep.contains("JSONINCOMPLETE")) { readableError = SnapmaticPicture::tr("JSON is incomplete"); } - else if (lastStep.contains("JSONERROR")) - { + else if (lastStep.contains("JSONERROR")) { readableError = SnapmaticPicture::tr("JSON is malformed"); } - else - { + else { readableError = tr("JSON Error"); } QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of %1").arg(readableError)); smpic->setJsonStr(originalCode, true); return false; } - if (!smpic->exportPicture(currentFilePath)) - { + if (!smpic->exportPicture(currentFilePath)) { QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of I/O Error")); smpic->setJsonStr(originalCode, true); return false; @@ -206,8 +190,7 @@ bool JsonEditorDialog::saveJsonContent() telemetrySettings.beginGroup("Telemetry"); bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); telemetrySettings.endGroup(); - if (pushUsageData && Telemetry->canPush()) - { + if (pushUsageData && Telemetry->canPush()) { QJsonDocument jsonDocument; QJsonObject jsonObject; jsonObject["Type"] = "JSONEdited"; @@ -225,8 +208,7 @@ bool JsonEditorDialog::saveJsonContent() } return true; } - else - { + else { QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of JSON Error")); return false; } @@ -240,7 +222,5 @@ void JsonEditorDialog::on_cmdClose_clicked() void JsonEditorDialog::on_cmdSave_clicked() { if (saveJsonContent()) - { close(); - } } diff --git a/MapLocationDialog.cpp b/MapLocationDialog.cpp index 7268165..801177a 100644 --- a/MapLocationDialog.cpp +++ b/MapLocationDialog.cpp @@ -29,7 +29,11 @@ MapLocationDialog::MapLocationDialog(double x, double y, QWidget *parent) : ui(new Ui::MapLocationDialog) { // Set Window Flags +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#endif ui->setupUi(this); ui->cmdDone->setVisible(false); @@ -45,12 +49,10 @@ MapLocationDialog::MapLocationDialog(double x, double y, QWidget *parent) : ui->vlMapDialog->setSpacing(widgetMargin); setMinimumSize(500 * screenRatio, 600 * screenRatio); setMaximumSize(500 * screenRatio, 600 * screenRatio); - setFixedSize(500 * screenRatio, 600 * screenRatio); setMouseTracking(true); changeMode = false; propUpdate = false; - drawPointOnMap(xpos_old, ypos_old); } MapLocationDialog::~MapLocationDialog() @@ -66,6 +68,22 @@ void MapLocationDialog::drawPointOnMap(double xpos_d, double ypos_d) repaint(); } +void MapLocationDialog::setCayoPerico(bool isCayoPerico) +{ + qreal screenRatio = AppEnv::screenRatio(); + p_isCayoPerico = isCayoPerico; + if (isCayoPerico) { + setMinimumSize(500 * screenRatio, 500 * screenRatio); + setMaximumSize(500 * screenRatio, 500 * screenRatio); + ui->hlMapDialog->removeItem(ui->vlMapDialog); + ui->hlMapDialog->insertLayout(0, ui->vlMapDialog); + ui->hlMapDialog->removeItem(ui->vlPosLayout); + ui->hlMapDialog->addLayout(ui->vlPosLayout); + ui->labPos->setAlignment(Qt::AlignRight); + } + drawPointOnMap(xpos_old, ypos_old); +} + void MapLocationDialog::on_cmdChange_clicked() { qreal screenRatio = AppEnv::screenRatio(); @@ -85,45 +103,34 @@ void MapLocationDialog::on_cmdDone_clicked() { ui->cmdDone->setVisible(false); ui->cmdChange->setVisible(true); - if (xpos_new != xpos_old || ypos_new != ypos_old) - { + if (xpos_new != xpos_old || ypos_new != ypos_old) { ui->cmdApply->setVisible(true); ui->cmdRevert->setVisible(true); } - setCursor(Qt::ArrowCursor); changeMode = false; } -#if QT_VERSION >= 0x060000 void MapLocationDialog::updatePosFromEvent(double x, double y) { QSize mapPixelSize = size(); - double xpos_ad = x; - double ypos_ad = mapPixelSize.height() - y; - double xrat = 10000 / (double)mapPixelSize.width(); - double yrat = 12000 / (double)mapPixelSize.height(); - double xpos_rv = xrat * xpos_ad; - double ypos_rv = yrat * ypos_ad; - double xpos_fp = xpos_rv - 4000; - double ypos_fp = ypos_rv - 4000; - drawPointOnMap(xpos_fp, ypos_fp); + double x_per = x / mapPixelSize.width(); // get X % + double y_per = y / mapPixelSize.height(); // get Y % + double x_pos, y_pos; + if (p_isCayoPerico) { + x_pos = x_per * 2340; // 2340 is 100% for X (Cayo Perico) + y_pos = y_per * -2340; // -2340 is 100% for Y (Cayo Perico) + x_pos = x_pos + 3560; // +3560 gets corrected for X (Cayo Perico) + y_pos = y_pos - 3980; // -4000 gets corrected for Y (Cayo Perico) + } + else { + x_pos = x_per * 10000; // 10000 is 100% for X (Los Santos) + y_pos = y_per * -12000; // -12000 is 100% for Y (Los Santos) + x_pos = x_pos - 4000; // -4000 gets corrected for X (Los Santos) + y_pos = y_pos + 8000; // +8000 gets corrected for Y (Los Santos) + } + drawPointOnMap(x_pos, y_pos); } -#else -void MapLocationDialog::updatePosFromEvent(int x, int y) -{ - QSize mapPixelSize = size(); - int xpos_ad = x; - int ypos_ad = mapPixelSize.height() - y; - double xrat = 10000 / (double)mapPixelSize.width(); - double yrat = 12000 / (double)mapPixelSize.height(); - double xpos_rv = xrat * xpos_ad; - double ypos_rv = yrat * ypos_ad; - double xpos_fp = xpos_rv - 4000; - double ypos_fp = ypos_rv - 4000; - drawPointOnMap(xpos_fp, ypos_fp); -} -#endif void MapLocationDialog::paintEvent(QPaintEvent *ev) { @@ -132,73 +139,110 @@ void MapLocationDialog::paintEvent(QPaintEvent *ev) 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)); + QImage mapImage; + if (p_isCayoPerico) { + mapImage = QImage(":/img/mapcayoperico.jpg"); + } + else { + mapImage = QImage(":/img/mappreview.jpg"); + } + painter.setRenderHint(QPainter::SmoothPixmapTransform, true); + painter.drawImage(QRect(QPoint(0, 0), size()), mapImage); // Paint Marker + QSize mapPixelSize = size(); 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; + double xpos_mp, ypos_mp; + if (p_isCayoPerico) { + double xpos_per = xpos_new - 3560; // correct X in reserve + double ypos_per = ypos_new + 3980; // correct y in reserve + xpos_per = xpos_per / 2340; // divide 100% for X + ypos_per = ypos_per / -2340; // divide 100% for Y + xpos_mp = xpos_per * mapPixelSize.width(); // locate window width pos + ypos_mp = ypos_per * mapPixelSize.height(); // locate window height pos + } + else { + double xpos_per = xpos_new + 4000; // correct X in reserve + double ypos_per = ypos_new - 8000; // correct y in reserve + xpos_per = xpos_per / 10000; // divide 100% for X + ypos_per = ypos_per / -12000; // divide 100% for Y + xpos_mp = xpos_per * mapPixelSize.width(); // locate window width pos + ypos_mp = ypos_per * mapPixelSize.height(); // locate window height pos + } + long xpos_pr, ypos_pr; if (screenRatioPR != 1) { -#ifdef Q_OS_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 + ypos_pr = ypos_mp - pointMarkerHalfSize + screenRatioPR; } else { xpos_pr = xpos_mp - pointMarkerHalfSize; - ypos_pr = ypos_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); + painter.drawPixmap(xpos_pr, ypos_pr, pointMarkerSize, pointMarkerSize, mapMarkerPixmap); QDialog::paintEvent(ev); } void MapLocationDialog::mouseMoveEvent(QMouseEvent *ev) { - if (!changeMode) { ev->ignore(); } - else if (ev->buttons() & Qt::LeftButton) - { + if (!changeMode) { + ev->ignore(); + } + else if (ev->buttons() & Qt::LeftButton) { #if QT_VERSION >= 0x060000 - updatePosFromEvent(ev->position().x(), ev->position().y()); + const QPointF localPos = ev->position(); +#elif QT_VERSION >= 0x050000 + const QPointF localPos = ev->localPos(); #else - updatePosFromEvent(ev->x(), ev->y()); + const QPoint localPos = ev->pos(); +#endif +#ifdef Q_OS_WIN + qreal screenRatioPR = AppEnv::screenRatioPR(); + if (screenRatioPR != 1) { + updatePosFromEvent(localPos.x() - screenRatioPR, localPos.y() - screenRatioPR); + } + else { + updatePosFromEvent(localPos.x(), localPos.y()); + } +#else + updatePosFromEvent(localPos.x(), localPos.y()); #endif ev->accept(); } - else - { + else { ev->ignore(); } } void MapLocationDialog::mouseReleaseEvent(QMouseEvent *ev) { - if (!changeMode) { ev->ignore(); } - else if (ev->button() == Qt::LeftButton) - { + if (!changeMode) { + ev->ignore(); + } + else if (ev->button() == Qt::LeftButton) { #if QT_VERSION >= 0x060000 - updatePosFromEvent(ev->position().x(), ev->position().y()); + const QPointF localPos = ev->position(); +#elif QT_VERSION >= 0x050000 + const QPointF localPos = ev->localPos(); #else - updatePosFromEvent(ev->x(), ev->y()); + const QPointF localPos = ev->posF(); +#endif +#ifdef Q_OS_WIN + qreal screenRatioPR = AppEnv::screenRatioPR(); + if (screenRatioPR != 1) { + updatePosFromEvent(localPos.x() - screenRatioPR, localPos.y() - screenRatioPR); + } + else { + updatePosFromEvent(localPos.x(), localPos.y()); + } +#else + updatePosFromEvent(localPos.x(), localPos.y()); #endif ev->accept(); } - else - { + else { ev->ignore(); } } diff --git a/MapLocationDialog.h b/MapLocationDialog.h index ecf847b..22075a0 100644 --- a/MapLocationDialog.h +++ b/MapLocationDialog.h @@ -1,6 +1,6 @@ /***************************************************************************** * gta5view Grand Theft Auto V Profile Viewer -* Copyright (C) 2017 Syping +* Copyright (C) 2017-2021 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 @@ -33,6 +33,7 @@ class MapLocationDialog : public QDialog public: explicit MapLocationDialog(double x, double y, QWidget *parent = 0); void drawPointOnMap(double x, double y); + void setCayoPerico(bool isCayoPerico); bool propUpdated(); double getXpos(); double getYpos(); @@ -48,11 +49,7 @@ private slots: void on_cmdApply_clicked(); void on_cmdChange_clicked(); void on_cmdRevert_clicked(); -#if QT_VERSION >= 0x060000 void updatePosFromEvent(double x, double y); -#else - void updatePosFromEvent(int x, int y); -#endif void on_cmdClose_clicked(); private: @@ -62,6 +59,7 @@ private: double ypos_new; bool propUpdate; bool changeMode; + bool p_isCayoPerico; Ui::MapLocationDialog *ui; }; diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index a0b50db..321d705 100644 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -55,7 +55,11 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) : ui(new Ui::OptionsDialog) { // Set Window Flags +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#endif // Setup User Interface ui->setupUi(this); diff --git a/PictureDialog.cpp b/PictureDialog.cpp index b0541d8..dfd062f 100644 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -127,10 +127,20 @@ PictureDialog::PictureDialog(bool primaryWindow, ProfileDatabase *profileDB, Cre void PictureDialog::setupPictureDialog() { // Set Window Flags +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::WindowContextHelpButtonHint, false); + setWindowFlag(Qt::CustomizeWindowHint, true); +#else setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint^Qt::CustomizeWindowHint); +#endif #ifdef Q_OS_LINUX - // for stupid Window Manager (GNOME 3 should feel triggered) + // for stupid Window Manager like GNOME +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::Dialog, false); + setWindowFlag(Qt::Window, true); +#else setWindowFlags(windowFlags()^Qt::Dialog^Qt::Window); +#endif #endif // Setup User Interface @@ -684,7 +694,10 @@ void PictureDialog::on_labPicture_mouseDoubleClicked(Qt::MouseButton button) #endif PictureWidget *pictureWidget = new PictureWidget(this); // Work! pictureWidget->setObjectName("PictureWidget"); -#if QT_VERSION >= 0x050600 +#if QT_VERSION >= 0x050900 + pictureWidget->setWindowFlag(Qt::FramelessWindowHint, true); + pictureWidget->setWindowFlag(Qt::MaximizeUsingFullscreenGeometryHint, true); +#elif QT_VERSION >= 0x050600 pictureWidget->setWindowFlags(pictureWidget->windowFlags()^Qt::FramelessWindowHint^Qt::MaximizeUsingFullscreenGeometryHint); #else pictureWidget->setWindowFlags(pictureWidget->windowFlags()^Qt::FramelessWindowHint); @@ -729,13 +742,15 @@ int PictureDialog::getIndex() void PictureDialog::openPreviewMap() { SnapmaticPicture *picture = smpic; + SnapmaticProperties currentProperties = picture->getSnapmaticProperties(); MapLocationDialog *mapLocDialog; if (rqFullscreen && fullscreenWidget != nullptr) { - mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, fullscreenWidget); + mapLocDialog = new MapLocationDialog(currentProperties.location.x, currentProperties.location.y, fullscreenWidget); } else { - mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, this); + mapLocDialog = new MapLocationDialog(currentProperties.location.x, currentProperties.location.y, this); } + mapLocDialog->setCayoPerico(currentProperties.location.isCayoPerico); mapLocDialog->setWindowIcon(windowIcon()); mapLocDialog->setModal(true); #ifndef Q_OS_ANDROID @@ -746,10 +761,9 @@ void PictureDialog::openPreviewMap() mapLocDialog->exec(); if (mapLocDialog->propUpdated()) { // Update Snapmatic Properties - SnapmaticProperties localSpJson = picture->getSnapmaticProperties(); - localSpJson.location.x = mapLocDialog->getXpos(); - localSpJson.location.y = mapLocDialog->getYpos(); - localSpJson.location.z = 0; + currentProperties.location.x = mapLocDialog->getXpos(); + currentProperties.location.y = mapLocDialog->getYpos(); + currentProperties.location.z = 0; // Update Snapmatic Picture QString currentFilePath = picture->getPictureFilePath(); @@ -759,7 +773,7 @@ void PictureDialog::openPreviewMap() QFile::copy(currentFilePath, backupFileName); } SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties(); - picture->setSnapmaticProperties(localSpJson); + picture->setSnapmaticProperties(currentProperties); if (!picture->exportPicture(currentFilePath)) { QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of I/O Error")); picture->setSnapmaticProperties(fallbackProperties); diff --git a/PlayerListDialog.cpp b/PlayerListDialog.cpp index 7ab0741..8531921 100644 --- a/PlayerListDialog.cpp +++ b/PlayerListDialog.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5view Grand Theft Auto V Profile Viewer -* Copyright (C) 2016-2020 Syping +* Copyright (C) 2016-2021 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 @@ -31,7 +31,11 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile ui(new Ui::PlayerListDialog) { // Set Window Flags +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#endif listUpdated = false; ui->setupUi(this); @@ -39,40 +43,32 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile ui->cmdCancel->setFocus(); // Set Icon for Apply Button - if (QIcon::hasThemeIcon("dialog-ok-apply")) - { + if (QIcon::hasThemeIcon("dialog-ok-apply")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok-apply")); } - else if (QIcon::hasThemeIcon("dialog-apply")) - { + else if (QIcon::hasThemeIcon("dialog-apply")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-apply")); } - else if (QIcon::hasThemeIcon("gtk-apply")) - { + else if (QIcon::hasThemeIcon("gtk-apply")) { ui->cmdApply->setIcon(QIcon::fromTheme("gtk-apply")); } - else if (QIcon::hasThemeIcon("dialog-ok")) - { + else if (QIcon::hasThemeIcon("dialog-ok")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); } - else if (QIcon::hasThemeIcon("gtk-ok")) - { + else if (QIcon::hasThemeIcon("gtk-ok")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); } // Set Icon for Cancel Button - if (QIcon::hasThemeIcon("dialog-cancel")) - { + if (QIcon::hasThemeIcon("dialog-cancel")) { ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); } - else if (QIcon::hasThemeIcon("gtk-cancel")) - { + else if (QIcon::hasThemeIcon("gtk-cancel")) { ui->cmdCancel->setIcon(QIcon::fromTheme("gtk-cancel")); } // Set Icon for Manage Buttons - if (QIcon::hasThemeIcon("go-previous") && QIcon::hasThemeIcon("go-next") && QIcon::hasThemeIcon("list-add")) - { + if (QIcon::hasThemeIcon("go-previous") && QIcon::hasThemeIcon("go-next") && QIcon::hasThemeIcon("list-add")) { #if QT_VERSION < 0x050600 qreal screenRatio = AppEnv::screenRatio(); if (screenRatio != 1) { @@ -87,8 +83,7 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile ui->cmdMakeSe->setIcon(QIcon::fromTheme("go-next")); ui->cmdMakeAd->setIcon(QIcon::fromTheme("list-add")); } - else - { + else { #if QT_VERSION < 0x050600 qreal screenRatio = AppEnv::screenRatio(); if (screenRatio != 1) { @@ -112,12 +107,10 @@ PlayerListDialog::PlayerListDialog(QStringList players, ProfileDatabase *profile PlayerListDialog::~PlayerListDialog() { - for (QObject *object : ui->listAvPlayers->children()) - { + for (QObject *object : ui->listAvPlayers->children()) { delete object; } - for (QObject *object : ui->listSePlayers->children()) - { + for (QObject *object : ui->listSePlayers->children()) { delete object; } delete ui; @@ -131,16 +124,13 @@ void PlayerListDialog::on_cmdCancel_clicked() void PlayerListDialog::buildInterface() { const QStringList dbPlayers = profileDB->getPlayers(); - for (QString sePlayer : players) - { + for (const QString &sePlayer : players) { QListWidgetItem *playerItem = new QListWidgetItem(profileDB->getPlayerName(sePlayer)); playerItem->setData(Qt::UserRole, sePlayer); ui->listSePlayers->addItem(playerItem); } - for (QString dbPlayer : dbPlayers) - { - if (!players.contains(dbPlayer)) - { + for (const QString &dbPlayer : dbPlayers) { + if (!players.contains(dbPlayer)) { QListWidgetItem *playerItem = new QListWidgetItem(profileDB->getPlayerName(dbPlayer)); playerItem->setData(Qt::UserRole, dbPlayer); ui->listAvPlayers->addItem(playerItem); @@ -151,8 +141,7 @@ void PlayerListDialog::buildInterface() void PlayerListDialog::on_cmdMakeAv_clicked() { - for (QListWidgetItem *item : ui->listSePlayers->selectedItems()) - { + for (QListWidgetItem *item : ui->listSePlayers->selectedItems()) { QString playerName = item->text(); int playerID = item->data(Qt::UserRole).toInt(); delete item; @@ -166,13 +155,11 @@ void PlayerListDialog::on_cmdMakeAv_clicked() void PlayerListDialog::on_cmdMakeSe_clicked() { int maxPlayers = 30; - if (maxPlayers < ui->listSePlayers->count() + ui->listAvPlayers->selectedItems().count()) - { + if (maxPlayers < ui->listSePlayers->count() + ui->listAvPlayers->selectedItems().count()) { QMessageBox::warning(this, tr("Add Players..."), tr("Failed to add more Players because the limit of Players are %1!").arg(QString::number(maxPlayers))); return; } - for (QListWidgetItem *item : ui->listAvPlayers->selectedItems()) - { + for (QListWidgetItem *item : ui->listAvPlayers->selectedItems()) { QString playerName = item->text(); int playerID = item->data(Qt::UserRole).toInt(); delete item; @@ -186,15 +173,12 @@ void PlayerListDialog::on_cmdMakeAd_clicked() { bool playerOk; int playerID = QInputDialog::getInt(this, tr("Add Player..."), tr("Enter Social Club Player ID"), 1, 1, 214783647, 1, &playerOk, windowFlags()); - if (playerOk) - { - for (int i = 0; i < ui->listAvPlayers->count(); ++i) - { + if (playerOk) { + for (int i = 0; i < ui->listAvPlayers->count(); ++i) { QListWidgetItem *item = ui->listAvPlayers->item(i); QString itemPlayerName = item->text(); int itemPlayerID = item->data(Qt::UserRole).toInt(); - if (itemPlayerID == playerID) - { + if (itemPlayerID == playerID) { delete item; QListWidgetItem *playerItem = new QListWidgetItem(itemPlayerName); playerItem->setData(Qt::UserRole, playerID); @@ -202,8 +186,7 @@ void PlayerListDialog::on_cmdMakeAd_clicked() return; } } - for (int i = 0; i < ui->listSePlayers->count(); ++i) - { + for (int i = 0; i < ui->listSePlayers->count(); ++i) { QListWidgetItem *item = ui->listSePlayers->item(i); int itemPlayerID = item->data(Qt::UserRole).toInt(); if (itemPlayerID == playerID) @@ -221,8 +204,7 @@ void PlayerListDialog::on_cmdMakeAd_clicked() void PlayerListDialog::on_cmdApply_clicked() { players.clear(); - for (int i = 0; i < ui->listSePlayers->count(); ++i) - { + for (int i = 0; i < ui->listSePlayers->count(); ++i) { players += ui->listSePlayers->item(i)->data(Qt::UserRole).toString(); } emit playerListUpdated(players); diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp index c13d82b..27b0229 100644 --- a/SavegameDialog.cpp +++ b/SavegameDialog.cpp @@ -28,7 +28,11 @@ SavegameDialog::SavegameDialog(QWidget *parent) : ui(new Ui::SavegameDialog) { // Set Window Flags +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#endif // Setup User Interface ui->setupUi(this); diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp index f6b3b22..10414c5 100644 --- a/SnapmaticEditor.cpp +++ b/SnapmaticEditor.cpp @@ -41,41 +41,38 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, ProfileDatabase *profileD ui(new Ui::SnapmaticEditor) { // Set Window Flags +#if QT_VERSION >= 0x050900 + setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else setWindowFlags(windowFlags()^Qt::WindowContextHelpButtonHint); +#endif ui->setupUi(this); ui->cmdCancel->setDefault(true); ui->cmdCancel->setFocus(); // Set Icon for Apply Button - if (QIcon::hasThemeIcon("dialog-ok-apply")) - { + if (QIcon::hasThemeIcon("dialog-ok-apply")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok-apply")); } - else if (QIcon::hasThemeIcon("dialog-apply")) - { + else if (QIcon::hasThemeIcon("dialog-apply")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-apply")); } - else if (QIcon::hasThemeIcon("gtk-apply")) - { + else if (QIcon::hasThemeIcon("gtk-apply")) { ui->cmdApply->setIcon(QIcon::fromTheme("gtk-apply")); } - else if (QIcon::hasThemeIcon("dialog-ok")) - { + else if (QIcon::hasThemeIcon("dialog-ok")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); } - else if (QIcon::hasThemeIcon("gtk-ok")) - { + else if (QIcon::hasThemeIcon("gtk-ok")) { ui->cmdApply->setIcon(QIcon::fromTheme("dialog-ok")); } // Set Icon for Cancel Button - if (QIcon::hasThemeIcon("dialog-cancel")) - { + if (QIcon::hasThemeIcon("dialog-cancel")) { ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel")); } - else if (QIcon::hasThemeIcon("gtk-cancel")) - { + else if (QIcon::hasThemeIcon("gtk-cancel")) { ui->cmdCancel->setIcon(QIcon::fromTheme("gtk-cancel")); } @@ -96,27 +93,18 @@ SnapmaticEditor::~SnapmaticEditor() void SnapmaticEditor::selfie_toggled(bool checked) { - if (checked) - { - isSelfie = true; - } - else - { - isSelfie = false; - } + isSelfie = checked; } void SnapmaticEditor::mugshot_toggled(bool checked) { - if (checked) - { + if (checked) { isMugshot = true; ui->cbDirector->setEnabled(false); ui->cbDirector->setChecked(false); } - else - { + else { isMugshot = false; ui->cbDirector->setEnabled(true); } @@ -124,14 +112,12 @@ void SnapmaticEditor::mugshot_toggled(bool checked) void SnapmaticEditor::editor_toggled(bool checked) { - if (checked) - { + if (checked) { isEditor = true; ui->cbDirector->setEnabled(false); ui->cbDirector->setChecked(false); } - else - { + else { isEditor = false; ui->cbDirector->setEnabled(true); } @@ -139,8 +125,7 @@ void SnapmaticEditor::editor_toggled(bool checked) void SnapmaticEditor::on_rbSelfie_toggled(bool checked) { - if (checked) - { + if (checked) { mugshot_toggled(false); editor_toggled(false); selfie_toggled(true); @@ -149,8 +134,7 @@ void SnapmaticEditor::on_rbSelfie_toggled(bool checked) void SnapmaticEditor::on_rbMugshot_toggled(bool checked) { - if (checked) - { + if (checked) { selfie_toggled(false); editor_toggled(false); mugshot_toggled(true); @@ -159,8 +143,7 @@ void SnapmaticEditor::on_rbMugshot_toggled(bool checked) void SnapmaticEditor::on_rbEditor_toggled(bool checked) { - if (checked) - { + if (checked) { selfie_toggled(false); mugshot_toggled(false); editor_toggled(true); @@ -169,8 +152,7 @@ void SnapmaticEditor::on_rbEditor_toggled(bool checked) void SnapmaticEditor::on_rbCustom_toggled(bool checked) { - if (checked) - { + if (checked) { selfie_toggled(false); mugshot_toggled(false); editor_toggled(false); @@ -189,20 +171,16 @@ void SnapmaticEditor::setSnapmaticPicture(SnapmaticPicture *picture) playersList = snapmaticProperties.playersList; ui->cbDirector->setChecked(snapmaticProperties.isFromDirector); ui->cbMeme->setChecked(snapmaticProperties.isMeme); - if (isSelfie) - { + if (isSelfie) { ui->rbSelfie->setChecked(true); } - else if (isMugshot) - { + else if (isMugshot) { ui->rbMugshot->setChecked(true); } - else if (isEditor) - { + else if (isEditor) { ui->rbEditor->setChecked(true); } - else - { + else { ui->rbCustom->setChecked(true); } setSnapmaticCrew(returnCrewName(crewID)); @@ -212,8 +190,7 @@ void SnapmaticEditor::setSnapmaticPicture(SnapmaticPicture *picture) void SnapmaticEditor::insertPlayerNames(QStringList *players) { - for (int i = 0; i < players->size(); ++i) - { + for (int i = 0; i < players->size(); ++i) { players->replace(i, profileDB->getPlayerName(players->at(i))); } } @@ -229,54 +206,48 @@ void SnapmaticEditor::setSnapmaticPlayers(const QStringList &players) { QString editStr = QString("%1").arg(tr("Edit")); QString playersStr; - if (players.length() != 1) - { + if (players.length() != 1) { playersStr = tr("Players: %1 (%2)", "Multiple Player are inserted here"); } - else - { + else { playersStr = tr("Player: %1 (%2)", "One Player is inserted here"); } - if (players.length() != 0) - { + if (players.length() != 0) { ui->labPlayers->setText(playersStr.arg(players.join(", "), editStr)); } - else - { + else { ui->labPlayers->setText(playersStr.arg(QApplication::translate("PictureDialog", "No Players"), editStr)); } #ifndef Q_OS_ANDROID ui->gbValues->resize(ui->gbValues->width(), ui->gbValues->heightForWidth(ui->gbValues->width())); ui->frameWidget->resize(ui->gbValues->width(), ui->frameWidget->heightForWidth(ui->frameWidget->width())); - if (heightForWidth(width()) > height()) { resize(width(), heightForWidth(width())); } + if (heightForWidth(width()) > height()) + resize(width(), heightForWidth(width())); #endif } void SnapmaticEditor::setSnapmaticTitle(const QString &title) { - if (title.length() > 39) - { + if (title.length() > 39) { snapmaticTitle = title.left(39); } - else - { + else { snapmaticTitle = title; } QString editStr = QString("%1").arg(tr("Edit")); QString titleStr = tr("Title: %1 (%2)").arg(StringParser::escapeString(snapmaticTitle), editStr); ui->labTitle->setText(titleStr); - if (SnapmaticPicture::verifyTitle(snapmaticTitle)) - { + if (SnapmaticPicture::verifyTitle(snapmaticTitle)) { ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("%1").arg(tr("Yes", "Yes, should work fine")))); } - else - { + else { ui->labAppropriate->setText(tr("Appropriate: %1").arg(QString("%1").arg(tr("No", "No, could lead to issues")))); } #ifndef Q_OS_ANDROID ui->gbValues->resize(ui->gbValues->width(), ui->gbValues->heightForWidth(ui->gbValues->width())); ui->frameWidget->resize(ui->gbValues->width(), ui->frameWidget->heightForWidth(ui->frameWidget->width())); - if (heightForWidth(width()) > height()) { resize(width(), heightForWidth(width())); } + if (heightForWidth(width()) > height()) + resize(width(), heightForWidth(width())); #endif } @@ -288,7 +259,8 @@ void SnapmaticEditor::setSnapmaticCrew(const QString &crew) #ifndef Q_OS_ANDROID ui->gbValues->resize(ui->gbValues->width(), ui->gbValues->heightForWidth(ui->gbValues->width())); ui->frameWidget->resize(ui->gbValues->width(), ui->frameWidget->heightForWidth(ui->frameWidget->width())); - if (heightForWidth(width()) > height()) { resize(width(), heightForWidth(width())); } + if (heightForWidth(width()) > height()) + resize(width(), heightForWidth(width())); #endif } @@ -304,8 +276,7 @@ void SnapmaticEditor::on_cmdCancel_clicked() void SnapmaticEditor::on_cmdApply_clicked() { - if (ui->cbQualify->isChecked()) - { + if (ui->cbQualify->isChecked()) { qualifyAvatar(); } snapmaticProperties.crewID = crewID; @@ -315,27 +286,23 @@ void SnapmaticEditor::on_cmdApply_clicked() snapmaticProperties.isFromDirector = ui->cbDirector->isChecked(); snapmaticProperties.isMeme = ui->cbMeme->isChecked(); snapmaticProperties.playersList = playersList; - if (smpic) - { + if (smpic) { QString currentFilePath = smpic->getPictureFilePath(); QString originalFilePath = smpic->getOriginalPictureFilePath(); QString backupFileName = originalFilePath % ".bak"; - if (!QFile::exists(backupFileName)) - { + if (!QFile::exists(backupFileName)) { QFile::copy(currentFilePath, backupFileName); } SnapmaticProperties fallbackProperties = smpic->getSnapmaticProperties(); QString fallbackTitle = smpic->getPictureTitle(); smpic->setSnapmaticProperties(snapmaticProperties); smpic->setPictureTitle(snapmaticTitle); - if (!smpic->exportPicture(currentFilePath)) - { + if (!smpic->exportPicture(currentFilePath)) { QMessageBox::warning(this, tr("Snapmatic Properties"), tr("Patching of Snapmatic Properties failed because of I/O Error")); smpic->setSnapmaticProperties(fallbackProperties); smpic->setPictureTitle(fallbackTitle); } - else - { + else { smpic->updateStrings(); smpic->emitUpdate(); #ifdef GTA5SYNC_TELEMETRY @@ -343,8 +310,7 @@ void SnapmaticEditor::on_cmdApply_clicked() telemetrySettings.beginGroup("Telemetry"); bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); telemetrySettings.endGroup(); - if (pushUsageData && Telemetry->canPush()) - { + if (pushUsageData && Telemetry->canPush()) { QJsonDocument jsonDocument; QJsonObject jsonObject; jsonObject["Type"] = "PropertyEdited"; @@ -373,8 +339,7 @@ void SnapmaticEditor::qualifyAvatar() void SnapmaticEditor::on_cbQualify_toggled(bool checked) { - if (checked) - { + if (checked) { ui->cbMeme->setEnabled(false); ui->cbDirector->setEnabled(false); ui->rbCustom->setEnabled(false); @@ -382,15 +347,13 @@ void SnapmaticEditor::on_cbQualify_toggled(bool checked) ui->rbEditor->setEnabled(false); ui->rbMugshot->setEnabled(false); } - else - { + else { ui->cbMeme->setEnabled(true); ui->rbCustom->setEnabled(true); ui->rbSelfie->setEnabled(true); ui->rbEditor->setEnabled(true); ui->rbMugshot->setEnabled(true); - if (ui->rbSelfie->isChecked() || ui->rbCustom->isChecked()) - { + if (ui->rbSelfie->isChecked() || ui->rbCustom->isChecked()) { ui->cbDirector->setEnabled(true); } } @@ -398,8 +361,7 @@ void SnapmaticEditor::on_cbQualify_toggled(bool checked) void SnapmaticEditor::on_labPlayers_linkActivated(const QString &link) { - if (link == "g5e://editplayers") - { + if (link == "g5e://editplayers") { PlayerListDialog *playerListDialog = new PlayerListDialog(playersList, profileDB, this); connect(playerListDialog, SIGNAL(playerListUpdated(QStringList)), this, SLOT(playerListUpdated(QStringList))); playerListDialog->setModal(true); @@ -411,12 +373,10 @@ void SnapmaticEditor::on_labPlayers_linkActivated(const QString &link) void SnapmaticEditor::on_labTitle_linkActivated(const QString &link) { - if (link == "g5e://edittitle") - { + if (link == "g5e://edittitle") { bool ok; QString newTitle = QInputDialog::getText(this, tr("Snapmatic Title"), tr("New Snapmatic title:"), QLineEdit::Normal, snapmaticTitle, &ok, windowFlags()); - if (ok && !newTitle.isEmpty()) - { + if (ok && !newTitle.isEmpty()) { setSnapmaticTitle(newTitle); } } @@ -424,39 +384,33 @@ void SnapmaticEditor::on_labTitle_linkActivated(const QString &link) void SnapmaticEditor::on_labCrew_linkActivated(const QString &link) { - if (link == "g5e://editcrew") - { + if (link == "g5e://editcrew") { bool ok; int indexNum = 0; QStringList itemList; QStringList crewList = crewDB->getCrews(); - if (!crewList.contains(QLatin1String("0"))) - { + if (!crewList.contains(QLatin1String("0"))) { crewList += QLatin1String("0"); } crewList.sort(); - for (QString crew : crewList) - { + for (const QString &crew : crewList) { itemList += QString("%1 (%2)").arg(crew, returnCrewName(crew.toInt())); } - if (crewList.contains(QString::number(crewID))) - { + if (crewList.contains(QString::number(crewID))) { indexNum = crewList.indexOf(QString::number(crewID)); } QString newCrew = QInputDialog::getItem(this, tr("Snapmatic Crew"), tr("New Snapmatic crew:"), itemList, indexNum, true, &ok, windowFlags()); - if (ok && !newCrew.isEmpty()) - { - if (newCrew.contains(" ")) newCrew = newCrew.split(" ").at(0); - if (newCrew.length() > 10) return; - for (QChar crewChar : newCrew) - { - if (!crewChar.isNumber()) - { + if (ok && !newCrew.isEmpty()) { + if (newCrew.contains(" ")) + newCrew = newCrew.split(" ").at(0); + if (newCrew.length() > 10) + return; + for (const QChar &crewChar : newCrew) { + if (!crewChar.isNumber()) { return; } } - if (!crewList.contains(newCrew)) - { + if (!crewList.contains(newCrew)) { crewDB->addCrew(crewID); } crewID = newCrew.toInt(); diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index b732703..d137f41 100644 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5spv Grand Theft Auto Snapmatic Picture Viewer -* Copyright (C) 2016-2020 Syping +* Copyright (C) 2016-2021 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 @@ -84,8 +84,7 @@ bool SnapmaticPicture::preloadFile() isFormatSwitch = false; - if (!picFile->open(QFile::ReadOnly)) - { + if (!picFile->open(QFile::ReadOnly)) { lastStep = "1;/1,OpenFile," % convertDrawStringForLog(picFilePath); delete picFile; return false; @@ -98,8 +97,7 @@ bool SnapmaticPicture::preloadFile() if (!ok) return false; - if (picFilePath.right(4) != QLatin1String(".g5e")) - { + if (picFilePath.right(4) != QLatin1String(".g5e")) { if (p_ragePhoto.photoFormat() == RagePhoto::PhotoFormat::G5EX) isFormatSwitch = true; } @@ -122,9 +120,9 @@ bool SnapmaticPicture::readingPicture(bool cacheEnabled_) if (!ok) return false; - if (cacheEnabled) picOk = cachePicture.loadFromData(p_ragePhoto.photoData(), "JPEG"); - if (!cacheEnabled) - { + if (cacheEnabled) + picOk = cachePicture.loadFromData(p_ragePhoto.photoData(), "JPEG"); + if (!cacheEnabled) { QImage tempPicture; picOk = tempPicture.loadFromData(p_ragePhoto.photoData(), "JPEG"); } @@ -154,19 +152,18 @@ void SnapmaticPicture::updateStrings() pictureStr = tr("PHOTO - %1").arg(localProperties.createdDateTime.toString("MM/dd/yy HH:mm:ss")); sortStr = localProperties.createdDateTime.toString("yyMMddHHmmss") % QString::number(localProperties.uid); QString exportStr = localProperties.createdDateTime.toString("yyyyMMdd") % "-" % QString::number(localProperties.uid); - if (getSnapmaticFormat() == SnapmaticFormat::G5E_Format) picFileName = "PGTA5" % QString::number(localProperties.uid); + if (getSnapmaticFormat() == SnapmaticFormat::G5E_Format) + picFileName = "PGTA5" % QString::number(localProperties.uid); picExportFileName = exportStr % "_" % cmpPicTitl; } bool SnapmaticPicture::readingPictureFromFile(const QString &fileName, bool cacheEnabled_) { - if (!fileName.isEmpty()) - { + if (!fileName.isEmpty()) { picFilePath = fileName; return readingPicture(cacheEnabled_); } - else - { + else { return false; } } @@ -244,12 +241,10 @@ QString SnapmaticPicture::getExportPictureFileName() QString SnapmaticPicture::getOriginalPictureFileName() { QString newPicFileName = picFileName; - if (picFileName.right(4) == ".bak") - { + if (picFileName.right(4) == ".bak") { newPicFileName = QString(picFileName).remove(picFileName.length() - 4, 4); } - if (picFileName.right(7) == ".hidden") - { + if (picFileName.right(7) == ".hidden") { newPicFileName = QString(picFileName).remove(picFileName.length() - 7, 7); } return newPicFileName; @@ -258,12 +253,10 @@ QString SnapmaticPicture::getOriginalPictureFileName() QString SnapmaticPicture::getOriginalPictureFilePath() { QString newPicFilePath = picFilePath; - if (picFilePath.right(4) == ".bak") - { + if (picFilePath.right(4) == ".bak") { newPicFilePath = QString(picFilePath).remove(picFilePath.length() - 4, 4); } - if (picFilePath.right(7) == ".hidden") - { + if (picFilePath.right(7) == ".hidden") { newPicFilePath = QString(picFilePath).remove(picFilePath.length() - 7, 7); } return newPicFilePath; @@ -296,79 +289,65 @@ QString SnapmaticPicture::getPictureStr() QString SnapmaticPicture::getLastStep(bool readable) { - if (readable) - { + if (readable) { QStringList lastStepList = lastStep.split(";/"); - if (lastStepList.length() < 2) { return lastStep; } + if (lastStepList.length() < 2) + return lastStep; bool intOk; QStringList descStepList = lastStepList.at(1).split(","); - if (descStepList.length() < 1) { return lastStep; } + if (descStepList.length() < 1) + return lastStep; int argsCount = descStepList.at(0).toInt(&intOk); if (!intOk) { return lastStep; } - if (argsCount == 1) - { + if (argsCount == 1) { QString currentAction = descStepList.at(1); QString actionFile = descStepList.at(2); - if (currentAction == "OpenFile") - { + if (currentAction == "OpenFile") { return tr("open file %1").arg(actionFile); } } - else if (argsCount == 3 || argsCount == 4) - { + else if (argsCount == 3 || argsCount == 4) { QString currentAction = descStepList.at(1); QString actionFile = descStepList.at(2); QString actionError = descStepList.at(4); QString actionError2; if (argsCount == 4) { actionError2 = descStepList.at(5); } - if (currentAction == "ReadingFile") - { + if (currentAction == "ReadingFile") { QString readableError = actionError; - if (actionError == "NOHEADER") - { + if (actionError == "NOHEADER") { readableError = tr("header not exists"); } - else if (actionError == "MALFORMEDHEADER") - { + else if (actionError == "MALFORMEDHEADER") { readableError = tr("header is malformed"); } - else if (actionError == "NOJPEG" || actionError == "NOPIC") - { + else if (actionError == "NOJPEG" || actionError == "NOPIC") { readableError = tr("picture not exists (%1)").arg(actionError); } - else if (actionError == "NOJSON" || actionError == "CTJSON") - { + else if (actionError == "NOJSON" || actionError == "CTJSON") { readableError = tr("JSON not exists (%1)").arg(actionError); } - else if (actionError == "NOTITL" || actionError == "CTTITL") - { + else if (actionError == "NOTITL" || actionError == "CTTITL") { readableError = tr("title not exists (%1)").arg(actionError); } - else if (actionError == "NODESC" || actionError == "CTDESC") - { + else if (actionError == "NODESC" || actionError == "CTDESC") { readableError = tr("description not exists (%1)").arg(actionError); } - else if (actionError == "JSONINCOMPLETE" && actionError2 == "JSONERROR") - { + else if (actionError == "JSONINCOMPLETE" && actionError2 == "JSONERROR") { readableError = tr("JSON is incomplete and malformed"); } - else if (actionError == "JSONINCOMPLETE") - { + else if (actionError == "JSONINCOMPLETE") { readableError = tr("JSON is incomplete"); } - else if (actionError == "JSONERROR") - { + else if (actionError == "JSONERROR") { readableError = tr("JSON is malformed"); } return tr("reading file %1 because of %2", "Example for %2: JSON is malformed error").arg(actionFile, readableError); } - else - { + else { return lastStep; } } - else - { + else { return lastStep; } } @@ -437,25 +416,20 @@ void SnapmaticPicture::parseJsonContent() bool jsonIncomplete = false; bool jsonError = false; - if (jsonObject.contains("loc")) - { - if (jsonObject["loc"].isObject()) - { + if (jsonObject.contains("loc")) { + if (jsonObject["loc"].isObject()) { QJsonObject locObject = jsonObject["loc"].toObject(); - if (locObject.contains("x")) - { + if (locObject.contains("x")) { if (locObject["x"].isDouble()) { localProperties.location.x = locObject["x"].toDouble(); } else { jsonError = true; } } else { jsonIncomplete = true; } - if (locObject.contains("y")) - { + if (locObject.contains("y")) { if (locObject["y"].isDouble()) { localProperties.location.y = locObject["y"].toDouble(); } else { jsonError = true; } } else { jsonIncomplete = true; } - if (locObject.contains("z")) - { + if (locObject.contains("z")) { if (locObject["z"].isDouble()) { localProperties.location.z = locObject["z"].toDouble(); } else { jsonError = true; } } @@ -464,35 +438,30 @@ void SnapmaticPicture::parseJsonContent() else { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("uid")) - { + if (jsonObject.contains("uid")) { bool uidOk; localProperties.uid = jsonMap["uid"].toInt(&uidOk); if (!uidOk) { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("area")) - { + if (jsonObject.contains("area")) { if (jsonObject["area"].isString()) { localProperties.location.area = jsonObject["area"].toString(); } else { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("crewid")) - { + if (jsonObject.contains("crewid")) { bool crewIDOk; localProperties.crewID = jsonMap["crewid"].toInt(&crewIDOk); if (!crewIDOk) { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("street")) - { + if (jsonObject.contains("street")) { bool streetIDOk; localProperties.streetID = jsonMap["street"].toInt(&streetIDOk); if (!streetIDOk) { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("creat")) - { + if (jsonObject.contains("creat")) { bool timestampOk; QDateTime createdTimestamp; localProperties.createdTimestamp = jsonMap["creat"].toUInt(×tampOk); @@ -505,59 +474,53 @@ void SnapmaticPicture::parseJsonContent() if (!timestampOk) { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("plyrs")) - { + if (jsonObject.contains("plyrs")) { if (jsonObject["plyrs"].isArray()) { localProperties.playersList = jsonMap["plyrs"].toStringList(); } else { jsonError = true; } } // else { jsonIncomplete = true; } // 2016 Snapmatic pictures left out plyrs when none are captured, so don't force exists on that one - if (jsonObject.contains("meme")) - { + if (jsonObject.contains("meme")) { if (jsonObject["meme"].isBool()) { localProperties.isMeme = jsonObject["meme"].toBool(); } else { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("mug")) - { + if (jsonObject.contains("mug")) { if (jsonObject["mug"].isBool()) { localProperties.isMug = jsonObject["mug"].toBool(); } else { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("slf")) - { + if (jsonObject.contains("slf")) { if (jsonObject["slf"].isBool()) { localProperties.isSelfie = jsonObject["slf"].toBool(); } else { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("drctr")) - { + if (jsonObject.contains("drctr")) { if (jsonObject["drctr"].isBool()) { localProperties.isFromDirector = jsonObject["drctr"].toBool(); } else { jsonError = true; } } else { jsonIncomplete = true; } - if (jsonObject.contains("rsedtr")) - { + if (jsonObject.contains("rsedtr")) { if (jsonObject["rsedtr"].isBool()) { localProperties.isFromRSEditor = jsonObject["rsedtr"].toBool(); } else { jsonError = true; } } - // else { jsonIncomplete = true; } // Game release Snapmatic pictures prior May 2015 left out rsedtr, so don't force exists on that one + else { localProperties.isFromRSEditor = false; } + if (jsonObject.contains("onislandx")) { + if (jsonObject["onislandx"].isBool()) { localProperties.location.isCayoPerico = jsonObject["onislandx"].toBool(); } + else { jsonError = true; } + } + else { localProperties.location.isCayoPerico = false; } - if (!jsonIncomplete && !jsonError) - { + if (!jsonIncomplete && !jsonError) { jsonOk = true; } - else - { - if (jsonIncomplete && jsonError) - { + else { + if (jsonIncomplete && jsonError) { lastStep = "2;/4,ReadingFile," % convertDrawStringForLog(picFilePath) % ",3,JSONINCOMPLETE,JSONERROR"; } - else if (jsonIncomplete) - { + else if (jsonIncomplete) { lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",3,JSONINCOMPLETE"; } - else if (jsonError) - { + else if (jsonError) { lastStep = "2;/3,ReadingFile," % convertDrawStringForLog(picFilePath) % ",3,JSONERROR"; } jsonOk = false; @@ -585,10 +548,10 @@ bool SnapmaticPicture::setSnapmaticProperties(SnapmaticProperties properties) jsonObject["slf"] = properties.isSelfie; jsonObject["drctr"] = properties.isFromDirector; jsonObject["rsedtr"] = properties.isFromRSEditor; + jsonObject["onislandx"] = properties.location.isCayoPerico; QJsonDocument jsonDocument(jsonObject); - if (setJsonStr(QString::fromUtf8(jsonDocument.toJson(QJsonDocument::Compact)))) - { + if (setJsonStr(QString::fromUtf8(jsonDocument.toJson(QJsonDocument::Compact)))) { localProperties = properties; return true; } @@ -613,14 +576,11 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo { // Keep current format when Auto_Format is used SnapmaticFormat format = format_; - if (format_ == SnapmaticFormat::Auto_Format) - { - if (p_ragePhoto.photoFormat() == RagePhoto::PhotoFormat::G5EX) - { + if (format_ == SnapmaticFormat::Auto_Format) { + if (p_ragePhoto.photoFormat() == RagePhoto::PhotoFormat::G5EX) { format = SnapmaticFormat::G5E_Format; } - else - { + else { format = SnapmaticFormat::PGTA_Format; } } @@ -631,10 +591,8 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo #else QFile *picFile = new QFile(StandardPaths::tempLocation() % "/" % QFileInfo(fileName).fileName() % ".tmp"); #endif - if (picFile->open(QIODevice::WriteOnly)) - { - if (format == SnapmaticFormat::G5E_Format) - { + if (picFile->open(QIODevice::WriteOnly)) { + if (format == SnapmaticFormat::G5E_Format) { p_ragePhoto.save(picFile, RagePhoto::PhotoFormat::G5EX); #if QT_VERSION >= 0x050000 saveSuccess = picFile->commit(); @@ -644,8 +602,7 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo #endif delete picFile; } - else if (format == SnapmaticFormat::JPEG_Format) - { + else if (format == SnapmaticFormat::JPEG_Format) { picFile->write(p_ragePhoto.photoData()); #if QT_VERSION >= 0x050000 saveSuccess = picFile->commit(); @@ -655,8 +612,7 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo #endif delete picFile; } - else - { + else { p_ragePhoto.save(picFile, RagePhoto::PhotoFormat::GTA5); #if QT_VERSION >= 0x050000 saveSuccess = picFile->commit(); @@ -688,8 +644,7 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, SnapmaticFormat fo #endif return saveSuccess; } - else - { + else { delete picFile; return saveSuccess; } @@ -708,16 +663,13 @@ void SnapmaticPicture::setPicFilePath(const QString &picFilePath_) bool SnapmaticPicture::deletePicFile() { bool success = false; - if (!QFile::exists(picFilePath)) - { + if (!QFile::exists(picFilePath)) { success = true; } - else if (QFile::remove(picFilePath)) - { + else if (QFile::remove(picFilePath)) { success = true; } - if (isHidden()) - { + if (isHidden()) { const QString picBakPath = QString(picFilePath).remove(picFilePath.length() - 7, 7) % ".bak"; if (QFile::exists(picBakPath)) QFile::remove(picBakPath); } @@ -732,8 +684,7 @@ bool SnapmaticPicture::deletePicFile() bool SnapmaticPicture::isHidden() { - if (picFilePath.right(7) == QLatin1String(".hidden")) - { + if (picFilePath.right(7) == QLatin1String(".hidden")) { return true; } return false; @@ -741,8 +692,7 @@ bool SnapmaticPicture::isHidden() bool SnapmaticPicture::isVisible() { - if (picFilePath.right(7) == QLatin1String(".hidden")) - { + if (picFilePath.right(7) == QLatin1String(".hidden")) { return false; } return true; @@ -750,15 +700,12 @@ bool SnapmaticPicture::isVisible() bool SnapmaticPicture::setPictureHidden() { - if (p_ragePhoto.photoFormat() == RagePhoto::PhotoFormat::G5EX) - { + if (p_ragePhoto.photoFormat() == RagePhoto::PhotoFormat::G5EX) { return false; } - if (!isHidden()) - { + if (!isHidden()) { QString newPicFilePath = QString(picFilePath % ".hidden"); - if (QFile::rename(picFilePath, newPicFilePath)) - { + if (QFile::rename(picFilePath, newPicFilePath)) { picFilePath = newPicFilePath; return true; } @@ -769,15 +716,12 @@ bool SnapmaticPicture::setPictureHidden() bool SnapmaticPicture::setPictureVisible() { - if (p_ragePhoto.photoFormat() == RagePhoto::PhotoFormat::G5EX) - { + if (p_ragePhoto.photoFormat() == RagePhoto::PhotoFormat::G5EX) { return false; } - if (isHidden()) - { + if (isHidden()) { QString newPicFilePath = QString(picFilePath).remove(picFilePath.length() - 7, 7); - if (QFile::rename(picFilePath, newPicFilePath)) - { + if (QFile::rename(picFilePath, newPicFilePath)) { picFilePath = newPicFilePath; return true; } @@ -797,8 +741,7 @@ QSize SnapmaticPicture::getSnapmaticResolution() SnapmaticFormat SnapmaticPicture::getSnapmaticFormat() { - if (p_ragePhoto.photoFormat() == RagePhoto::PhotoFormat::G5EX) - { + if (p_ragePhoto.photoFormat() == RagePhoto::PhotoFormat::G5EX) { return SnapmaticFormat::G5E_Format; } return SnapmaticFormat::PGTA_Format; @@ -806,13 +749,11 @@ SnapmaticFormat SnapmaticPicture::getSnapmaticFormat() void SnapmaticPicture::setSnapmaticFormat(SnapmaticFormat format) { - if (format == SnapmaticFormat::G5E_Format) - { + if (format == SnapmaticFormat::G5E_Format) { p_ragePhoto.setPhotoFormat(RagePhoto::PhotoFormat::G5EX); return; } - else if (format == SnapmaticFormat::PGTA_Format) - { + else if (format == SnapmaticFormat::PGTA_Format) { p_ragePhoto.setPhotoFormat(RagePhoto::PhotoFormat::GTA5); return; } @@ -829,10 +770,8 @@ bool SnapmaticPicture::isFormatSwitched() bool SnapmaticPicture::verifyTitle(const QString &title) { // VERIFY TITLE FOR BE A VALID SNAPMATIC TITLE - if (title.length() <= 39 && title.length() > 0) - { - for (const QChar &titleChar : title) - { + if (title.length() <= 39 && title.length() > 0) { + for (const QChar &titleChar : title) { if (!verifyTitleChar(titleChar)) return false; } return true; @@ -843,8 +782,7 @@ bool SnapmaticPicture::verifyTitle(const QString &title) bool SnapmaticPicture::verifyTitleChar(const QChar &titleChar) { // VERIFY CHAR FOR BE A VALID SNAPMATIC CHARACTER - if (titleChar.isLetterOrNumber() || titleChar.isPrint()) - { + if (titleChar.isLetterOrNumber() || titleChar.isPrint()) { if (titleChar == '<' || titleChar == '>' || titleChar == '\\') return false; return true; } diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index b5571ce..8113cdc 100644 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -35,6 +35,7 @@ struct SnapmaticProperties { double x; double y; double z; + bool isCayoPerico; }; int uid; int crewID; diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index c30c0d5..9712e28 100644 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -85,7 +85,8 @@ void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture) QPixmap renderPixmap(renderResolution); renderPixmap.fill(Qt::transparent); QPainter renderPainter(&renderPixmap); - const QImage renderImage = picture->getImage().scaled(renderResolution, Qt::KeepAspectRatio, Qt::SmoothTransformation); + const QImage originalImage = picture->getImage(); + const QImage renderImage = originalImage.scaled(renderResolution, Qt::KeepAspectRatio, Qt::SmoothTransformation); // Stack smash if (renderImage.width() < renderResolution.width()) { renderPainter.drawImage((renderResolution.width() - renderImage.width()) / 2, 0, renderImage, Qt::AutoColor); } @@ -115,8 +116,7 @@ void SnapmaticWidget::snapmaticUpdated() void SnapmaticWidget::customSignal(QString signal) { - if (signal == "PictureUpdated") - { + if (signal == "PictureUpdated") { QPixmap SnapmaticPixmap = QPixmap::fromImage(smpic->getImage().scaled(ui->labPicture->width(), ui->labPicture->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::AutoColor); ui->labPicture->setPixmap(SnapmaticPixmap); } @@ -146,7 +146,8 @@ void SnapmaticWidget::on_cmdView_clicked() QObject::connect(picDialog, SIGNAL(previousPictureRequested()), this, SLOT(dialogPreviousPictureRequested())); // add previous next buttons - if (navigationBar) picDialog->addPreviousNextButtons(); + if (navigationBar) + picDialog->addPreviousNextButtons(); // show picture dialog #ifdef Q_OS_ANDROID @@ -175,23 +176,21 @@ void SnapmaticWidget::on_cmdExport_clicked() void SnapmaticWidget::on_cmdDelete_clicked() { - if (deletePicture()) emit pictureDeleted(); + if (deletePicture()) + emit pictureDeleted(); } bool SnapmaticWidget::deletePicture() { int uchoice = QMessageBox::question(this, tr("Delete picture"), tr("Are you sure to delete %1 from your Snapmatic pictures?").arg("\""+smpic->getPictureTitle()+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); - if (uchoice == QMessageBox::Yes) - { - if (smpic->deletePictureFile()) - { + if (uchoice == QMessageBox::Yes) { + if (smpic->deletePictureFile()) { #ifdef GTA5SYNC_TELEMETRY QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); telemetrySettings.beginGroup("Telemetry"); bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); telemetrySettings.endGroup(); - if (pushUsageData && Telemetry->canPush()) - { + if (pushUsageData && Telemetry->canPush()) { QJsonDocument jsonDocument; QJsonObject jsonObject; jsonObject["Type"] = "DeleteSuccess"; @@ -208,8 +207,7 @@ bool SnapmaticWidget::deletePicture() #endif return true; } - else - { + else { QMessageBox::warning(this, tr("Delete picture"), tr("Failed at deleting %1 from your Snapmatic pictures").arg("\""+smpic->getPictureTitle()+"\"")); } } @@ -224,29 +222,22 @@ void SnapmaticWidget::mousePressEvent(QMouseEvent *ev) void SnapmaticWidget::mouseReleaseEvent(QMouseEvent *ev) { ProfileWidget::mouseReleaseEvent(ev); - if (ui->cbSelected->isVisible()) - { - if (rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) - { + if (ui->cbSelected->isVisible()) { + if (rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) { ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); } } - else - { + else { const int contentMode = getContentMode(); - if ((contentMode == 0 || contentMode == 10 || contentMode == 20) && rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) - { - if (ev->modifiers().testFlag(Qt::ShiftModifier)) - { + if ((contentMode == 0 || contentMode == 10 || contentMode == 20) && rect().contains(ev->pos()) && ev->button() == Qt::LeftButton) { + if (ev->modifiers().testFlag(Qt::ShiftModifier)) { ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); } - else - { + else { on_cmdView_clicked(); } } - else if (!ui->cbSelected->isVisible() && (contentMode == 1 || contentMode == 11 || contentMode == 21) && ev->button() == Qt::LeftButton && ev->modifiers().testFlag(Qt::ShiftModifier)) - { + else if (!ui->cbSelected->isVisible() && (contentMode == 1 || contentMode == 11 || contentMode == 21) && ev->button() == Qt::LeftButton && ev->modifiers().testFlag(Qt::ShiftModifier)) { ui->cbSelected->setChecked(!ui->cbSelected->isChecked()); } } @@ -257,8 +248,7 @@ void SnapmaticWidget::mouseDoubleClickEvent(QMouseEvent *ev) ProfileWidget::mouseDoubleClickEvent(ev); const int contentMode = getContentMode(); - if (!ui->cbSelected->isVisible() && (contentMode == 1 || contentMode == 11 || contentMode == 21) && ev->button() == Qt::LeftButton) - { + if (!ui->cbSelected->isVisible() && (contentMode == 1 || contentMode == 11 || contentMode == 21) && ev->button() == Qt::LeftButton) { on_cmdView_clicked(); } } @@ -290,32 +280,27 @@ void SnapmaticWidget::dialogPreviousPictureRequested() void SnapmaticWidget::on_cbSelected_stateChanged(int arg1) { - if (arg1 == Qt::Checked) - { + if (arg1 == Qt::Checked) { emit widgetSelected(); } - else if (arg1 == Qt::Unchecked) - { + else if (arg1 == Qt::Unchecked) { emit widgetDeselected(); } } void SnapmaticWidget::adjustTextColor() { - if (isHidden()) - { + if (isHidden()) { ui->labPicStr->setStyleSheet(QString("QLabel{color: rgb(%1, %2, %3);}").arg(QString::number(highlightHiddenColor.red()), QString::number(highlightHiddenColor.green()), QString::number(highlightHiddenColor.blue()))); } - else - { + else { ui->labPicStr->setStyleSheet(""); } } bool SnapmaticWidget::makePictureHidden() { - if (smpic->setPictureHidden()) - { + if (smpic->setPictureHidden()) { adjustTextColor(); return true; } @@ -324,8 +309,7 @@ bool SnapmaticWidget::makePictureHidden() bool SnapmaticWidget::makePictureVisible() { - if (smpic->setPictureVisible()) - { + if (smpic->setPictureVisible()) { adjustTextColor(); return true; } @@ -335,17 +319,13 @@ bool SnapmaticWidget::makePictureVisible() void SnapmaticWidget::makePictureHiddenSlot() { if (!makePictureHidden()) - { QMessageBox::warning(this, QApplication::translate("UserInterface", "Hide In-game"), QApplication::translate("SnapmaticWidget", "Failed to hide %1 In-game from your Snapmatic pictures").arg("\""+smpic->getPictureTitle()+"\"")); - } } void SnapmaticWidget::makePictureVisibleSlot() { if (!makePictureVisible()) - { QMessageBox::warning(this, QApplication::translate("UserInterface", "Show In-game"), QApplication::translate("SnapmaticWidget", "Failed to show %1 In-game from your Snapmatic pictures").arg("\""+smpic->getPictureTitle()+"\"")); - } } void SnapmaticWidget::editSnapmaticProperties() @@ -375,21 +355,17 @@ void SnapmaticWidget::editSnapmaticImage() importDialog->enableOverwriteMode(); importDialog->setModal(true); importDialog->exec(); - if (importDialog->isImportAgreed()) - { + if (importDialog->isImportAgreed()) { const QByteArray previousPicture = smpic->getPictureStream(); bool success = smpic->setImage(importDialog->image()); - if (success) - { + if (success) { QString currentFilePath = smpic->getPictureFilePath(); QString originalFilePath = smpic->getOriginalPictureFilePath(); QString backupFileName = originalFilePath % ".bak"; - if (!QFile::exists(backupFileName)) - { + if (!QFile::exists(backupFileName)) { QFile::copy(currentFilePath, backupFileName); } - if (!smpic->exportPicture(currentFilePath)) - { + if (!smpic->exportPicture(currentFilePath)) { smpic->setPictureStream(previousPicture); QMessageBox::warning(this, QApplication::translate("ImageEditorDialog", "Snapmatic Image Editor"), QApplication::translate("ImageEditorDialog", "Patching of Snapmatic Image failed because of I/O Error")); return; @@ -400,8 +376,7 @@ void SnapmaticWidget::editSnapmaticImage() telemetrySettings.beginGroup("Telemetry"); bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); telemetrySettings.endGroup(); - if (pushUsageData && Telemetry->canPush()) - { + if (pushUsageData && Telemetry->canPush()) { QJsonDocument jsonDocument; QJsonObject jsonObject; jsonObject["Type"] = "ImageEdited"; @@ -417,8 +392,7 @@ void SnapmaticWidget::editSnapmaticImage() } #endif } - else - { + else { QMessageBox::warning(this, QApplication::translate("ImageEditorDialog", "Snapmatic Image Editor"), QApplication::translate("ImageEditorDialog", "Patching of Snapmatic Image failed because of Image Error")); return; } @@ -429,42 +403,38 @@ void SnapmaticWidget::editSnapmaticImage() void SnapmaticWidget::openMapViewer() { SnapmaticPicture *picture = smpic; - MapLocationDialog *mapLocDialog = new MapLocationDialog(picture->getSnapmaticProperties().location.x, picture->getSnapmaticProperties().location.y, this); + SnapmaticProperties currentProperties = picture->getSnapmaticProperties(); + MapLocationDialog *mapLocDialog = new MapLocationDialog(currentProperties.location.x, currentProperties.location.y, this); + mapLocDialog->setCayoPerico(currentProperties.location.isCayoPerico); mapLocDialog->setModal(true); mapLocDialog->show(); mapLocDialog->exec(); - if (mapLocDialog->propUpdated()) - { + if (mapLocDialog->propUpdated()) { // Update Snapmatic Properties - SnapmaticProperties localSpJson = picture->getSnapmaticProperties(); - localSpJson.location.x = mapLocDialog->getXpos(); - localSpJson.location.y = mapLocDialog->getYpos(); - localSpJson.location.z = 0; + currentProperties.location.x = mapLocDialog->getXpos(); + currentProperties.location.y = mapLocDialog->getYpos(); + currentProperties.location.z = 0; // Update Snapmatic Picture QString currentFilePath = picture->getPictureFilePath(); QString originalFilePath = picture->getOriginalPictureFilePath(); QString backupFileName = originalFilePath % ".bak"; - if (!QFile::exists(backupFileName)) - { + if (!QFile::exists(backupFileName)) { QFile::copy(currentFilePath, backupFileName); } SnapmaticProperties fallbackProperties = picture->getSnapmaticProperties(); - picture->setSnapmaticProperties(localSpJson); - if (!picture->exportPicture(currentFilePath)) - { + picture->setSnapmaticProperties(currentProperties); + if (!picture->exportPicture(currentFilePath)) { QMessageBox::warning(this, SnapmaticEditor::tr("Snapmatic Properties"), SnapmaticEditor::tr("Patching of Snapmatic Properties failed because of I/O Error")); picture->setSnapmaticProperties(fallbackProperties); } #ifdef GTA5SYNC_TELEMETRY - else - { + else { QSettings telemetrySettings(GTA5SYNC_APPVENDOR, GTA5SYNC_APPSTR); telemetrySettings.beginGroup("Telemetry"); bool pushUsageData = telemetrySettings.value("PushUsageData", false).toBool(); telemetrySettings.endGroup(); - if (pushUsageData && Telemetry->canPush()) - { + if (pushUsageData && Telemetry->canPush()) { QJsonDocument jsonDocument; QJsonObject jsonObject; jsonObject["Type"] = "LocationEdited"; diff --git a/StandardPaths.cpp b/StandardPaths.cpp index 3f466ab..c2f8111 100644 --- a/StandardPaths.cpp +++ b/StandardPaths.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5view Grand Theft Auto V Profile Viewer -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2021 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 @@ -23,11 +23,6 @@ #include #endif -StandardPaths::StandardPaths() -{ - -} - QString StandardPaths::applicationsLocation() { #if QT_VERSION >= 0x050000 diff --git a/StandardPaths.h b/StandardPaths.h index d03df33..590e0dc 100644 --- a/StandardPaths.h +++ b/StandardPaths.h @@ -1,6 +1,6 @@ /***************************************************************************** * gta5view Grand Theft Auto V Profile Viewer -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2021 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 @@ -24,7 +24,6 @@ class StandardPaths { public: - StandardPaths(); static QString applicationsLocation(); static QString cacheLocation(); static QString dataLocation(); diff --git a/StringParser.cpp b/StringParser.cpp index f058ade..4ac3fba 100644 --- a/StringParser.cpp +++ b/StringParser.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * gta5view Grand Theft Auto V Profile Viewer -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2021 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 @@ -17,7 +17,9 @@ *****************************************************************************/ #include "StringParser.h" +#include "config.h" #include +#include #include #include #include @@ -25,16 +27,6 @@ #include #include -#ifdef GTA5SYNC_PROJECT -#include -#include "config.h" -#endif - -StringParser::StringParser() -{ - -} - QString StringParser::escapeString(const QString &toEscape) { #if QT_VERSION >= 0x050000 @@ -44,7 +36,6 @@ QString StringParser::escapeString(const QString &toEscape) #endif } -#ifdef GTA5SYNC_PROJECT QString StringParser::convertBuildedString(const QString &buildedStr) { QString outputStr = buildedStr; @@ -61,4 +52,3 @@ QString StringParser::convertBuildedString(const QString &buildedStr) outputStr.replace("SEPARATOR:", QDir::separator()); return outputStr; } -#endif diff --git a/StringParser.h b/StringParser.h index 59b6460..7dac436 100644 --- a/StringParser.h +++ b/StringParser.h @@ -1,6 +1,6 @@ /***************************************************************************** * gta5view Grand Theft Auto V Profile Viewer -* Copyright (C) 2016-2017 Syping +* Copyright (C) 2016-2021 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 @@ -25,11 +25,8 @@ class StringParser { public: - StringParser(); static QString escapeString(const QString &toEscape); -#ifdef GTA5SYNC_PROJECT static QString convertBuildedString(const QString &buildedStr); -#endif }; #endif // STRINGPARSER_H diff --git a/UserInterface.cpp b/UserInterface.cpp index 3f4d016..fad032a 100644 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -77,96 +77,79 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, appVersion)); // Set Icon for Close Button - if (QIcon::hasThemeIcon("dialog-close")) - { + if (QIcon::hasThemeIcon("dialog-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close")); } - else if (QIcon::hasThemeIcon("gtk-close")) - { + else if (QIcon::hasThemeIcon("gtk-close")) { ui->cmdClose->setIcon(QIcon::fromTheme("gtk-close")); } // Set Icon for Reload Button - if (QIcon::hasThemeIcon("view-refresh")) - { + if (QIcon::hasThemeIcon("view-refresh")) { ui->cmdReload->setIcon(QIcon::fromTheme("view-refresh")); } - else if (QIcon::hasThemeIcon("reload")) - { + else if (QIcon::hasThemeIcon("reload")) { ui->cmdReload->setIcon(QIcon::fromTheme("reload")); } // Set Icon for Choose GTA V Folder Menu Item - if (QIcon::hasThemeIcon("document-open-folder")) - { + if (QIcon::hasThemeIcon("document-open-folder")) { ui->actionSelect_GTA_Folder->setIcon(QIcon::fromTheme("document-open-folder")); } - else if (QIcon::hasThemeIcon("gtk-directory")) - { + else if (QIcon::hasThemeIcon("gtk-directory")) { ui->actionSelect_GTA_Folder->setIcon(QIcon::fromTheme("gtk-directory")); } // Set Icon for Open File Menu Item - if (QIcon::hasThemeIcon("document-open")) - { + if (QIcon::hasThemeIcon("document-open")) { ui->actionOpen_File->setIcon(QIcon::fromTheme("document-open")); } // Set Icon for Close Profile Menu Item - if (QIcon::hasThemeIcon("dialog-close")) - { + if (QIcon::hasThemeIcon("dialog-close")) { ui->actionSelect_profile->setIcon(QIcon::fromTheme("dialog-close")); } - else if (QIcon::hasThemeIcon("gtk-close")) - { + else if (QIcon::hasThemeIcon("gtk-close")) { ui->actionSelect_profile->setIcon(QIcon::fromTheme("gtk-close")); } // Set Icon for Exit Menu Item - if (QIcon::hasThemeIcon("application-exit")) - { + if (QIcon::hasThemeIcon("application-exit")) { #ifndef Q_OS_MACOS // Setting icon for exit/quit lead to a crash in Mac OS X ui->actionExit->setIcon(QIcon::fromTheme("application-exit")); #endif } // Set Icon for Preferences Menu Item - if (QIcon::hasThemeIcon("preferences-system")) - { + if (QIcon::hasThemeIcon("preferences-system")) { #ifndef Q_OS_MACOS // Setting icon for preferences/settings/options lead to a crash in Mac OS X ui->actionOptions->setIcon(QIcon::fromTheme("preferences-system")); #endif } - else if (QIcon::hasThemeIcon("configure")) - { + else if (QIcon::hasThemeIcon("configure")) { #ifndef Q_OS_MACOS // Setting icon for preferences/settings/options lead to a crash in Mac OS X ui->actionOptions->setIcon(QIcon::fromTheme("configure")); #endif } // Set Icon for Profile Import Menu Item - if (QIcon::hasThemeIcon("document-import")) - { + if (QIcon::hasThemeIcon("document-import")) { ui->action_Import->setIcon(QIcon::fromTheme("document-import")); } - else if (QIcon::hasThemeIcon("document-open")) - { + else if (QIcon::hasThemeIcon("document-open")) { ui->action_Import->setIcon(QIcon::fromTheme("document-open")); } // Set Icon for Profile Export Menu Item - if (QIcon::hasThemeIcon("document-export")) - { + if (QIcon::hasThemeIcon("document-export")) { ui->actionExport_selected->setIcon(QIcon::fromTheme("document-export")); } - else if (QIcon::hasThemeIcon("document-save")) - { + else if (QIcon::hasThemeIcon("document-save")) { ui->actionExport_selected->setIcon(QIcon::fromTheme("document-save")); } // Set Icon for Profile Remove Menu Item - if (QIcon::hasThemeIcon("remove")) - { + if (QIcon::hasThemeIcon("remove")) { ui->actionDelete_selected->setIcon(QIcon::fromTheme("remove")); } @@ -245,8 +228,7 @@ void UserInterface::setupDirEnv(bool showFolderDialog) void UserInterface::setupProfileUi() { qreal screenRatio = AppEnv::screenRatio(); - if (GTAV_Profiles.isEmpty()) - { + if (GTAV_Profiles.isEmpty()) { QPushButton *changeDirBtn = new QPushButton(tr("Select >A V Folder..."), ui->swSelection); changeDirBtn->setObjectName("cmdChangeDir"); changeDirBtn->setMinimumSize(0, 40 * screenRatio); @@ -256,8 +238,7 @@ void UserInterface::setupProfileUi() QObject::connect(changeDirBtn, SIGNAL(clicked(bool)), this, SLOT(changeFolder_clicked())); } - else for (QString GTAV_Profile : GTAV_Profiles) - { + else for (const QString >AV_Profile : GTAV_Profiles) { QPushButton *profileBtn = new QPushButton(GTAV_Profile, ui->swSelection); profileBtn->setObjectName(GTAV_Profile); profileBtn->setMinimumSize(0, 40 * screenRatio); @@ -277,8 +258,7 @@ void UserInterface::changeFolder_clicked() void UserInterface::on_cmdReload_clicked() { - for (QPushButton *profileBtn : profileBtns) - { + for (QPushButton *profileBtn : profileBtns) { ui->vlButtons->removeWidget(profileBtn); delete profileBtn; } @@ -341,11 +321,8 @@ void UserInterface::closeEvent(QCloseEvent *ev) UserInterface::~UserInterface() { if (profileOpen) - { closeProfile_p(); - } - for (QPushButton *profileBtn : profileBtns) - { + for (QPushButton *profileBtn : profileBtns) { delete profileBtn; } profileBtns.clear(); @@ -392,33 +369,25 @@ void UserInterface::profileLoaded() void UserInterface::on_actionSelect_all_triggered() { if (profileOpen) - { profileUI->selectAllWidgets(); - } } void UserInterface::on_actionDeselect_all_triggered() { if (profileOpen) - { profileUI->deselectAllWidgets(); - } } void UserInterface::on_actionExport_selected_triggered() { if (profileOpen) - { profileUI->exportSelected(); - } } void UserInterface::on_actionDelete_selected_triggered() { if (profileOpen) - { profileUI->deleteSelected(); - } } void UserInterface::on_actionOptions_triggered() @@ -443,9 +412,7 @@ void UserInterface::on_actionOptions_triggered() void UserInterface::on_action_Import_triggered() { if (profileOpen) - { profileUI->importFiles(); - } } void UserInterface::on_actionOpen_File_triggered() @@ -459,7 +426,11 @@ fileDialogPreOpen: fileDialog.setViewMode(QFileDialog::Detail); fileDialog.setAcceptMode(QFileDialog::AcceptOpen); fileDialog.setOption(QFileDialog::DontUseNativeDialog, false); +#if QT_VERSION >= 0x050900 + fileDialog.setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); +#endif fileDialog.setWindowTitle(tr("Open File...")); QStringList filters; diff --git a/gta5view.pro b/gta5view.pro index ed06e18..679cb3d 100644 --- a/gta5view.pro +++ b/gta5view.pro @@ -177,7 +177,6 @@ INCLUDEPATH += ./anpro ./pcg ./tmext ./uimod DEFINES += GTA5SYNC_QMAKE # We using qmake do we? DEFINES += GTA5SYNC_PROJECT # Enable exclusive gta5sync/gta5view functions -DEFINES += SNAPMATIC_NODEFAULT # Not assisting at proper usage of SnapmaticPicture class # WINDOWS ONLY diff --git a/res/app.qrc b/res/app.qrc index 151b282..f0e8b1c 100644 --- a/res/app.qrc +++ b/res/app.qrc @@ -14,6 +14,7 @@ gta5view-96.png gta5view-128.png gta5view-256.png + mapcayoperico.jpg mappreview.jpg next.svgz pointmaker-8.png diff --git a/res/gta5sync.ts b/res/gta5sync.ts index f6d7bfd..02eb2d8 100644 --- a/res/gta5sync.ts +++ b/res/gta5sync.ts @@ -28,30 +28,30 @@ Running with Qt %6<br/> - + Translated by %1 Translated by translator, example Translated by Syping - + TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile - + A project for viewing Grand Theft Auto V Snapmatic<br/> Pictures and Savegames - + Copyright &copy; <a href="%1">%2</a> %3 - + %1 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> @@ -167,47 +167,47 @@ Pictures and Savegames ImageEditorDialog - + Overwrite Image... - + Apply changes - + &Overwrite - + Discard changes - + &Close - - - - + + + + Snapmatic Image Editor - - + + Patching of Snapmatic Image failed because of I/O Error - - + + Patching of Snapmatic Image failed because of Image Error @@ -252,9 +252,9 @@ Pictures and Savegames - - - + + + Background Colour: <span style="color: %1">%1</span> @@ -265,9 +265,9 @@ Pictures and Savegames - - - + + + Background Image: @@ -352,143 +352,143 @@ Pictures and Savegames - + &Import new Picture... - + &Crop Picture... - + &Load Settings... - + &Save Settings... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + Storage Background Image: Storage - + Crop Picture... - + &Crop - + Crop Picture - - + + Please import a new picture first - - + + Default Default as Default Profile - - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + + Profile %1 Profile %1 as Profile 1 - - + + Load Settings... - - + + Save Settings... - - + + Snapmatic Avatar Zone - - + + Are you sure to use a square image outside of the Avatar Zone? When you want to use it as Avatar the image will be detached! - + Select Colour... - - + + Background Image: %1 - - + + Please select your settings profile - + File Background Image: File @@ -522,7 +522,7 @@ When you want to use it as Avatar the image will be detached! - + JSON Error @@ -585,7 +585,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -728,26 +728,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 - - + - + + Language: %1 @@ -768,7 +768,7 @@ Y: %2 - + Participate in %1 User Statistics @@ -804,8 +804,8 @@ Y: %2 - + Participation ID: %1 @@ -827,8 +827,8 @@ Y: %2 - - + + Current: %1 @@ -890,95 +890,95 @@ Y: %2 - + System System in context of System default - + %1 (Game language) Next closest language compared to the Game settings - - + + %1 (Closest to Interface) Next closest language compared to the Interface - - + + Auto Automatic language choice. - + %1 (Language priority) First language a person can talk with a different person/application. "Native" or "Not Native". - + %1 %1 - + The new Custom Folder will initialise after you restart %1. - + No Profile No Profile, as default - - + + Profile: %1 - + View %1 User Statistics Online - + Not registered - - - - + + + + Yes - - + + No - - + + OS defined - - + + Steam defined @@ -1019,78 +1019,78 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Edit Properties... - + &Overwrite Image... - + Open &Map Viewer... - + Open &JSON Editor... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate - + Snapmatic Picture Viewer - + Failed at %1 - - - + + + No Players - - + + No Crew - + Unknown Location - + Avatar Preview Mode Press 1 for Default View @@ -1227,28 +1227,28 @@ Press 1 for Default View - + Add Players... - + Failed to add more Players because the limit of Players are %1! - - + + Add Player... - + Enter Social Club Player ID - + Failed to add Player %1 because Player %1 is already added! @@ -1298,8 +1298,8 @@ Press 1 for Default View - - + + @@ -1321,40 +1321,40 @@ Press 1 for Default View - - - - - - + + + + + + Import - - + + All image files (%1) - - + + - + All files (**) - - + + Can't import %1 because file can't be open - - + + Can't import %1 because file can't be parsed properly @@ -1386,26 +1386,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + No valid file is selected @@ -1424,13 +1424,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture - + Failed to read Savegame file @@ -1640,7 +1640,7 @@ Press 1 for Default View - + All profile files (*.g5e SGTA* PGTA*) @@ -1649,7 +1649,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer @@ -1669,7 +1669,7 @@ Press 1 for Default View - + Failed at %1 @@ -1850,13 +1850,13 @@ Press 1 for Default View - - - - - - - + + + + + + + Snapmatic Properties @@ -1936,96 +1936,96 @@ Press 1 for Default View - + <h4>Unsaved changes detected</h4>You want to save the JSON content before you quit? - + Patching of Snapmatic Properties failed because of %1 - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error - + Patching of Snapmatic Properties failed because of JSON Error - + Snapmatic Crew - + New Snapmatic crew: - + Snapmatic Title - + New Snapmatic title: - - - + + + Edit - + Players: %1 (%2) Multiple Player are inserted here - + Player: %1 (%2) One Player is inserted here - + Title: %1 (%2) - - + + Appropriate: %1 - + Yes Yes, should work fine - + No No, could lead to issues - + Crew: %1 (%2) @@ -2033,65 +2033,65 @@ Press 1 for Default View SnapmaticPicture - - + + JSON is incomplete and malformed - - + + JSON is incomplete - - + + JSON is malformed - + PHOTO - %1 - + open file %1 - + header not exists - + header is malformed - + picture not exists (%1) - + JSON not exists (%1) - + title not exists (%1) - + description not exists (%1) - + reading file %1 because of %2 Example for %2: JSON is malformed error @@ -2141,8 +2141,8 @@ Press 1 for Default View - - + + Delete picture @@ -2212,22 +2212,22 @@ Press 1 for Default View - + Are you sure to delete %1 from your Snapmatic pictures? - + Failed at deleting %1 from your Snapmatic pictures - + Failed to hide %1 In-game from your Snapmatic pictures - + Failed to show %1 In-game from your Snapmatic pictures @@ -2291,7 +2291,7 @@ Press 1 for Default View - + &Close @@ -2328,7 +2328,7 @@ Press 1 for Default View - + &About %1 @@ -2384,15 +2384,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - - + + + Select GTA V Folder... @@ -2437,44 +2437,44 @@ Press 1 for Default View - + Show In-game - + Hide In-game - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format - + %1 - Messages diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index c72c189..ffc3a1a 100644 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -37,31 +37,31 @@ Läuft auf Qt %6<br/> S&chließen - + Translated by %1 Translated by translator, example Translated by Syping Übersetzt von %1 - + TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile Syping,g5e://about?U3lwaW5n:R2l0TGFiOiA8YSBocmVmPSJodHRwczovL2dpdGxhYi5jb20vU3lwaW5nIj5TeXBpbmc8L2E+PGJyLz5HaXRIdWI6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9TeXBpbmciPlN5cGluZzwvYT48YnIvPlNvY2lhbCBDbHViOiA8YSBocmVmPSJodHRwczovL3NvY2lhbGNsdWIucm9ja3N0YXJnYW1lcy5jb20vbWVtYmVyL1N5cGluZy80NjMwMzA1NiI+U3lwaW5nPC9hPg - + A project for viewing Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Ein Projekt zum ansehen von Grand Theft Auto V<br/> Snapmatic Bilder und Spielständen - + Copyright &copy; <a href="%1">%2</a> %3 Copyright &copy; <a href="%1">%2</a> %3 - + %1 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> %1 ist lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> @@ -177,47 +177,47 @@ Snapmatic Bilder und Spielständen ImageEditorDialog - - - - + + + + Snapmatic Image Editor Snapmatic Bild Editor - + Overwrite Image... Bild überschreiben... - + Apply changes Änderungen übernehmen - + &Overwrite &Überschreiben - + Discard changes Änderungen verwerfen - + &Close S&chließen - - + + Patching of Snapmatic Image failed because of I/O Error Patchen von Snapmatic Bild fehlgeschlagen wegen I/O Fehler - - + + Patching of Snapmatic Image failed because of Image Error Patchen von Snapmatic Bild fehlgeschlagen wegen Bild Fehler @@ -262,9 +262,9 @@ Snapmatic Bilder und Spielständen - - - + + + Background Colour: <span style="color: %1">%1</span> Hintergrundfarbe: <span style="color: %1">%1</span> @@ -293,8 +293,8 @@ Snapmatic Bilder und Spielständen Importiere das Bild ohne Veränderungen, Snapmatic wird garantiert beschädigt wenn du nicht weißt was du tust - - + + Background Image: %1 Hintergrundbild: %1 @@ -369,145 +369,145 @@ Snapmatic Bilder und Spielständen - - - + + + Background Image: Hintergrundbild: - + &Import new Picture... Neues Bild &importieren... - + &Crop Picture... Bild zu&schneiden... - + &Load Settings... Einstellungen &laden... - + &Save Settings... Einstellungen &speichern... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Eigener Avatar - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! Eigenes Bild - + Storage Background Image: Storage Speicher - + Crop Picture... Bild zuschneiden... - + &Crop Zu&schneiden - + Crop Picture Bild zuschneiden - - + + Please import a new picture first Bitte importiere ein neues Bild zuerst - - + + Default Default as Default Profile Standard - - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + + Profile %1 Profile %1 as Profile 1 Profil %1 - - + + Load Settings... Einstellungen laden... - - + + Please select your settings profile Bitte wähle dein Einstellungsprofil aus - - + + Save Settings... Einstellungen speichern... - - + + Are you sure to use a square image outside of the Avatar Zone? When you want to use it as Avatar the image will be detached! 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 Snapmatic Avatar Zone - + Select Colour... Farbe auswählen... - + File Background Image: File Datei @@ -541,7 +541,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! S&chließen - + JSON Error JSON Fehler @@ -604,7 +604,7 @@ Wenn du es als Avatar verwenden möchtest wird es abgetrennt! &Fertig - + X: %1 Y: %2 X and Y position @@ -756,26 +756,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 Gefunden: %1 - - + - + + Language: %1 Sprache: %1 @@ -796,7 +796,7 @@ Y: %2 - + Participate in %1 User Statistics An %1 Benutzerstatistik teilnehmen @@ -827,8 +827,8 @@ Y: %2 - + Participation ID: %1 Teilnahme ID: %1 @@ -884,8 +884,8 @@ Y: %2 - - + + Current: %1 Aktuell: %1 @@ -922,95 +922,95 @@ Y: %2 Abbre&chen - + %1 %1 %1 - + System System in context of System default System - + %1 (Game language) Next closest language compared to the Game settings %1 (Spielsprache) - - + + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Näheste zur Oberfläche) - - + + Auto Automatic language choice. Automatisch - + %1 (Language priority) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Sprachenpriorität) - + The new Custom Folder will initialise after you restart %1. Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. - + View %1 User Statistics Online %1 Benutzerstatistik Online ansehen - + Not registered Nicht registriert - - - - + + + + Yes Ja - - + + No Nein - - + + OS defined OS-defined - - + + Steam defined Steam-definiert - + No Profile No Profile, as default Kein Profil - - + + Profile: %1 Profil: %1 @@ -1060,37 +1060,37 @@ Y: %2 Exportieren - + Export as &Picture... Als &Bild exportieren... - + Export as &Snapmatic... Als &Snapmatic exportieren... - + &Edit Properties... Eigenschaften bearb&eiten... - + &Overwrite Image... Bild &überschreiben... - + Open &Map Viewer... &Kartenansicht öffnen... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1099,37 +1099,37 @@ Taste 2 - Overlay umschalten Pfeiltasten - Navigieren - + Snapmatic Picture Viewer Snapmatic Bildansicht - + Failed at %1 Fehlgeschlagen beim %1 - - + + No Crew Keine Crew - - - + + + No Players Keine Spieler - + Avatar Preview Mode Press 1 for Default View Avatar Vorschaumodus Drücke 1 für Standardmodus - + Unknown Location Unbekannter Standort @@ -1231,7 +1231,7 @@ Drücke 1 für Standardmodus Keine gültige Datei wurde ausgewählt - + Open &JSON Editor... &JSON Editor öffnen... @@ -1265,28 +1265,28 @@ Drücke 1 für Standardmodus Abbre&chen - + Add Players... Spieler hinzufügen... - + Failed to add more Players because the limit of Players are %1! Fehlgeschlagen beim Hinzufügen von mehr Spielern weil der Limit von Spielern %1 ist! - - + + Add Player... Spieler hinzufügen... - + Enter Social Club Player ID Social Club Spieler ID eingeben - + Failed to add Player %1 because Player %1 is already added! Fehlgeschlagen beim Hinzufügen vom Spieler %1 weil Spieler %1 bereits hinzugefügt wurde! @@ -1345,8 +1345,8 @@ Drücke 1 für Standardmodus <h4>Folgende Snapmatic Bilder wurden repariert</h4>%1 - - + + @@ -1368,24 +1368,24 @@ Drücke 1 für Standardmodus Importieren... - - - - - - + + + + + + Import Importieren - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1395,17 +1395,17 @@ Drücke 1 für Standardmodus Importfähige Dateien (%1) - - + + All image files (%1) Alle Bilddateien (%1) - - + + - + All files (**) Alle Dateien (**) @@ -1426,26 +1426,26 @@ Drücke 1 für Standardmodus - + Failed to read Snapmatic picture Fehler beim Lesen vom Snapmatic Bild - + Failed to read Savegame file Fehler beim Lesen von Spielstanddatei - - + + Can't import %1 because file can't be open Kann %1 nicht importieren weil die Datei nicht geöffnet werden kann - - + + Can't import %1 because file can't be parsed properly Kann %1 nicht importieren weil die Datei nicht richtig gelesen werden kann @@ -1473,7 +1473,7 @@ Drücke 1 für Standardmodus - + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1677,13 +1677,13 @@ Drücke 1 für Standardmodus Exportiere Datei %1 von %2 Dateien - + All profile files (*.g5e SGTA* PGTA*) Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1699,7 +1699,7 @@ Drücke 1 für Standardmodus SavegameDialog - + Savegame Viewer Spielstandanzeiger @@ -1719,7 +1719,7 @@ Drücke 1 für Standardmodus S&chließen - + Failed at %1 Fehlgeschlagen bei %1 @@ -1902,13 +1902,13 @@ Drücke 1 für Standardmodus - - - - - - - + + + + + + + Snapmatic Properties Snapmatic Eigenschaften @@ -1949,7 +1949,7 @@ Drücke 1 für Standardmodus - + Snapmatic Title Snapmatic Titel @@ -1959,30 +1959,30 @@ Drücke 1 für Standardmodus Snapmatic Werte - + Crew: %1 (%2) Crew: %1 (%2) - + Title: %1 (%2) Titel: %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here Spieler: %1 (%2) - + Player: %1 (%2) One Player is inserted here Spieler: %1 (%2) - - + + Appropriate: %1 Angemessen: %1 @@ -2022,62 +2022,62 @@ Drücke 1 für Standardmodus Abbre&chen - - - + + + Edit Bearbeiten - + Yes Yes, should work fine Ja - + No No, could lead to issues Nein - + <h4>Unsaved changes detected</h4>You want to save the JSON content before you quit? <h4>Ungespeicherte Änderungen erkannt</h4>Möchtest du den JSON Inhalt speichern bevor du verlässt? - + Patching of Snapmatic Properties failed because of %1 Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen %1 - + Patching of Snapmatic Properties failed because of JSON Error Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen JSON Fehler - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen I/O Fehler - + New Snapmatic title: Neuer Snapmatic Titel: - + Snapmatic Crew Snapmatic Crew - + New Snapmatic crew: Neue Snapmatic Crew: @@ -2085,66 +2085,66 @@ Drücke 1 für Standardmodus SnapmaticPicture - + PHOTO - %1 FOTO - %1 - + open file %1 Datei öffnen %1 - + header not exists Header nicht existiert - + header is malformed Header fehlerhaft ist - + picture not exists (%1) Bild nicht existiert (%1) - + JSON not exists (%1) JSON nicht existiert (%1) - + title not exists (%1) Titel nicht existiert (%1) - + description not exists (%1) Beschreibung nicht existiert (%1) - + reading file %1 because of %2 Example for %2: JSON is malformed error Datei lesen von %1 weil %2 - - + + JSON is incomplete and malformed JSON ist unvollständig und Fehlerhaft - - + + JSON is incomplete JSON ist unvollständig - - + + JSON is malformed JSON ist Fehlerhaft @@ -2183,23 +2183,23 @@ Drücke 1 für Standardmodus - - + + Delete picture Bild löschen - + Are you sure to delete %1 from your Snapmatic pictures? Bist du sicher %1 von deine Snapmatic Bilder zu löschen? - + Failed to hide %1 In-game from your Snapmatic pictures Fehlgeschlagen beim Ausblenden von %1 im Spiel von deinen Snapmatic Bildern - + Failed to show %1 In-game from your Snapmatic pictures Fehlgeschlagen beim Anzeigen von %1 im Spiel von deinen Snapmatic Bildern @@ -2279,7 +2279,7 @@ Drücke 1 für Standardmodus Bild exportieren - + Failed at deleting %1 from your Snapmatic pictures Fehlgeschlagen beim Löschen von %1 von deinen Snapmatic Bildern @@ -2410,7 +2410,7 @@ Drücke 1 für Standardmodus - + Select &GTA V Folder... Wähle &GTA V Ordner... @@ -2426,7 +2426,7 @@ Drücke 1 für Standardmodus - + &Close S&chließen @@ -2462,21 +2462,21 @@ Drücke 1 für Standardmodus - - + + Select Profile Profil auswählen - - - + + + Select GTA V Folder... Wähle GTA V Ordner... - + Open File... Datei öffnen... @@ -2489,25 +2489,25 @@ Drücke 1 für Standardmodus - + &About %1 &Über %1 - - - - + + + + Open File Datei öffnen - + Can't open %1 because of not valid file format Kann nicht %1 öffnen weil Dateiformat nicht gültig ist - + %1 - Messages %1 - Nachrichten @@ -2519,14 +2519,14 @@ Drücke 1 für Standardmodus - + Show In-game Im Spiel anzeigen - + Hide In-game Im Spiel ausblenden diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index da5b1e2..5870936 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -28,30 +28,30 @@ Running with Qt %6<br/> - + Translated by %1 Translated by translator, example Translated by Syping - + TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile Syping,g5e://about?U3lwaW5n:R2l0TGFiOiA8YSBocmVmPSJodHRwczovL2dpdGxhYi5jb20vU3lwaW5nIj5TeXBpbmc8L2E+PGJyLz5HaXRIdWI6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9TeXBpbmciPlN5cGluZzwvYT48YnIvPlNvY2lhbCBDbHViOiA8YSBocmVmPSJodHRwczovL3NvY2lhbGNsdWIucm9ja3N0YXJnYW1lcy5jb20vbWVtYmVyL1N5cGluZy80NjMwMzA1NiI+U3lwaW5nPC9hPg== - + A project for viewing Grand Theft Auto V Snapmatic<br/> Pictures and Savegames - + Copyright &copy; <a href="%1">%2</a> %3 - + %1 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> @@ -167,47 +167,47 @@ Pictures and Savegames ImageEditorDialog - - - - + + + + Snapmatic Image Editor - + Overwrite Image... - + Apply changes - + &Overwrite - + Discard changes - + &Close - - + + Patching of Snapmatic Image failed because of I/O Error - - + + Patching of Snapmatic Image failed because of Image Error @@ -221,9 +221,9 @@ Pictures and Savegames - - - + + + Background Colour: <span style="color: %1">%1</span> Background Color: <span style="color: %1">%1</span> @@ -264,8 +264,8 @@ Pictures and Savegames - - + + Background Image: %1 @@ -351,144 +351,144 @@ Pictures and Savegames - - - + + + Background Image: - + &Import new Picture... - + &Crop Picture... - + &Load Settings... - + &Save Settings... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! - + Storage Background Image: Storage - + Crop Picture... - + &Crop - + Crop Picture - - + + Please import a new picture first - - + + Default Default as Default Profile - - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + + Profile %1 Profile %1 as Profile 1 - - + + Load Settings... - - + + Please select your settings profile - - + + Save Settings... - - + + Snapmatic Avatar Zone - - + + Are you sure to use a square image outside of the Avatar Zone? When you want to use it as Avatar the image will be detached! - + Select Colour... Select Color... - + File Background Image: File @@ -522,7 +522,7 @@ When you want to use it as Avatar the image will be detached! - + JSON Error @@ -585,7 +585,7 @@ When you want to use it as Avatar the image will be detached! - + X: %1 Y: %2 X and Y position @@ -728,26 +728,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 - - + - + + Language: %1 @@ -763,7 +763,7 @@ Y: %2 - + Participate in %1 User Statistics @@ -784,8 +784,8 @@ Y: %2 - + Participation ID: %1 @@ -847,8 +847,8 @@ Y: %2 - - + + Current: %1 @@ -890,95 +890,95 @@ Y: %2 - + System System in context of System default - + %1 (Game language) Next closest language compared to the Game settings - - + + %1 (Closest to Interface) Next closest language compared to the Interface - - + + Auto Automatic language choice. - + %1 (Language priority) First language a person can talk with a different person/application. "Native" or "Not Native". - + %1 %1 - + The new Custom Folder will initialise after you restart %1. The new Custom Folder will initialize after you restart %1. - + No Profile No Profile, as default - - + + Profile: %1 - + View %1 User Statistics Online - + Not registered - - - - + + + + Yes - - + + No - - + + OS defined - - + + Steam defined @@ -1019,72 +1019,72 @@ Y: %2 - + Export as &Picture... - + Export as &Snapmatic... - + &Overwrite Image... - + &Edit Properties... - + Open &Map Viewer... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate - + Snapmatic Picture Viewer - + Failed at %1 - - - + + + No Players - - + + No Crew - + Unknown Location - + Avatar Preview Mode Press 1 for Default View @@ -1193,7 +1193,7 @@ Press 1 for Default View - + Open &JSON Editor... @@ -1227,28 +1227,28 @@ Press 1 for Default View - + Add Players... - + Failed to add more Players because the limit of Players are %1! - - + + Add Player... - + Enter Social Club Player ID - + Failed to add Player %1 because Player %1 is already added! @@ -1318,8 +1318,8 @@ Press 1 for Default View - - + + @@ -1341,12 +1341,12 @@ Press 1 for Default View - - - - - - + + + + + + Import @@ -1357,41 +1357,41 @@ Press 1 for Default View - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - - + + All image files (%1) - - + + - + All files (**) - + No valid file is selected @@ -1410,26 +1410,26 @@ Press 1 for Default View - + Failed to read Snapmatic picture - + Failed to read Savegame file - - + + Can't import %1 because file can't be open - - + + Can't import %1 because file can't be parsed properly @@ -1640,7 +1640,7 @@ Press 1 for Default View - + All profile files (*.g5e SGTA* PGTA*) @@ -1649,7 +1649,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer @@ -1669,7 +1669,7 @@ Press 1 for Default View - + Failed at %1 @@ -1850,13 +1850,13 @@ Press 1 for Default View - - - - - - - + + + + + + + Snapmatic Properties @@ -1901,30 +1901,30 @@ Press 1 for Default View - + Crew: %1 (%2) - + Title: %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here - + Player: %1 (%2) One Player is inserted here - - + + Appropriate: %1 @@ -1964,68 +1964,68 @@ Press 1 for Default View - - - + + + Edit - + Yes Yes, should work fine - + No No, could lead to issues - + <h4>Unsaved changes detected</h4>You want to save the JSON content before you quit? - + Patching of Snapmatic Properties failed because of %1 - + Patching of Snapmatic Properties failed because of JSON Error - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -2033,66 +2033,66 @@ Press 1 for Default View SnapmaticPicture - + PHOTO - %1 - + open file %1 - + header not exists - + header is malformed - + picture not exists (%1) - + JSON not exists (%1) - + title not exists (%1) - + description not exists (%1) - + reading file %1 because of %2 Example for %2: JSON is malformed error - - + + JSON is incomplete and malformed - - + + JSON is incomplete - - + + JSON is malformed @@ -2141,8 +2141,8 @@ Press 1 for Default View - - + + Delete picture @@ -2212,22 +2212,22 @@ Press 1 for Default View - + Are you sure to delete %1 from your Snapmatic pictures? - + Failed at deleting %1 from your Snapmatic pictures - + Failed to hide %1 In-game from your Snapmatic pictures - + Failed to show %1 In-game from your Snapmatic pictures @@ -2291,7 +2291,7 @@ Press 1 for Default View - + &Close @@ -2323,7 +2323,7 @@ Press 1 for Default View - + &About %1 @@ -2379,15 +2379,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - - + + + Select GTA V Folder... @@ -2436,45 +2436,45 @@ Press 1 for Default View - - + + Select Profile - + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format - + %1 - Messages - + Show In-game - + Hide In-game diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 57e78f8..e0b4ae6 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -37,32 +37,32 @@ Fonctionne avec Qt %6<br/> &Fermer - + Translated by %1 Translated by translator, example Translated by Syping Traduit par %1 - + TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile Ganjalo,https://github.com/Ganjalo/ XeriosG,g5e://about?WGVyaW9zRw:RGlzY29yZDogWGVyaW9zRyM1MzIxPGJyLz5TdGVhbTogPGEgaHJlZj0iaHR0cHM6Ly9zdGVhbWNvbW11bml0eS5jb20vcHJvZmlsZXMvNzY1NjExOTg0MjU2NjU3MjQvIj5YZXJpb3NHPC9hPg - + A project for viewing Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Un outil pour gérer les photos Snapmatic<br/> et les fichiers de sauvegarde de Grand Theft Auto V - + Copyright &copy; <a href="%1">%2</a> %3 Copyright &copy; <a href="%1">%2</a> %3 - + %1 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> %1 est distribué sous license <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> @@ -178,47 +178,47 @@ et les fichiers de sauvegarde de Grand Theft Auto V ImageEditorDialog - - - - + + + + Snapmatic Image Editor Éditeur d'images Snapmatic - + Overwrite Image... Remplacer l'image... - + Apply changes Appliquer les modifications - + &Overwrite &Remplacer - + Discard changes Annuler les modifications - + &Close &Fermer - - + + Patching of Snapmatic Image failed because of I/O Error Échec du patch Snapmatic : I/O Error - - + + Patching of Snapmatic Image failed because of Image Error Échec du patch Snapmatic : Image Error @@ -263,9 +263,9 @@ et les fichiers de sauvegarde de Grand Theft Auto V - - - + + + Background Colour: <span style="color: %1">%1</span> Couleur de fond : <span style="color: %1">%1</span> @@ -289,8 +289,8 @@ et les fichiers de sauvegarde de Grand Theft Auto V Supprimer l'image de fond - - + + Background Image: %1 Image de fond : %1 @@ -370,145 +370,145 @@ et les fichiers de sauvegarde de Grand Theft Auto V - - - + + + Background Image: Image de fond : - + &Import new Picture... &Importer une nouvelle image... - + &Crop Picture... &Rogner l'image... - + &Load Settings... &Charger les paramètres... - + &Save Settings... &Sauvegarder les paramètres... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Avatar personnalisé - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! Image personnalisé - + Storage Background Image: Storage Stockage - + Crop Picture... Rogner l'image... - + &Crop &Rogner - + Crop Picture Rogner l'image - - + + Please import a new picture first Veuillez d'abord importer une nouvelle image - - + + Default Default as Default Profile Défaut - - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + + Profile %1 Profile %1 as Profile 1 Profil %1 - - + + Load Settings... Charger les paramètres... - - + + Please select your settings profile Veuillez choisir votre profil de paramètres - - + + Save Settings... Sauvegarder les paramètres... - - + + Are you sure to use a square image outside of the Avatar Zone? When you want to use it as Avatar the image will be detached! Ê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 ! - - + + Snapmatic Avatar Zone Zone d'avatar Snapmatic - + Select Colour... Choisir une couleur... - + File Background Image: File Fichier @@ -542,7 +542,7 @@ Si vous l'utilisez comme Avatar, l'image sera détachée !&Fermer - + JSON Error Erreur JSON @@ -605,7 +605,7 @@ Si vous l'utilisez comme Avatar, l'image sera détachée !&Terminer - + X: %1 Y: %2 X and Y position @@ -757,26 +757,26 @@ Y : %2 - - - - - - + + + + + + Found: %1 Trouvé : %1 - - + - + + Language: %1 Langue : %1 @@ -797,7 +797,7 @@ Y : %2 - + Participate in %1 User Statistics Participer aux statistiques d'usage %1 @@ -828,8 +828,8 @@ Y : %2 - + Participation ID: %1 ID de participation : %1 @@ -880,8 +880,8 @@ Y : %2 - - + + Current: %1 Actuel : %1 @@ -923,95 +923,95 @@ Y : %2 &Annuler - + System System in context of System default Système - + %1 (Game language) Next closest language compared to the Game settings %1 (Langue du jeu) - - + + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Langage proche de l'interface) - - + + Auto Automatic language choice. Automatique - + %1 (Language priority) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Priorité de la langue) - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Le nouveau Dossier personnalisé sera initialisé au redémarrage de %1. - + View %1 User Statistics Online Voir les statistiques d'usage %1 en ligne - + Not registered Pas enregistré - - - - + + + + Yes Oui - - + + No Non - - + + OS defined Défini par le système d'exploitation - - + + Steam defined Défini par Steam - + No Profile No Profile, as default Aucun profil - - + + Profile: %1 Profil : %1 @@ -1141,37 +1141,37 @@ Y : %2 Fichier invalide - + Export as &Picture... Exporter comme &image... - + Export as &Snapmatic... Exporter comme &Snapmatic... - + &Overwrite Image... &Remplacer l'image... - + &Edit Properties... Modifier les &propriétés... - + Open &Map Viewer... Ouvrir la &Visionneuse de Carte... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1180,37 +1180,37 @@ Touche 2 - Activer/désactiver l'overlay Touches fléchées - Naviguer - + Snapmatic Picture Viewer Visionneuse de photo Snapmatic - + Failed at %1 Echec de %1 - - + + No Crew Aucun crew - - - + + + No Players Aucun joueurs - + Avatar Preview Mode Press 1 for Default View Mode Aperçu Avatar Appuyer sur 1 pour le mode par défaut - + Unknown Location Emplacement inconnu @@ -1232,7 +1232,7 @@ Appuyer sur 1 pour le mode par défaut Échec de l'export de la photo Snapmatic - + Open &JSON Editor... Ouvrir l'éditeur &JSON... @@ -1266,28 +1266,28 @@ Appuyer sur 1 pour le mode par défaut A&nnuler - + Add Players... Ajouter des joueurs... - + Failed to add more Players because the limit of Players are %1! Échec de l'ajout de joueurs : la limite de %1 est atteinte ! - - + + Add Player... Ajouter un joueur... - + Enter Social Club Player ID Entrer l'ID Social Club du joueur - + Failed to add Player %1 because Player %1 is already added! Échec de l'ajout du joueur %1 car le joueur %1 est déjà ajouté ! @@ -1357,8 +1357,8 @@ Appuyer sur 1 pour le mode par défaut <h4>Les Snapmatic suivants ont été répaés</h4>%1 - - + + @@ -1380,39 +1380,39 @@ Appuyer sur 1 pour le mode par défaut Importer... - - - - - - + + + + + + Import Importer - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) - - + + All image files (%1) Toutes les images (%1) - - + + - + All files (**) Tous les fichiers (**) @@ -1434,7 +1434,7 @@ Appuyer sur 1 pour le mode par défaut - + No valid file is selected Fichier invalide @@ -1445,26 +1445,26 @@ Appuyer sur 1 pour le mode par défaut - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde - - + + Can't import %1 because file can't be open Impossible d'importer %1, le fichier ne peut pas être ouvert - - + + Can't import %1 because file can't be parsed properly Impossible d'importer %1, le fichier ne peut pas être parsé correctement @@ -1679,13 +1679,13 @@ Appuyer sur 1 pour le mode par défaut Supprimer la sélection ? - + All profile files (*.g5e SGTA* PGTA*) Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1709,7 +1709,7 @@ Appuyer sur 1 pour le mode par défaut SavegameDialog - + Savegame Viewer Gestionnaire de sauvegardes @@ -1729,7 +1729,7 @@ Appuyer sur 1 pour le mode par défaut &Fermer - + Failed at %1 Échec de %1 @@ -1912,13 +1912,13 @@ Appuyer sur 1 pour le mode par défaut - - - - - - - + + + + + + + Snapmatic Properties Propriétés Snapmatic @@ -1959,7 +1959,7 @@ Appuyer sur 1 pour le mode par défaut - + Snapmatic Title Titre Snapmatic @@ -1969,30 +1969,30 @@ Appuyer sur 1 pour le mode par défaut Valeurs Snapmatic - + Crew: %1 (%2) Crew : %1 (%2) - + Title: %1 (%2) Titre : %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here Joueurs : %1 (%2) - + Player: %1 (%2) One Player is inserted here Joueur : %1 (%2) - - + + Appropriate: %1 Valide : %1 @@ -2032,64 +2032,64 @@ Appuyer sur 1 pour le mode par défaut A&nnuler - - - + + + Edit Éditer - + Yes Yes, should work fine Oui, devrait fonctionner Oui - + No No, could lead to issues Non, pourrait causer des erreurs Non - + <h4>Unsaved changes detected</h4>You want to save the JSON content before you quit? <h4>Modifications détectées</h4>Voulez-vous sauvegarder le contenu JSON avant de quitter ? - + Patching of Snapmatic Properties failed because of %1 Patch des propriétés Snapmatic échoué : %1 - + Patching of Snapmatic Properties failed because of JSON Error Patch des propriétés Snapmatic échoué : erreur JSON - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error La modification des propriétés Snapmatic a échoué : erreur d'entrée/sortie - + New Snapmatic title: Nouveau titre Snapmatic : - + Snapmatic Crew Crew Snapmatic - + New Snapmatic crew: Nouveau crew Snapmatic : @@ -2097,66 +2097,66 @@ Appuyer sur 1 pour le mode par défaut SnapmaticPicture - + PHOTO - %1 PHOTO - %1 - + open file %1 ouverture du fichier %1 - + header not exists les headers n'existent pas - + header is malformed les headers sont incorrects - + picture not exists (%1) l'image n'existe pas (%1) - + JSON not exists (%1) le JSON n'existe pas (%1) - + title not exists (%1) le titre n'existe pas (%1) - + description not exists (%1) la description n'existe pas (%1) - + reading file %1 because of %2 Example for %2: JSON is malformed error lecture du fichier %1 : %2 - - + + JSON is incomplete and malformed JSON incomplet ou incorrect - - + + JSON is incomplete JSON incomplet - - + + JSON is malformed JSON incorrect @@ -2205,8 +2205,8 @@ Appuyer sur 1 pour le mode par défaut - - + + Delete picture Supprimer la photo @@ -2216,22 +2216,22 @@ Appuyer sur 1 pour le mode par défaut Supprimer - + Are you sure to delete %1 from your Snapmatic pictures? Supprimer %1 ? - + Failed at deleting %1 from your Snapmatic pictures Impossible de supprimer %1 - + Failed to hide %1 In-game from your Snapmatic pictures %1 n'a pas pu être rendu invisible en jeu - + Failed to show %1 In-game from your Snapmatic pictures %1 n'a pas pu être rendu visible en jeu @@ -2349,7 +2349,7 @@ Appuyer sur 1 pour le mode par défaut - + &Close Fer&mer @@ -2425,15 +2425,15 @@ Appuyer sur 1 pour le mode par défaut - + Select &GTA V Folder... Modifier l'emplacement de &GTA V... - - - + + + Select GTA V Folder... Modifier l'emplacement de GTA V... @@ -2494,51 +2494,51 @@ Appuyer sur 1 pour le mode par défaut - + &About %1 &À propos de %1 - - + + Select Profile Sélectionner un profil - + Open File... Ouvrir... - - - - + + + + Open File Ouvrir - + Can't open %1 because of not valid file format Impossible d'ouvrir %1, format invalide - + %1 - Messages %1 - Nouvelles - + Show In-game Visible en jeu - + Hide In-game Invisible en jeu diff --git a/res/gta5sync_ko.ts b/res/gta5sync_ko.ts index 5453fc8..2c58356 100644 --- a/res/gta5sync_ko.ts +++ b/res/gta5sync_ko.ts @@ -37,31 +37,31 @@ Qt로 실행 %6<br/> 닫기(&C) - + Translated by %1 Translated by translator, example Translated by Syping 번역 %1 - + TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile 앙시모사우루스,https://steamcommunity.com/profiles/76561198166105984/ - + A project for viewing Grand Theft Auto V Snapmatic<br/> Pictures and Savegames 이 프로그램은 GTA 5 스냅매틱을 수정하고 보기 위한 프로젝트입니다.<br/> 이미지 뷰어 및 세이브 파일 관리 지원 - + Copyright &copy; <a href="%1">%2</a> %3 저작권 &copy; <a href="%1">%2</a> %3 - + %1 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> %1는 <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> 에 따라 라이센스가 부여됩니다 @@ -177,47 +177,47 @@ Pictures and Savegames ImageEditorDialog - + Overwrite Image... 이미지 덮어쓰기 - + Apply changes 변경 사항 적용 - + &Overwrite 덮어쓰기(&O) - + Discard changes 변경 사항 무시 - + &Close 닫기(&C) - - - - + + + + Snapmatic Image Editor 스냅매틱 이미지 편집기 - - + + Patching of Snapmatic Image failed because of I/O Error I/O 오류로 인해 스냅매틱 이미지를 패치하지 못했습니다. - - + + Patching of Snapmatic Image failed because of Image Error 이미지 오류로 인해 스냅매틱 이미지를 패치하지 못했습니다. @@ -262,9 +262,9 @@ Pictures and Savegames - - - + + + Background Colour: <span style="color: %1">%1</span> 배경 색상: <span style="color: %1">%1</span> @@ -279,9 +279,9 @@ Pictures and Savegames - - - + + + Background Image: 배경 이미지: @@ -370,27 +370,27 @@ Pictures and Savegames 취소(&C) - + &Import new Picture... 새로운 사진 가져오기(&I) - + &Crop Picture... 사진 자르기(&C) - + &Load Settings... 설정 불러오기(&L) - + &Save Settings... 설정 저장(&S) - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! @@ -398,8 +398,8 @@ Pictures and Savegames 사용자 지정 아바타 - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! @@ -407,112 +407,112 @@ Pictures and Savegames 사용자 지정 사진 - - + + Background Image: %1 배경 이미지: %1 - + Storage Background Image: Storage 배경 이미지: 저장됨 저장됨 - + Crop Picture... 사진 자르기 - + &Crop 자르기(&C) - + Crop Picture 사진 자르기 - - + + Load Settings... 설정 불러오기 - - + + Please import a new picture first 먼저 새 이미지를 가져오세요 - - + + Default Default as Default Profile 기본 프로필로 기본 설정 기본 - - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + + Profile %1 Profile %1 as Profile 1 %1을 프로필 1로 지정합니다. 프로필 %1 - - + + Please select your settings profile 설정 프로필을 선택하세요 - - + + Save Settings... 설정 저장 - - + + Snapmatic Avatar Zone 스냅매틱 아바타 영역 - - + + Are you sure to use a square image outside of the Avatar Zone? When you want to use it as Avatar the image will be detached! 아바타 구역 밖에서 네모난 이미지를 정말 사용합니까? 아바타로 사용하려는 경우 이미지가 분리됩니다! - + Select Colour... 색상 선택 - + File Background Image: File 배경 이미지: 파일 @@ -547,7 +547,7 @@ When you want to use it as Avatar the image will be detached! 닫기(&C) - + JSON Error JSON 오류 @@ -610,7 +610,7 @@ When you want to use it as Avatar the image will be detached! 완료(&D) - + X: %1 Y: %2 X and Y position @@ -763,26 +763,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 찾음: %1 - - + - + + Language: %1 언어: %1 @@ -803,7 +803,7 @@ Y: %2 - + Participate in %1 User Statistics 사용자 통계 참가 %1 @@ -839,8 +839,8 @@ Y: %2 - + Participation ID: %1 참여 아이디: %1 @@ -862,8 +862,8 @@ Y: %2 - - + + Current: %1 현재: %1 @@ -931,100 +931,100 @@ Y: %2 취소(&C) - + %1 (Language priority) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (우선 순위) - + System System in context of System default 시스템 - + %1 (Game language) Next closest language compared to the Game settings 게임 설정과 가장 가까운 언어 %1 (게임 언어) - - + + Auto Automatic language choice. 언어 자동 선택 자동 - - + + %1 (Closest to Interface) Next closest language compared to the Interface 인터페이스와 가장 가까운 언어 %1 (인터페이스와 가까운 언어) - + %1 %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. 다시 시작한 후 새 사용자 지정 폴더가 초기화됩니다. %1. - + No Profile No Profile, as default 프로필 없음 (기본값) 프로필 없음 - - + + Profile: %1 프로필: %1 - + View %1 User Statistics Online 온라인 %1 사용자 통계 보기 - + Not registered 등록되지 않았습니다. - - - - + + + + Yes - - + + No 아니요 - - + + OS defined OS 정의 - - + + Steam defined 스팀 정의 @@ -1068,43 +1068,43 @@ Y: %2 닫기(&C) - + Export as &Picture... 내 PC에 이미지로 내보내기(&P) - + Export as &Snapmatic... 내 PC에 스냅매틱으로 내보내기(&S) - + &Edit Properties... 속성 편집(&E) - + &Overwrite Image... 이미지 덮어쓰기(&O) - + Open &Map Viewer... 지도 뷰어 열기(&M) - + Open &JSON Editor... JSON 편집기 열기(&J) - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1113,35 +1113,35 @@ Arrow Keys - Navigate 화살표키 - 이동 - + Snapmatic Picture Viewer 스냅매틱 이미지 뷰어 - + Failed at %1 %1에서 실패했습니다. - - - + + + No Players 플레이어 없음 - - + + No Crew 조직 없음 - + Unknown Location 알 수 없는 위치 - + Avatar Preview Mode Press 1 for Default View 아바타 미리 보기 모드입니다. @@ -1279,28 +1279,28 @@ Press 1 for Default View 취소(&C) - + Add Players... 플레이어 추가 - + Failed to add more Players because the limit of Players are %1! 플레이어의 제한이 %1이므로 플레이어를 추가하지 못했습니다! - - + + Add Player... 플레이어 추가 - + Enter Social Club Player ID 소셜 클럽 플레이어 아이디 입력 - + Failed to add Player %1 because Player %1 is already added! %1 플레이어가 이미 추가되어 %1 플레이어를 추가하지 못했습니다! @@ -1350,8 +1350,8 @@ Press 1 for Default View %2 파일 중 %1 파일을 내보냅니다. - - + + @@ -1373,40 +1373,40 @@ Press 1 for Default View 가져오기 - - - - - - + + + + + + Import 가져오기 - - + + All image files (%1) 모든 이미지 파일 (%1) - - + + - + All files (**) 모든 파일 (**) - - + + Can't import %1 because file can't be open 파일을 열 수 없으므로 %1을 가져올 수 없습니다. - - + + Can't import %1 because file can't be parsed properly 파일을 구문 분석할 수 없으므로 %1을 가져올 수 없습니다. @@ -1438,26 +1438,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) GTA V로 내보내기 (*.g5e) - + Savegames files (SGTA*) 세이브 파일 (SGTA*) - + Snapmatic pictures (PGTA*) 스냅매틱 이미지 (PGTA*) - + No valid file is selected 올바른 파일이 선택되지 않았습니다. @@ -1478,13 +1478,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture 스냅매틱 이미지를 읽지 못했습니다. - + Failed to read Savegame file 세이브 파일을 읽지 못했습니다. @@ -1703,7 +1703,7 @@ Press 1 for Default View 제목 변경 - + All profile files (*.g5e SGTA* PGTA*) 모든 프로필 파일 (*.g5e SGTA* PGTA*) @@ -1727,7 +1727,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer 세이브 파일 보기 @@ -1747,7 +1747,7 @@ Press 1 for Default View 닫기(&C) - + Failed at %1 실패 %1 @@ -1930,13 +1930,13 @@ Press 1 for Default View - - - - - - - + + + + + + + Snapmatic Properties 스냅매틱 속성 @@ -2016,100 +2016,100 @@ Press 1 for Default View 취소(&C) - + <h4>Unsaved changes detected</h4>You want to save the JSON content before you quit? < h4>저장되지 않은 변경 내용이 감지되었습니다. </h4>그만두기 전에 JSON 콘텐츠를 저장하겠습니까? - + Patching of Snapmatic Properties failed because of %1 %1로 인해 스냅매틱 속성을 패치하지 못했습니다. - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error I/O 오류로 인해 스냅매틱 속성을 패치하지 못했습니다. - + Patching of Snapmatic Properties failed because of JSON Error JSON 오류로 인해 스냅매틱 속성을 패치하지 못했습니다. - + Snapmatic Crew 조직 스냅매틱 - + New Snapmatic crew: 새로운 조직 스냅매틱: - + Snapmatic Title 스냅매틱 제목 - + New Snapmatic title: 새로운 스냅매틱 제목: - - - + + + Edit 편집 - + Players: %1 (%2) Multiple Player are inserted here 여기에 여러 플레이어가 추가됩니다. 플레이어: %1 (%2) - + Player: %1 (%2) One Player is inserted here 여기에 플레이어 하나가 추가됩니다. 플레이어: %1 (%2) - + Title: %1 (%2) 제목: %1 (%2) - - + + Appropriate: %1 변경: %1 - + Yes Yes, should work fine 네, 잘 될 거예요. - + No No, could lead to issues 아니요, 문제가 발생할 수 있습니다. 아니요 - + Crew: %1 (%2) 조직: %1 (%2) @@ -2117,65 +2117,65 @@ Press 1 for Default View SnapmaticPicture - - + + JSON is incomplete and malformed JSON 파일이 불안정하거나 형식이 잘못되었습니다. - - + + JSON is incomplete JSON 파일이 불안정합니다. - - + + JSON is malformed 잘못된 JSON 형식 - + PHOTO - %1 사진 - %1 - + open file %1 파일 열기 %1 - + header not exists 헤더가 존재하지 않습니다. - + header is malformed 헤더의 형식이 잘못되었습니다. - + picture not exists (%1) 이미지가 존재하지 않습니다. (%1) - + JSON not exists (%1) JSON 파일이 존재하지 않습니다. (%1) - + title not exists (%1) 제목이 존재하지 않습니다. (%1) - + description not exists (%1) 설명이 존재하지 않습니다. (%1) - + reading file %1 because of %2 Example for %2: JSON is malformed error %2의 예: JSON이 잘못된 형식입니다 @@ -2226,8 +2226,8 @@ Press 1 for Default View - - + + Delete picture 이미지 삭제 @@ -2297,22 +2297,22 @@ Press 1 for Default View 모두 선택 해제(&D) - + Are you sure to delete %1 from your Snapmatic pictures? 스냅매틱 이미지에서 %1을 삭제하시겠습니까? - + Failed at deleting %1 from your Snapmatic pictures 스냅매틱 이미지에서 %1을 삭제하지 못했습니다. - + Failed to hide %1 In-game from your Snapmatic pictures 인게임 스냅매틱 이미지에서 %1 을 숨기지 못했습니다. - + Failed to show %1 In-game from your Snapmatic pictures 인게임 스냅매틱 이미지에서 %1 을 표시하지 못했습니다. @@ -2377,7 +2377,7 @@ Press 1 for Default View - + &Close 닫기(&C) @@ -2414,7 +2414,7 @@ Press 1 for Default View - + &About %1 %1 정보(&A) @@ -2470,15 +2470,15 @@ Press 1 for Default View - + Select &GTA V Folder... GTA V 폴더 선택(&G) - - - + + + Select GTA V Folder... GTA V 폴더 선택 @@ -2523,44 +2523,44 @@ Press 1 for Default View - + Show In-game 인게임 보이기 - + Hide In-game 인게임 숨기기 - - + + Select Profile 프로필 선택 - + Open File... 파일 열기... - - - - + + + + Open File 파일 열기 - + Can't open %1 because of not valid file format 올바른 파일 형식이 아니므로 %1을 열 수 없습니다. - + %1 - Messages %1 - 뉴스 diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index 2c3bd72..9145f42 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -37,31 +37,31 @@ Running with Qt %6<br/> &Закрыть - + Translated by %1 Translated by translator, example Translated by Syping Перевёл %1 - + TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile VADemon,https://github.com/VADemon/ - + A project for viewing Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Проект для просмотра Grand Theft Auto V Snapmatic<br/> картинок и сохранений - + Copyright &copy; <a href="%1">%2</a> %3 Copyright &copy; <a href="%1">%2</a> %3 - + %1 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> %1 под лицензией <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> @@ -181,47 +181,47 @@ Pictures and Savegames ImageEditorDialog - - - - + + + + Snapmatic Image Editor Редактор картинок Snapmatic - + Overwrite Image... Перезаписать картинку... - + Apply changes Применить изменения - + &Overwrite &Перезаписать - + Discard changes Отменить изменения - + &Close &Закрыть - - + + Patching of Snapmatic Image failed because of I/O Error Не удалось изменить картинку Snapmatic из-за ошибки ввода-вывода - - + + Patching of Snapmatic Image failed because of Image Error Не удалось изменить картинку Snapmatic из-за ошибки Image Error @@ -266,9 +266,9 @@ Pictures and Savegames - - - + + + Background Colour: <span style="color: %1">%1</span> Цвет фона: <span style="color: %1">%1</span> @@ -297,8 +297,8 @@ Pictures and Savegames Импортировать как есть, не меняя картинку. Обязательно поломает Snapmatic, если не знаешь, что делаешь - - + + Background Image: %1 Фоновая картинка: %1 @@ -377,144 +377,144 @@ Pictures and Savegames - - - + + + Background Image: Фоновая картинка: - + &Import new Picture... &Импортировать картинку... - + &Crop Picture... Об&резать картинку... - + &Load Settings... &Загрузить настройки... - + &Save Settings... &Сохранить настройки... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Свой Аватар - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! Своя Картинка - + Storage Background Image: Storage Хранилище - + Crop Picture... Обрезать картинку... - + &Crop Об&резать - + Crop Picture Обрезать картинку - - + + Please import a new picture first Импортируй сначала новую картинку - - + + Default Default as Default Profile По умолчанию - - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + + Profile %1 Profile %1 as Profile 1 Профиль %1 - - + + Load Settings... Загрузить настройки... - - + + Please select your settings profile Пожалуйста, выбери профиль для настроек - - + + Save Settings... Сохранить настройки... - - + + Are you sure to use a square image outside of the Avatar Zone? When you want to use it as Avatar the image will be detached! Ты точно хочешь использовать квадратное изображение вне зоны аватарки? Если это аватар, то изображение будет обрезано! - - + + Snapmatic Avatar Zone Зона Snapmatic Аватарки - + Select Colour... Выбрать цвет... - + File Background Image: File Файл @@ -548,7 +548,7 @@ When you want to use it as Avatar the image will be detached! &Закрыть - + JSON Error Ошибка JSON @@ -611,7 +611,7 @@ When you want to use it as Avatar the image will be detached! &Готово - + X: %1 Y: %2 X and Y position @@ -763,26 +763,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 Найдено: %1 - - + - + + Language: %1 Язык: %1 @@ -803,7 +803,7 @@ Y: %2 - + Participate in %1 User Statistics Участвовать в пользовательской статистике %1 @@ -836,8 +836,8 @@ Y: %2 - + Participation ID: %1 Номер участника: %1 @@ -890,8 +890,8 @@ Y: %2 - - + + Current: %1 Сейчас: %1 @@ -933,95 +933,95 @@ Y: %2 От&мена - + System System in context of System default Система - + %1 (Game language) Next closest language compared to the Game settings %1 (Язык игры) - - + + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Совпадает с интерфейсом) - - + + Auto Automatic language choice. Автоматически - + %1 (Language priority) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (Приоритетный язык) - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Другая папка будет загружена после перезапуска %1. - + View %1 User Statistics Online Посмотреть пользовательскую статистику %1 онлайн - + Not registered Не зарегистрирован - - - - + + + + Yes Да - - + + No Нет - - + + OS defined Настройка от ОС - - + + Steam defined Настройка от Steam - + No Profile No Profile, as default Нет профиля - - + + Profile: %1 Профиль: %1 @@ -1071,37 +1071,37 @@ Y: %2 Экспортировать - + Export as &Picture... Экспортировать как &картинку... - + Export as &Snapmatic... Экспортировать как &Snapmatic... - + &Overwrite Image... &Перезаписать картинку... - + &Edit Properties... &Изменить свойства... - + Open &Map Viewer... Открыть &карту... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1110,37 +1110,37 @@ Arrow Keys - Navigate Стрелки - Навигация - + Snapmatic Picture Viewer Просмотрщик фотографий Snapmatic - + Failed at %1 Ошибка при %1 - - + + No Crew Вне банды - - - + + + No Players Игроков нет - + Avatar Preview Mode Press 1 for Default View Режим просмотра аватарок Нажмите 1 для стандартного просмотра - + Unknown Location Неизвестное место @@ -1242,7 +1242,7 @@ Press 1 for Default View Картинки Snapmatic (PGTA*) - + Open &JSON Editor... Открыть &редактор JSON... @@ -1276,28 +1276,28 @@ Press 1 for Default View &Отмена - + Add Players... Добавить игроков... - + Failed to add more Players because the limit of Players are %1! Невозможно добавить больше игроков из-за ограничения в %1! - - + + Add Player... Добавить игрока... - + Enter Social Club Player ID Введите идентификатор игрока из Social Club - + Failed to add Player %1 because Player %1 is already added! Нельзя повторно добавить игрока %1, %1 уже добавлен! @@ -1357,8 +1357,8 @@ Press 1 for Default View <h4>Нижеследующие картинки Snapmatic были восстановлены</h4>%1 - - + + @@ -1380,32 +1380,32 @@ Press 1 for Default View Импортировать... - - - - - - + + + + + + Import Импортировать - + Savegames files (SGTA*) Файлы сохранения (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) - - + + - + All files (**) Все файлы (**) @@ -1426,20 +1426,20 @@ Press 1 for Default View - + Failed to read Snapmatic picture Не удалось загрузить картинку Snapmatic - + Failed to read Savegame file Не удалось загрузить файл сохранения - + No valid file is selected Выбранный файл неверен @@ -1454,22 +1454,22 @@ Press 1 for Default View Файлы для импорта (%1) - - + + All image files (%1) Все файлы изображений (%1) - - + + Can't import %1 because file can't be open Не удалось открыть %1, файл не может быть открыт - - + + Can't import %1 because file can't be parsed properly Не получилось импортировать %1, файл не может быть правильно обработан @@ -1692,13 +1692,13 @@ Press 1 for Default View Экспортируется файл %1 из %2 - + All profile files (*.g5e SGTA* PGTA*) Все файлы профиля (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1714,7 +1714,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer Просмотрщик сохранений @@ -1734,7 +1734,7 @@ Press 1 for Default View &Закрыть - + Failed at %1 Ошибка при %1 @@ -1917,13 +1917,13 @@ Press 1 for Default View - - - - - - - + + + + + + + Snapmatic Properties Свойства Snapmatic @@ -1963,7 +1963,7 @@ Press 1 for Default View Значения в Snapmatic - + Crew: %1 (%2) Банда: %1 (%2) @@ -1974,30 +1974,30 @@ Press 1 for Default View - + Snapmatic Title Заголовок Snapmatic - + Title: %1 (%2) Заголовок: %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here Игроки: %1 (%2) - + Player: %1 (%2) One Player is inserted here Игрок: %1 (%2) - - + + Appropriate: %1 Подходит: %1 @@ -2037,62 +2037,62 @@ Press 1 for Default View &Отмена - - - + + + Edit Правка - + Yes Yes, should work fine Да - + No No, could lead to issues Нет - + <h4>Unsaved changes detected</h4>You want to save the JSON content before you quit? <h4>Несохранённые изменения</h4>Сохранить изменения в JSON перед выходом? - + Patching of Snapmatic Properties failed because of %1 Не удалось изменить свойства Snapmatic из-за %1 - + Patching of Snapmatic Properties failed because of JSON Error Не удалось измененить свойства Snapmatic из-за ошибки JSON - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error Не удалось измененить свойства Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Новый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: Новая банда на Snapmatic: @@ -2100,66 +2100,66 @@ Press 1 for Default View SnapmaticPicture - + PHOTO - %1 ФОТО - %1 - + open file %1 Открыть файл %1 - + header not exists Отсутствует шапка (header) - + header is malformed Шапка (header) повреждена - + picture not exists (%1) Картинки не существует (%1) - + JSON not exists (%1) JSON не существует (%1) - + title not exists (%1) Заголовок отсутствует (%1) - + description not exists (%1) Описание отсутствует (%1) - + reading file %1 because of %2 Example for %2: JSON is malformed error Чтение из файла %1 из-за %2 - - + + JSON is incomplete and malformed JSON не полный и повреждён - - + + JSON is incomplete JSON частично отсутствует - - + + JSON is malformed JSON повреждён @@ -2203,28 +2203,28 @@ Press 1 for Default View - - + + Delete picture Удалить картинку - + Are you sure to delete %1 from your Snapmatic pictures? Уверены, что хотите удалить %1 из коллекции картинок Snapmatic? - + Failed at deleting %1 from your Snapmatic pictures Не удалось удалить %1 из колелкции картинок Snapmatic - + Failed to hide %1 In-game from your Snapmatic pictures Не удалось скрыть %1 из списка картинок Snapmatic в игре - + Failed to show %1 In-game from your Snapmatic pictures Не удалось показать %1 в списке картинок Snapmatic в игре @@ -2392,7 +2392,7 @@ Press 1 for Default View - + Select &GTA V Folder... Выбрать &папку GTA V... @@ -2436,7 +2436,7 @@ Press 1 for Default View - + &Close &Закрыть @@ -2477,16 +2477,16 @@ Press 1 for Default View - - + + Select Profile Выбор профиля - - - + + + Select GTA V Folder... Выбрать папку GTA V... @@ -2499,30 +2499,30 @@ Press 1 for Default View - + &About %1 &О программе %1 - + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Не удалось открыть %1 из-за неверного формата файла - + %1 - Messages %1 - Новости @@ -2534,14 +2534,14 @@ Press 1 for Default View - + Show In-game Показывать в игре - + Hide In-game Скрыть в игре diff --git a/res/gta5sync_uk.ts b/res/gta5sync_uk.ts index 32bf9a2..9cfbca6 100644 --- a/res/gta5sync_uk.ts +++ b/res/gta5sync_uk.ts @@ -37,13 +37,13 @@ Running with Qt %6<br/> &Закрити - + Translated by %1 Translated by translator, example Translated by Syping Переклад %1 - + TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile PROFessoR 'AppleSOft',https://steamcommunity.com/id/AppleSOft @@ -52,19 +52,19 @@ twitter,https://twitter.com/_VenJam1n VenJam1n,g5e://about?VmVuSmFtMW4:U3RlYW06IDxhIGhyZWY9Imh0dHBzOi8vc3RlYW1jb21tdW5pdHkuY29tL3Byb2ZpbGVzLzc2NTYxMTk3OTg0NjM1ODE2LyI+UFJPRmVzc29SICdBcHBsZVNPZnQnPC9hPjxici8+U29jaWFsIENsdWI6IDxhIGhyZWY9Imh0dHBzOi8vc29jaWFsY2x1Yi5yb2Nrc3RhcmdhbWVzLmNvbS9tZW1iZXIvLS1WZW5KYW0xbi0tLzU2Mzc1NjkiPlZlbkphbTFuPC9hPjxici8+VHdpdHRlcjogPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9fVmVuSmFtMW4iPlZlbkphbTFuPC9hPg - + A project for viewing Grand Theft Auto V Snapmatic<br/> Pictures and Savegames Проект для перегляду Grand Theft Auto V Snapmatic<br/> зображень та сейвів - + Copyright &copy; <a href="%1">%2</a> %3 Авторське право &copy; <a href="%1">%2</a> %3 - + %1 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> %1 ліцензовано під <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> @@ -180,47 +180,47 @@ Pictures and Savegames ImageEditorDialog - + Overwrite Image... Перезаписати зображення... - + Apply changes Застосувати зміни - + &Overwrite &Перезаписати - + Discard changes Скасувати зміни - + &Close &Закрити - - - - + + + + Snapmatic Image Editor Редактор Snapmatic зображень - - + + Patching of Snapmatic Image failed because of I/O Error Виправлення Snapmatic зображення не вдалося через I/O Error - - + + Patching of Snapmatic Image failed because of Image Error Виправлення Snapmatic зображення не вдалося через помилку картинки @@ -265,9 +265,9 @@ Pictures and Savegames - - - + + + Background Colour: <span style="color: %1">%1</span> Фоновий колір: <span style="color: %1">%1</span> @@ -282,9 +282,9 @@ Pictures and Savegames - - - + + + Background Image: Фонове зображення: @@ -373,144 +373,144 @@ Pictures and Savegames &Скасувати - + &Import new Picture... &Імпортувати нове зображення... - + &Crop Picture... &Обрізати зображення... - + &Load Settings... &Завантажити параметри... - + &Save Settings... &Зберегти параметри... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! Користувацький Аватар - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! Користувацьке Зображення - + Storage Background Image: Storage Зберігання - + Crop Picture... Обрізати зображення... - + &Crop &Обрізати - + Crop Picture Обрізати зображення - - + + Please import a new picture first Спершу імпортуйте нове зображення - - + + Default Default as Default Profile Стандартний - - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + + Profile %1 Profile %1 as Profile 1 Профіль %1 - - + + Load Settings... Завантажити параметри... - - + + Save Settings... Зберегти параметри... - - + + Snapmatic Avatar Zone Зона Snapmatic Аватару - - + + Are you sure to use a square image outside of the Avatar Zone? When you want to use it as Avatar the image will be detached! Ви впевнені, що будете використовувати квадратне зображення поза зоною аватара? Якщо ви хочете використовувати його як Аватар, зображення буде відокремлено! - + Select Colour... Вибір кольору... - - + + Background Image: %1 Фонове зображення: %1 - - + + Please select your settings profile Будь ласка, виберіть свій профіль налаштувань - + File Background Image: File Файл @@ -544,7 +544,7 @@ When you want to use it as Avatar the image will be detached! &Закрити - + JSON Error JSON помилка @@ -607,7 +607,7 @@ When you want to use it as Avatar the image will be detached! &Готово - + X: %1 Y: %2 X and Y position @@ -759,26 +759,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 Знайдено:%1 - - + - + + Language: %1 Мова: %1 @@ -800,7 +800,7 @@ Y: %2 - + Participate in %1 User Statistics Опитування %1 про устаткування ПК @@ -836,8 +836,8 @@ Y: %2 - + Participation ID: %1 ID учасника : %1 @@ -859,8 +859,8 @@ Y: %2 - - + + Current: %1 Зараз: %1 @@ -926,95 +926,95 @@ Y: %2 &Скасувати - + System System in context of System default Як у системи - + %1 (Game language) Next closest language compared to the Game settings %1 (Мова гри) - - + + %1 (Closest to Interface) Next closest language compared to the Interface %1 (Співпадає з інтерфейсом) - - + + Auto Automatic language choice. Автоматично - + %1 (Language priority) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (пріоритет мови) - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Нова користувацька папка буде ініціалізована після перезапуску %1. - + No Profile No Profile, as default Жодного - - + + Profile: %1 Профіль: %1 - + View %1 User Statistics Online Переглянути користувацьку статистику %1 онлайн - + Not registered Не зареєстрований - - - - + + + + Yes Так - - + + No Ні - - + + OS defined Визначається ОС - - + + Steam defined Визначається Steam @@ -1058,43 +1058,43 @@ Y: %2 &Закрити - + Export as &Picture... Експортувати як &зображення... - + Export as &Snapmatic... Експортувати як &Snapmatic... - + &Edit Properties... &Змінити властивості... - + &Overwrite Image... &Перезаписати зображення... - + Open &Map Viewer... Відкрити &карту... - + Open &JSON Editor... Відкрити редактор &JSON... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1103,35 +1103,35 @@ Arrow Keys - Navigate Стрілки - Навігація - + Snapmatic Picture Viewer Переглядач фотографій Snapmatic - + Failed at %1 Помилка на%1 - - - + + + No Players Гравців немає - - + + No Crew Банди немає - + Unknown Location Невідома локація - + Avatar Preview Mode Press 1 for Default View Режим для аватарок @@ -1269,28 +1269,28 @@ Press 1 for Default View &Скасувати - + Add Players... Додати гравців... - + Failed to add more Players because the limit of Players are %1! Не вдалося додати більше гравців, бо ліміт %1! - - + + Add Player... Додати гравця... - + Enter Social Club Player ID Введіть ID гравця Social Club - + Failed to add Player %1 because Player %1 is already added! Не вдалося додати гравця %1, оскільки %1 вже доданий! @@ -1340,8 +1340,8 @@ Press 1 for Default View Експортується файл %1 з %2 файлів - - + + @@ -1363,40 +1363,40 @@ Press 1 for Default View Імпортування... - - - - - - + + + + + + Import Імпорт - - + + All image files (%1) Файли зображень (%1) - - + + - + All files (**) Усі файли (**) - - + + Can't import %1 because file can't be open Неможливо імпортувати %1, оскільки файл не може бути відкритий - - + + Can't import %1 because file can't be parsed properly Неможливо імпортувати %1, оскільки файл неможливо розібрати правильно @@ -1428,26 +1428,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) Файли збереження гри (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic зображення (PGTA*) - + No valid file is selected Вибрані недійсні файли @@ -1468,13 +1468,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture Не вдалося прочитати Snapmatic картинку - + Failed to read Savegame file Не вдалося прочитати файл збереження гри @@ -1688,7 +1688,7 @@ Press 1 for Default View Змінити назву - + All profile files (*.g5e SGTA* PGTA*) Усі файли зображень (*.g5e SGTA* PGTA*) @@ -1712,7 +1712,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer Перегляд файлів збереження гри @@ -1732,7 +1732,7 @@ Press 1 for Default View &Закрити - + Failed at %1 Помилка на %1 @@ -1915,13 +1915,13 @@ Press 1 for Default View - - - - - - - + + + + + + + Snapmatic Properties Властивості Snapmatic @@ -2001,96 +2001,96 @@ Press 1 for Default View &Скасувати - + <h4>Unsaved changes detected</h4>You want to save the JSON content before you quit? <h4> Виявлені незбережені зміни </h4> Ви хочете зберегти вміст JSON перед тим, як вийти? - + Patching of Snapmatic Properties failed because of %1 Змінити властивості Snapmatic не вдалося тому що%1 - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error Змінити властивості Snapmatic не вдалося через I/O Помилку - + Patching of Snapmatic Properties failed because of JSON Error Змінити властивості Snapmatic не вдалося через JSON Помилку - + Snapmatic Crew Snapmatic банда - + New Snapmatic crew: Нова Snapmatic банда: - + Snapmatic Title Snapmatic назва - + New Snapmatic title: Новий Snapmatic заголовок: - - - + + + Edit Правка - + Players: %1 (%2) Multiple Player are inserted here Гравці: %1 (%2) - + Player: %1 (%2) One Player is inserted here Гравець: %1 (%2) - + Title: %1 (%2) Назва: %1 (%2) - - + + Appropriate: %1 Підходить: %1 - + Yes Yes, should work fine Так - + No No, could lead to issues Ні - + Crew: %1 (%2) Банда: %1 (%2) @@ -2098,65 +2098,65 @@ Press 1 for Default View SnapmaticPicture - - + + JSON is incomplete and malformed JSON неповний та неправильний - - + + JSON is incomplete JSON неповний - - + + JSON is malformed JSON неправильний - + PHOTO - %1 ФОТО - %1 - + open file %1 відкрити файл%1 - + header not exists заголовок не існує - + header is malformed заголовок неправильний - + picture not exists (%1) зображення не існує (%1) - + JSON not exists (%1) JSON не існує (%1) - + title not exists (%1) заголовок не існує (%1) - + description not exists (%1) опис не існує (%1) - + reading file %1 because of %2 Example for %2: JSON is malformed error читання файлу %1 тому що %2 @@ -2206,8 +2206,8 @@ Press 1 for Default View - - + + Delete picture Видалити фото @@ -2277,22 +2277,22 @@ Press 1 for Default View &Зняти виділення усіх - + Are you sure to delete %1 from your Snapmatic pictures? Ви дійсно бажаєте видалити %1 з ваших Snapmatic фотографій? - + Failed at deleting %1 from your Snapmatic pictures Не вдалося видалити%1 з ваших Snapmatic фотографій - + Failed to hide %1 In-game from your Snapmatic pictures Не вдалося сховати %1 Snapmatic у грі - + Failed to show %1 In-game from your Snapmatic pictures Не вдалося показати %1 Snapmatic у грі @@ -2357,7 +2357,7 @@ Press 1 for Default View - + &Close &Закрити @@ -2394,7 +2394,7 @@ Press 1 for Default View - + &About %1 &Про %1 @@ -2450,15 +2450,15 @@ Press 1 for Default View - + Select &GTA V Folder... Вибрати &GTA V теку... - - - + + + Select GTA V Folder... Вибрати GTA V теку... @@ -2503,44 +2503,44 @@ Press 1 for Default View - + Show In-game Показати у грі - + Hide In-game Сховати у грі - - + + Select Profile Вибрати профіль - + Open File... Відкрити файл... - - - - + + + + Open File Відкрити файл - + Can't open %1 because of not valid file format Неможливо відкрити %1 через невідомий формат файлу - + %1 - Messages %1 - Новини diff --git a/res/gta5sync_zh_TW.ts b/res/gta5sync_zh_TW.ts index 1f139f6..ad65545 100644 --- a/res/gta5sync_zh_TW.ts +++ b/res/gta5sync_zh_TW.ts @@ -37,30 +37,30 @@ Running with Qt %6<br/> 關閉(&C) - + Translated by %1 Translated by translator, example Translated by Syping 繁體中文化: %1 - + TRANSLATOR Insert your name here and profile here in following scheme, First Translator,First Profile\nSecond Translator\nThird Translator,Second Profile Ray,https://steamcommunity.com/profiles/76561198282701714/ - + A project for viewing Grand Theft Auto V Snapmatic<br/> Pictures and Savegames 一個 Grand Theft Auto V Snapmatic 圖片、遊戲存檔檢視專案 - + Copyright &copy; <a href="%1">%2</a> %3 版權 &copy; <a href="%1">%2</a> %3 - + %1 is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> %1 使用 <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a> 授權條款發布 @@ -176,47 +176,47 @@ Pictures and Savegames ImageEditorDialog - + Overwrite Image... 修改圖片... - + Apply changes 套用變更 - + &Overwrite 修改(&O) - + Discard changes 捨棄變更 - + &Close 關閉(&C) - - - - + + + + Snapmatic Image Editor Snapmatic 圖片編輯器 - - + + Patching of Snapmatic Image failed because of I/O Error I/O 錯誤,Snapmatic 圖片更新失敗 - - + + Patching of Snapmatic Image failed because of Image Error 圖片錯誤,Snapmatic 圖片更新失敗 @@ -261,9 +261,9 @@ Pictures and Savegames - - - + + + Background Colour: <span style="color: %1">%1</span> 背景顏色: <span style="color: %1">%1</span> @@ -278,9 +278,9 @@ Pictures and Savegames - - - + + + Background Image: 背景圖片: @@ -369,143 +369,143 @@ Pictures and Savegames 取消(&C) - + &Import new Picture... 匯入新圖片(&I)... - + &Crop Picture... 裁剪圖片(&C)... - + &Load Settings... 載入設定(&L)... - + &Save Settings... 儲存設定(&S)... - + Custom Avatar Custom Avatar Description in SC, don't use Special Character! 自訂大頭貼 - - + + Custom Picture Custom Picture Description in SC, don't use Special Character! 自訂圖片 - + Storage Background Image: Storage 儲存 - + Crop Picture... 裁剪圖片... - + &Crop 裁剪(&C) - + Crop Picture 裁剪圖片 - - + + Please import a new picture first 請先匯入新圖片 - - + + Default Default as Default Profile 預設 - - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + + Profile %1 Profile %1 as Profile 1 設定檔 %1 - - + + Load Settings... 載入設定... - - + + Save Settings... 儲存設定... - - + + Snapmatic Avatar Zone Snapmatic 大頭貼區域 - - + + Are you sure to use a square image outside of the Avatar Zone? When you want to use it as Avatar the image will be detached! 你確定要在大頭貼區域以外的地方使用方形圖片嗎? 作為大頭貼的圖片將被分離! - + Select Colour... 選擇顏色... - - + + Background Image: %1 背景圖片: %1 - - + + Please select your settings profile 請選擇設定檔 - + File Background Image: File 文件 @@ -539,7 +539,7 @@ When you want to use it as Avatar the image will be detached! 關閉(&C) - + JSON Error JSON 錯誤 @@ -602,7 +602,7 @@ When you want to use it as Avatar the image will be detached! 完成(&D) - + X: %1 Y: %2 X and Y position @@ -754,26 +754,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 找到: %1 - - + - + + Language: %1 語言: %1 @@ -794,7 +794,7 @@ Y: %2 - + Participate in %1 User Statistics 參與 %1 使用者統計 @@ -830,8 +830,8 @@ Y: %2 - + Participation ID: %1 參與 ID: %1 @@ -853,8 +853,8 @@ Y: %2 - - + + Current: %1 目前: %1 @@ -920,95 +920,95 @@ Y: %2 取消(&C) - + System System in context of System default 系統 - - + + %1 (Closest to Interface) Next closest language compared to the Interface %1 (與介面接近的語言) - - + + Auto Automatic language choice. 自動 - + %1 (Language priority) First language a person can talk with a different person/application. "Native" or "Not Native". %1 (語言優先) - + %1 (Game language) Next closest language compared to the Game settings %1 (遊戲語言) - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. 自訂資料夾將在 %1 重新啟動後初始化. - + No Profile No Profile, as default - - + + Profile: %1 設定檔: %1 - + View %1 User Statistics Online 檢視 %1 使用者統計資訊 - + Not registered 未註冊參與 - - - - + + + + Yes - - + + No - - + + OS defined 系統定義 - - + + Steam defined Steam 定義 @@ -1052,43 +1052,43 @@ Y: %2 關閉(&C) - + Export as &Picture... 匯出成圖片(&P)... - + Export as &Snapmatic... 匯出成 Snapmatic(&S)... - + &Edit Properties... 編輯屬性(&E) ... - + &Overwrite Image... 修改圖片(&O)... - + Open &Map Viewer... 開啟地圖檢視器(&M)... - + Open &JSON Editor... 開啟 JSON 編輯器(&J)... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1097,35 +1097,35 @@ Arrow Keys - Navigate 方向鍵 - 導覽 - + Snapmatic Picture Viewer Snapmatic 圖片檢視器 - + Failed at %1 失敗: %1 - - - + + + No Players - - + + No Crew - + Unknown Location 未知地點 - + Avatar Preview Mode Press 1 for Default View 大頭貼預覽模式 @@ -1263,28 +1263,28 @@ Press 1 for Default View 取消(&C) - + Add Players... 新增玩家... - + Failed to add more Players because the limit of Players are %1! 因為數量限制 %1,無法新增更多玩家! - - + + Add Player... 新增玩家... - + Enter Social Club Player ID 輸入玩家的 Social Club ID - + Failed to add Player %1 because Player %1 is already added! 新增 %1 失敗,因為 %1 已被新增! @@ -1334,8 +1334,8 @@ Press 1 for Default View 匯出檔案中 %1 共 %2 個檔案 - - + + @@ -1357,40 +1357,40 @@ Press 1 for Default View 匯入... - - - - - - + + + + + + Import 匯入 - - + + All image files (%1) 所有圖片 (%1) - - + + - + All files (**) 所有檔案 (**) - - + + Can't import %1 because file can't be open 無法匯入 %1,因為檔案無法開啟 - - + + Can't import %1 because file can't be parsed properly 無法匯入 %1,因為檔案無法正確解析 @@ -1422,26 +1422,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) 遊戲存檔 (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic 圖片 (PGTA*) - + No valid file is selected 沒有選擇有效的檔案 @@ -1460,13 +1460,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture 無法讀取 Snapmatic 圖片 - + Failed to read Savegame file 無法讀取遊戲存檔 @@ -1678,7 +1678,7 @@ Press 1 for Default View 更改標題 - + All profile files (*.g5e SGTA* PGTA*) 所有設定檔檔案 (*.g5e SGTA* PGTA*) @@ -1694,7 +1694,7 @@ Press 1 for Default View SavegameDialog - + Savegame Viewer 遊戲存檔檢視器 @@ -1714,7 +1714,7 @@ Press 1 for Default View 關閉(&C) - + Failed at %1 失敗 %1 @@ -1897,13 +1897,13 @@ Press 1 for Default View - - - - - - - + + + + + + + Snapmatic Properties Snapmatic 屬性 @@ -1983,96 +1983,96 @@ Press 1 for Default View 取消(&C) - + <h4>Unsaved changes detected</h4>You want to save the JSON content before you quit? <h4>目前的變更未儲存</h4> 你想要在退出之前儲存 JSON 嗎? - + Patching of Snapmatic Properties failed because of %1 更新 Snapmatic 屬性失敗,因為 %1 - - - - + + + + Patching of Snapmatic Properties failed because of I/O Error 讀寫錯誤,未能更新 Snapmatic 屬性 - + Patching of Snapmatic Properties failed because of JSON Error JSON 錯誤,未能更新 Snapmatic 屬性 - + Snapmatic Crew 幫會 - + New Snapmatic crew: 輸入新的幫會: - + Snapmatic Title 標題 - + New Snapmatic title: 輸入新的標題: - - - + + + Edit 編輯 - + Players: %1 (%2) Multiple Player are inserted here 玩家: %1 (%2) - + Player: %1 (%2) One Player is inserted here 玩家: %1 (%2) - + Title: %1 (%2) 標題: %1 (%2) - - + + Appropriate: %1 可使用: %1 - + Yes Yes, should work fine - + No No, could lead to issues - + Crew: %1 (%2) 幫會: %1 (%2) @@ -2080,65 +2080,65 @@ Press 1 for Default View SnapmaticPicture - - + + JSON is incomplete and malformed JSON 不完整和異常 - - + + JSON is incomplete JSON 不完整 - - + + JSON is malformed JSON 異常 - + PHOTO - %1 照片 - %1 - + open file %1 開啟檔案 - %1 - + header not exists 標頭不存在 - + header is malformed 標頭異常 - + picture not exists (%1) 圖片不存在 (%1) - + JSON not exists (%1) JSON 不存在 (%1) - + title not exists (%1) 標題不存在 (%1) - + description not exists (%1) 描述不存在 (%1) - + reading file %1 because of %2 Example for %2: JSON is malformed error 讀取檔案 %1 失敗,因為 %2 @@ -2188,8 +2188,8 @@ Press 1 for Default View - - + + Delete picture 刪除圖片 @@ -2259,22 +2259,22 @@ Press 1 for Default View 取消選擇全部(&D) - + Are you sure to delete %1 from your Snapmatic pictures? 你確定要刪除Snapmatic 圖片 %1 嗎? - + Failed at deleting %1 from your Snapmatic pictures 刪除 Snapmatic 圖片 %1 失敗 - + Failed to hide %1 In-game from your Snapmatic pictures 在遊戲中隱藏圖片 %1 失敗 - + Failed to show %1 In-game from your Snapmatic pictures 在遊戲中顯示圖片 %1 失敗 @@ -2338,7 +2338,7 @@ Press 1 for Default View - + &Close 關閉(&C) @@ -2375,7 +2375,7 @@ Press 1 for Default View - + &About %1 關於 %1(&A) @@ -2431,15 +2431,15 @@ Press 1 for Default View - + Select &GTA V Folder... 選擇 GTA V 資料夾(&G)... - - - + + + Select GTA V Folder... 選擇 GTA V 資料夾... @@ -2484,44 +2484,44 @@ Press 1 for Default View - + Show In-game 在遊戲中顯示 - + Hide In-game 在遊戲中隱藏 - - + + Select Profile 選擇設定檔 - + Open File... 開啟檔案... - - - - + + + + Open File 開啟檔案 - + Can't open %1 because of not valid file format 格式無效,無法開啟 %1 - + %1 - Messages %1 - 新聞 diff --git a/res/mapcayoperico.jpg b/res/mapcayoperico.jpg new file mode 100644 index 0000000..a9cdab1 Binary files /dev/null and b/res/mapcayoperico.jpg differ